Назад к блогу

Как избежать блокировки при частых запросах к API Wildberries, Ozon и Авито

Разбираем причины блокировок API маркетплейсов при парсинге цен и остатков, показываем как правильно настроить прокси, задержки и заголовки для стабильной работы без банов.

📅30 января 2026 г.

Если вы занимаетесь мониторингом цен конкурентов, парсингом остатков товаров или автоматическим размещением объявлений на маркетплейсах — вы наверняка сталкивались с блокировками. API Wildberries, Ozon, Яндекс.Маркета и Авито активно защищаются от автоматизации: ограничивают количество запросов, банят IP-адреса и требуют капчу. В этом руководстве разберём почему происходят блокировки и как настроить парсер так, чтобы работать стабильно месяцами без банов.

Почему маркетплейсы блокируют частые запросы к API

Маркетплейсы тратят огромные деньги на поддержку инфраструктуры — серверы, базы данных, CDN. Когда вы делаете тысячи запросов в минуту для парсинга цен, вы создаёте дополнительную нагрузку на их системы. Но главная причина блокировок не техническая, а бизнес-ориентированная.

Основные причины блокировок:

  • Защита конкурентных данных. Wildberries и Ozon не хотят, чтобы конкуренты легко получали информацию о ценах, остатках и популярных товарах. Эти данные — коммерческая тайна.
  • Снижение нагрузки на сервера. Один парсер может генерировать столько же запросов, сколько 10 000 обычных покупателей. Это увеличивает расходы на хостинг.
  • Борьба с накруткой и спамом. Автоматические системы используют для накрутки просмотров, отзывов, массового размещения объявлений на Авито.
  • Монетизация API. Некоторые маркетплейсы предлагают официальные платные API с лимитами. Блокируя бесплатный парсинг, они стимулируют покупку доступа.

Например, если вы мониторите цены на 5000 товаров каждый час — это 120 000 запросов в сутки. С одного IP-адреса это выглядит подозрительно, и система защиты маркетплейса быстро заблокирует ваш доступ.

Какие методы защиты используют Wildberries, Ozon и Авито

Современные маркетплейсы используют многоуровневую защиту от парсинга. Понимание этих механизмов поможет правильно настроить обход блокировок.

Метод защиты Как работает Как обойти
Rate Limiting Ограничение запросов с одного IP: 100-500 в час Задержки между запросами + ротация IP
IP Blacklist Блокировка известных прокси дата-центров Использование резидентных прокси
User-Agent проверка Блокировка запросов без браузерного User-Agent Установка реалистичных заголовков
JavaScript проверки Требование выполнения JS-кода для получения данных Использование headless браузеров
Captcha Принудительная проверка при подозрительной активности Снижение частоты запросов, сервисы решения капчи
TLS Fingerprinting Определение автоматизации по параметрам TLS Использование библиотек с правильным fingerprint
Поведенческий анализ Анализ паттернов: скорость кликов, движения мыши Рандомизация задержек, имитация человеческого поведения

Wildberries использует агрессивную защиту: лимит около 200-300 запросов в час с одного IP, проверку User-Agent и JavaScript-челленджи. При превышении лимита вы получите HTTP 429 (Too Many Requests) или 403 (Forbidden).

Ozon более лоялен к парсингу через API, но активно банит IP дата-центров. Они используют сервисы определения типа IP (DataCenter vs Residential), поэтому обычные прокси часто не работают.

Авито защищает API от массового размещения объявлений и парсинга контактов. Здесь важна географическая привязка: если размещаете объявление в Казани, IP должен быть из Казани, иначе модерация заблокирует публикацию.

Rate limiting: как правильно настроить задержки между запросами

Rate limiting — это искусственное ограничение скорости запросов, чтобы ваша активность выглядела как действия обычного пользователя. Главное правило: лучше медленно, но стабильно, чем быстро и с баном.

Рекомендуемые настройки для популярных маркетплейсов:

Wildberries:

  • Задержка между запросами: 2-5 секунд (рандомизированная)
  • Максимум 150-200 запросов в час с одного IP
  • Пауза 10-15 минут после каждых 100 запросов
  • Ротация IP после 200 запросов

Ozon:

  • Задержка между запросами: 1-3 секунды
  • Максимум 300-400 запросов в час с одного IP
  • Использование резидентных прокси обязательно
  • Ротация IP после 300 запросов

Авито:

  • Задержка между запросами: 3-7 секунд
  • Максимум 50-100 запросов в час (строгие лимиты)
  • IP должен соответствовать городу объявления
  • Один IP = один аккаунт (не смешивайте)

