Почему парсить Авито сложно
Авито — одна из самых защищённых площадок Рунета. Среди защит, с которыми сталкиваются разработчики:
- JS-рендеринг: большинство данных загружается динамически
- Поведенческий анализ: блокировка по паттернам навигации и таймингам
- Fingerprinting браузера: блокировка headless-браузеров
- Ротация CAPTCHA при подозрительной активности
- Бан по IP уже после 50–100 запросов с одного адреса
Самостоятельная борьба с этим — сотни часов работы и постоянная поддержка по мере того, как Авито обновляет защиты.
Как XFetch решает эту задачу
Мы используем собственный патченный Chromium, у которого нет характерных признаков автоматизации. Fingerprint совпадает с обычным пользовательским браузером. Запросы идут через пул российских IP-адресов с реалистичными паузами и паттернами поведения.
Пример: получить объявления по запросу
import requests # Получаем страницу поиска Авито response = requests.get( "https://api.xfetch.ru/v1/fetch", params={ "url": "https://www.avito.ru/moskva/telefony?q=iphone+15", "format": "html", "browser": "true", # обязателен для Авито }, headers={"X-API-Key": "ваш_ключ"} ) data = response.json() print(data["content"]) # полный HTML страницы
from bs4 import BeautifulSoup import requests r = requests.get( "https://api.xfetch.ru/v1/fetch", params={"url": "https://www.avito.ru/moskva/telefony", "browser": "true"}, headers={"X-API-Key": "ваш_ключ"} ) soup = BeautifulSoup(r.json()["content"], "html.parser") items = soup.select("[data-marker='item']") for item in items: title = item.select_one("[itemprop='name']") price = item.select_one("[itemprop='price']") print(title.text, "—", price["content"] if price else "нет цены")
Получить Markdown для LLM
Если вы передаёте данные Авито в языковую модель, используйте format=markdown —
XFetch автоматически очищает HTML от лишнего и возвращает структурированный текст.
curl "https://api.xfetch.ru/v1/fetch" \ -H "X-API-Key: ваш_ключ" \ -G \ -d "url=https://www.avito.ru/moskva/kvartiry/123456789" \ -d "format=markdown" \ -d "browser=true"
Частые вопросы
Авито блокирует парсинг — как XFetch это обходит?
XFetch использует собственный патченный браузер с реалистичным fingerprint'ом и ротацию российских IP-адресов. Авито не видит разницы между нашим запросом и обычным пользователем.
Нужен ли браузерный режим для Авито?
Да. Авито загружает объявления через JavaScript, поэтому необходимо указывать browser=true. Простой HTTP-запрос вернёт пустую страницу.
Можно ли получить номер телефона продавца?
Телефоны на Авито скрыты за отдельным API-запросом с авторизацией. Мы можем получить страницу объявления целиком — дальнейшая логика на вашей стороне.
Сколько стоит парсинг Авито?
Браузерные запросы (нужны для Авито) — 50 ₽ за 1000 запросов. 1000 страниц объявлений обойдётся в 50 рублей.