Как реализовать рандомизированные задержки: Не используйте фиксированные интервалы типа "ровно 3 секунды" — это выглядит как бот. Добавьте случайность: от 2 до 5 секунд. Большинство парсеров поддерживают это через настройки.

Например, в Python с библиотекой requests это выглядит так:

import time
import random
import requests

def make_request(url, proxies):
    response = requests.get(url, proxies=proxies)
    # Рандомная задержка от 2 до 5 секунд
    delay = random.uniform(2.0, 5.0)
    time.sleep(delay)
    return response

# Пример использования
proxy = {
    'http': 'http://username:password@proxy.example.com:8000',
    'https': 'http://username:password@proxy.example.com:8000'
}

for product_id in product_list:
    url = f'https://card.wb.ru/cards/detail?nm={product_id}'
    response = make_request(url, proxy)
    # Обработка данных...

Важный момент: После каждых 100-200 запросов делайте длинную паузу (10-20 минут) или меняйте IP. Это имитирует поведение человека, который просматривает товары, потом отвлекается на другие дела.

Ротация прокси для распределения нагрузки

Даже с правильными задержками один IP не выдержит долгой нагрузки. Решение — ротация прокси: распределение запросов между множеством IP-адресов. Это основа стабильного парсинга маркетплейсов.

Типы прокси для парсинга маркетплейсов:

Тип прокси Преимущества Недостатки Для каких задач
Дата-центры Быстрые, дешёвые, стабильные Легко определяются, часто в бан-листах Яндекс.Маркет, мелкие маркетплейсы
Резидентные Реальные IP домашних пользователей, низкий риск бана Дороже, медленнее дата-центров Wildberries, Ozon, Авито
Мобильные IP мобильных операторов, максимальная анонимность Самые дорогие, переменная скорость Обход жёстких блокировок Авито

Для парсинга Wildberries и Ozon рекомендуем использовать резидентные прокси — они имеют IP реальных домашних пользователей, поэтому маркетплейсы не могут их отличить от обычных покупателей. Прокси дата-центров здесь работают плохо: Ozon и Wildberries ведут чёрные списки таких IP.

Стратегии ротации прокси:

  • Ротация после N запросов. Меняйте IP после каждых 100-300 запросов. Это оптимальный баланс между эффективностью и безопасностью.
  • Ротация по времени. Меняйте IP каждые 30-60 минут. Подходит для долгих сессий парсинга.
  • Sticky sessions. Используйте один IP для всех запросов к одному товару/категории, потом меняйте. Это снижает подозрительность.
  • Географическая привязка. Для Авито обязательно: парсите объявления Москвы через московские IP, Казани — через казанские.

Большинство провайдеров резидентных прокси предлагают автоматическую ротацию: вы получаете один endpoint, а IP меняется автоматически с заданной частотой или после каждого запроса. Это упрощает настройку парсера.

Пример настройки пула прокси в Python:

import requests
import random

# Список прокси (можно загрузить из файла)
proxy_list = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    'http://user:pass@proxy3.example.com:8000',
    # ... ещё 50-100 прокси
]

def get_random_proxy():
    proxy = random.choice(proxy_list)
    return {
        'http': proxy,
        'https': proxy
    }

# Использование
for product_id in product_list:
    proxy = get_random_proxy()  # Случайный прокси для каждого запроса
    response = requests.get(url, proxies=proxy)
    # Обработка...

Настройка заголовков и fingerprint для имитации браузера

Маркетплейсы анализируют не только IP и частоту запросов, но и HTTP-заголовки. Если ваш парсер отправляет запросы с дефолтными заголовками библиотеки (например, python-requests/2.28.0), он мгновенно определяется как бот.

Обязательные заголовки для имитации браузера:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    'Accept-Encoding': 'gzip, deflate, br',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Cache-Control': 'max-age=0',
    'Referer': 'https://www.google.com/'
}

Важные моменты:

  • User-Agent должен соответствовать реальному браузеру. Используйте актуальные версии Chrome, Firefox, Safari. Меняйте User-Agent каждые 100-200 запросов.
  • Accept-Language должен соответствовать географии прокси. Если используете российские IP — ставьте ru-RU, для украинских — uk-UA.
  • Referer показывает откуда пришёл пользователь. Для первого запроса используйте Google/Яндекс, для последующих — внутренние страницы маркетплейса.
  • Sec-Fetch-* заголовки добавляют реалистичности. Современные браузеры отправляют их автоматически.

TLS Fingerprinting: Продвинутые системы защиты (Ozon, Wildberries) анализируют параметры TLS-соединения: порядок cipher suites, расширения, версию протокола. Стандартные библиотеки Python/Node.js имеют отличающийся fingerprint от браузеров.

Решение — использование специализированных библиотек:

  • curl-impersonate (Python) — имитирует TLS fingerprint Chrome/Firefox
  • tls-client (Go, Python bindings) — настраиваемый TLS fingerprint
  • Playwright / Puppeteer — headless браузеры с настоящим TLS

Для большинства задач парсинга маркетплейсов достаточно правильных HTTP-заголовков и резидентных прокси. TLS fingerprinting критичен только при работе с самыми защищёнными API.

API vs веб-скрапинг: что безопаснее для парсинга

У маркетплейсов есть два способа получения данных: официальное API и парсинг HTML-страниц (веб-скрапинг). Какой выбрать для стабильной работы?

Параметр Официальное API Веб-скрапинг
Легальность ✅ Разрешено, есть документация ⚠️ Серая зона, может нарушать ToS
Стабильность ✅ Стабильная структура данных ❌ Ломается при редизайне сайта
Лимиты ⚠️ Жёсткие официальные лимиты ⚠️ Неофициальные, но есть защита
Доступ к данным ⚠️ Не все данные доступны ✅ Все публичные данные
Скорость ✅ Быстрые JSON-ответы ❌ Медленнее из-за HTML
Стоимость ⚠️ Часто платное ✅ Бесплатно (только прокси)

Рекомендации по выбору:

  • Используйте официальное API если: Вам нужны небольшие объёмы данных (до 10 000 товаров в день), вы готовы платить за доступ, важна легальность и стабильность.
  • Используйте веб-скрапинг если: Нужны большие объёмы данных, официальное API не предоставляет нужную информацию (например, цены конкурентов), бюджет ограничен.

Гибридный подход: Многие профессиональные парсеры комбинируют оба метода. Например, получают список товаров через API (быстро и легально), а детальную информацию о ценах и остатках парсят с HTML-страниц (больше данных).

Внутренние API маркетплейсов: Кроме официального API, маркетплейсы используют внутренние API для работы сайта. Например, Wildberries загружает данные товаров через https://card.wb.ru/cards/detail. Эти эндпоинты не документированы, но работают быстрее HTML-парсинга. Минус — могут измениться без предупреждения.

Настройка популярных парсеров и инструментов

Большинство селлеров и маркетологов используют готовые инструменты для парсинга маркетплейсов. Рассмотрим как правильно настроить прокси и лимиты в популярных решениях.

Настройка Scrapy (Python фреймворк)

Scrapy — популярный фреймворк для веб-скрапинга. Для работы с маркетплейсами добавьте в settings.py:

# Задержки между запросами
DOWNLOAD_DELAY = 3  # 3 секунды
RANDOMIZE_DOWNLOAD_DELAY = True  # Рандомизация от 0.5*DELAY до 1.5*DELAY

# Лимиты одновременных запросов
CONCURRENT_REQUESTS = 8
CONCURRENT_REQUESTS_PER_DOMAIN = 2

# Настройка прокси (через middleware rotating-proxies)
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    # ... список прокси
]

# User-Agent ротация
USER_AGENT_LIST = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Safari/537.36',
    # ... список User-Agent
]

# Повторные попытки при ошибках
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

Настройка Octoparse (визуальный парсер без кода)

Octoparse — популярный инструмент для парсинга без программирования. Настройка прокси и лимитов:

  1. Откройте Task Settings → Advanced Options
  2. В разделе "Network" включите "Use Proxy Server"
  3. Добавьте список прокси в формате IP:PORT:USER:PASS
  4. Включите "Rotate IP for each request" для автоматической ротации
  5. В разделе "Speed" установите "Slow" или "Custom" с задержкой 3-5 секунд
  6. Включите "Random delay" для имитации человеческого поведения

Настройка Selenium (автоматизация браузера)

Selenium управляет настоящим браузером, поэтому обходит многие защиты. Пример настройки с прокси:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import random

# Настройка Chrome с прокси
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://user:pass@proxy.example.com:8000')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# Скрытие WebDriver
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# Парсинг с задержками
urls = ['https://www.wildberries.ru/catalog/...', ...]

for url in urls:
    driver.get(url)
    # Рандомная задержка 3-7 секунд
    time.sleep(random.uniform(3, 7))
    
    # Скроллинг для имитации чтения
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
    time.sleep(random.uniform(1, 3))
    
    # Парсинг данных
    # ...

Готовые сервисы парсинга маркетплейсов

Если не хотите настраивать парсер самостоятельно, используйте специализированные сервисы:

  • Mpstats.io — аналитика Wildberries и Ozon, автоматический мониторинг цен и продаж
  • SellerFox — мониторинг конкурентов на маркетплейсах, отслеживание остатков
  • Moneyplace — парсинг Авито, автоматическое размещение объявлений
  • Parsehub — визуальный парсер для любых сайтов, включая маркетплейсы

Эти сервисы уже настроили прокси, лимиты и обход защит — вам остаётся только указать что парсить. Минус — ежемесячная подписка от 2000₽.

Мониторинг блокировок и автоматическая реакция

Даже с правильными настройками блокировки возможны: маркетплейсы обновляют защиту, прокси попадают в бан-листы, лимиты меняются. Важно отслеживать проблемы и реагировать автоматически.

Признаки блокировки которые нужно отслеживать:

  • HTTP 429 (Too Many Requests) — превышен лимит запросов, нужна пауза или смена IP
  • HTTP 403 (Forbidden) — IP заблокирован, нужна немедленная ротация прокси
  • HTTP 503 (Service Unavailable) — временная перегрузка или защита от DDoS
  • Капча в ответе — обнаружена автоматизация, нужно снизить активность
  • Пустые ответы или редирект на главную — мягкая блокировка
  • Резкое увеличение времени ответа — возможно rate limiting на стороне сервера

Автоматическая реакция на блокировки (пример на Python):

import requests
import time
from datetime import datetime

class SmartParser:
    def __init__(self, proxy_list):
        self.proxy_list = proxy_list
        self.current_proxy_index = 0
        self.request_count = 0
        self.blocked_proxies = set()
        
    def get_next_proxy(self):
        # Пропускаем заблокированные прокси
        while self.current_proxy_index in self.blocked_proxies:
            self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        
        proxy = self.proxy_list[self.current_proxy_index]
        return {'http': proxy, 'https': proxy}
    
    def rotate_proxy(self):
        self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        self.request_count = 0
        
    def make_request(self, url):
        max_retries = 3
        
        for attempt in range(max_retries):
            try:
                proxy = self.get_next_proxy()
                response = requests.get(url, proxies=proxy, timeout=10)
                
                # Проверка на блокировку
                if response.status_code == 429:
                    print(f"[{datetime.now()}] Rate limit! Пауза 60 секунд...")
                    time.sleep(60)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 403:
                    print(f"[{datetime.now()}] IP заблокирован! Ротация прокси...")
                    self.blocked_proxies.add(self.current_proxy_index)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 503:
                    print(f"[{datetime.now()}] Сервер перегружен. Пауза 120 секунд...")
                    time.sleep(120)
                    continue
                
                # Успешный запрос
                self.request_count += 1
                
                # Ротация после 200 запросов
                if self.request_count >= 200:
                    self.rotate_proxy()
                    time.sleep(10)  # Пауза после ротации
                
                return response
                
            except requests.exceptions.Timeout:
                print(f"[{datetime.now()}] Таймаут. Попытка {attempt + 1}/{max_retries}")
                time.sleep(5)
                
        return None  # Все попытки исчерпаны

Логирование и алерты: Настройте уведомления при критических событиях. Например, отправляйте сообщение в Telegram когда:

  • Заблокировано более 30% прокси из пула
  • Процент успешных запросов упал ниже 80%
  • Парсер не получил данных более 30 минут
  • Обнаружена капча в ответах

Метрики для мониторинга:

  • Success rate — процент успешных запросов (должен быть >90%)
  • Average response time — среднее время ответа (рост может указывать на проблемы)
  • Requests per hour — количество запросов в час по каждому прокси
  • Proxy health — процент работающих прокси в пуле
  • Block rate — частота блокировок (должна быть <5%)

Используйте дашборды для визуализации метрик: Grafana, Datadog или простые Google Sheets с автоматическим обновлением через API.

Заключение

Блокировки при парсинге маркетплейсов — это не препятствие, а задача которую можно решить правильной настройкой инструментов. Ключевые моменты для стабильной работы без банов:

  • Используйте резидентные прокси для Wildberries, Ozon и Авито — прокси дата-центров здесь не работают
  • Настройте рандомизированные задержки 2-5 секунд между запросами
  • Ротируйте IP после каждых 150-300 запросов или каждые 30-60 минут
  • Используйте реалистичные HTTP-заголовки с актуальными User-Agent
  • Мониторьте блокировки и автоматически реагируйте на них
  • Для Авито обязательна географическая привязка IP к городу объявления

Правильно настроенный парсер с качественными прокси может работать месяцами без единой блокировки, собирая десятки тысяч товаров ежедневно. Главное — не гнаться за скоростью, а имитировать поведение обычного пользователя.

Если вы планируете регулярно парсить Wildberries, Ozon или Авито, рекомендуем использовать резидентные прокси с автоматической ротацией — они обеспечивают максимальную стабильность и минимальный риск блокировок. Для задач требующих мобильные IP (например, обход жёстких блокировок Авито) подойдут мобильные прокси с IP российских операторов.