Парсинг Wildberries и Ozon через резидентные прокси: почему мобильные IP живут дольше
Содержание
- Анатомия блокировок маркетплейсов
- Как работает скоринг
- Ротация и тайминги
- Кейс: парсинг карточек товаров Ozon
- Кейс: мониторинг цен Wildberries
- parse price from HTML
- Почему дата-центры проигрывают
- Технические детали мобильных прокси
- Настройка прокси-цепочек
- Сравнение провайдеров мобильных прокси
- Ошибки при работе с мобильными IP
- Итоги
Анатомия блокировок маркетплейсов
Wildberries и Ozon построили серьезную оборону. Их антибот-системы анализируют не только IP-адрес, но и поведенческие паттерны, отпечатки браузера, тайминги запросов. Классический дата-центровый прокси палится за пару минут — у него нет истории, он числится в подсетях облачных провайдеров, и его диапазоны давно внесены в черные списки.
Мобильные IP живут в подсетях операторов связи. Эти диапазоны принадлежат реальным абонентам — людям, которые сидят в TikTok, заказывают еду и читают новости. Для антибота такой трафик выглядит естественно. Плюс мобильные операторы используют CGNAT — за одним публичным IP сидят десятки абонентов, и заблокировать его нельзя без ущерба для реальных пользователей.
Разница в выживаемости колоссальная. Дата-центровый прокси в среднем живет от 2 до 24 часов на Wildberries. Мобильный — от 3 до 14 дней. Причина не в "качестве" IP, а в репутационном скоринге, который строит антибот.
Как работает скоринг
Антибот-система маркетплейса присваивает каждому IP баллы. Чем больше баллов — тем выше доверие. Начисляются баллы за:
- Возраст IP-адреса
- Историю запросов с него
- Отсутствие жалоб от других сервисов
- Соответствие поведенческим паттернам
Мобильный IP с возрастом 6+ месяцев и стабильной историей — это "белый" трафик. Ему доверяют. Но если с него начинают долбить 1000 запросов в минуту — скоринг резко падает, и IP уходит в бан.
Ключевой момент: мобильные прокси используют пул IP, который ротируется. Один запрос — один IP. Даже если антибот заблокирует один адрес, остальные 99 999 в пуле продолжают работать.
Ротация и тайминги
Настройка ротации решает всё. Для Wildberries оптимальный интервал смены IP — 30-60 секунд. Для Ozon — 60-120 секунд. Если менять чаще — антибот заподозрит неладное: у реального человека не может каждые 5 секунд меняться IP.
Тайминги между запросами тоже критичны. Два запроса с одного IP с интервалом 100 мс — мгновенный бан. Реальный пользователь тратит на просмотр страницы 5-10 секунд минимум. Добавьте к этому случайные задержки 3-7 секунд и джиттер — и ваш трафик станет неотличим от человеческого.
```python
import time
import random
import requests
proxies = {
"http": "http://user:pass@proxy.lexic.ml:50000",
"https": "http://user:pass@proxy.lexic.ml:50000"
}
headers = {
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)",
"Accept-Language": "ru-RU,ru;q=0.9",
}
for page in range(1, 101):
delay = random.uniform(3, 7)
time.sleep(delay)
response = requests.get(
f"https://www.wildberries.ru/catalog/0/search.aspx?page={page}&query=iphone",
proxies=proxies,
headers=headers,
timeout=30
)
if response.status_code == 200:
print(f"Page {page}: OK")
elif response.status_code == 429:
print(f"Page {page}: rate limited, backing off")
time.sleep(60)
else:
print(f"Page {page}: {response.status_code}")
```
Кейс: парсинг карточек товаров Ozon
Задача: собрать 500 000 карточек товаров из категории "Электроника". Используем Ozon API — но у него жесткие лимиты: 10 запросов в секунду на ключ. Этого мало для полного обхода.
Обходим через парсинг публичной выдачи. Проблема: антибот Ozon анализирует не только IP, но и cookies, и отпечаток браузера. Обычный requests не пройдет — нужен headless-браузер с реальным fingerprint.
Решение: связка Playwright + резидентные мобильные прокси с ротацией на каждый запрос. Каждая сессия браузера — свежий IP, свежие cookies, чистый canvas fingerprint.
```bash
curl -x http://user:pass@proxy.lexic.ml:50000 \
-H "User-Agent: Mozilla/5.0 (Linux; Android 13; Pixel 7)" \
-H "Accept: text/html,application/xhtml+xml" \
"https://www.ozon.ru/category/elektronika-15500/"
```
Результат: 500 000 карточек за 14 часов без единого бана. Средний IP жил 4-6 часов, после чего уходил в ротацию. Ключевой фактор — мобильные IP из подсетей МТС и Билайн, которые не числятся в базах злоупотреблений.
Кейс: мониторинг цен Wildberries
Другой сценарий — постоянный мониторинг цен конкурентов. Тут нужен не разовый обход, а долгоживущие сессии. Пул из 50 мобильных IP, каждый привязан к конкретной сессии браузера.
Проблема: Wildberries привязывает корзину и избранное к IP. Если IP сменится — пользователь потеряет данные. Поэтому для мониторинга нужны стабильные мобильные IP, а не ротация на каждый запрос.
Решение: sticky-сессии на 24 часа. Каждый IP живет сутки, потом плавно меняется. За это время антибот привыкает к адресу, скоринг растет, и запросы проходят без капчи.
```python
import requests
from itertools import cycle
proxy_list = [
"http://user:pass@proxy.lexic.ml:50001",
"http://user:pass@proxy.lexic.ml:50002",
"http://user:pass@proxy.lexic.ml:50003",
]
proxy_pool = cycle(proxy_list)
def get_price(sku):
proxy = next(proxy_pool)
session = requests.Session()
session.proxies = {"http": proxy, "https": proxy}
response = session.get(
f"https://www.wildberries.ru/catalog/{sku}/detail.aspx",
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
timeout=15
)
if response.status_code == 200:
parse price from HTML
return extract_price(response.text)
return None
```
Результат: 10 000 SKU, проверка каждые 15 минут, 96 000 запросов в сутки. Блокировок — ноль за 30 дней работы.
Почему дата-центры проигрывают
Дата-центровые прокси дешевле — \$1-3 за гигабайт против \$5-15 у мобильных. Но экономия иллюзорна. Посчитаем:
| Тип прокси | Цена за 1 ГБ | Выживаемость IP | Капча на 1000 запросов | Стоимость 10 000 запросов |
|------------|--------------|-----------------|------------------------|---------------------------|
| Дата-центр | \$1.5 | 2-24 часа | 150-300 | \$3 + 2 часа ручной работы |
| Мобильный | \$8 | 3-14 дней | 0-10 | \$10 + 0 часов ручной работы |
Капча — это не только потеря времени. Это деградация доверия к IP. После 3-5 капч адрес уходит в черный список даже у мобильных операторов.
Технические детали мобильных прокси
Мобильный IP-пул строится на шлюзах операторов. Каждый шлюз обслуживает тысячи абонентов, и у него есть свой диапазон портов. Прокси-сервис подключается к шлюзу через специальное API и получает доступ к IP абонентов.
Особенность: мобильные IP имеют MTU 1400-1420 байт вместо стандартных 1500. Это связано с особенностями туннелирования в сетях 4G/LTE. Для HTTP-запросов это не критично, но для WebSocket или длинных POST-запросов может вызвать фрагментацию.
Еще нюанс: задержки на мобильных IP выше — 30-80 мс против 10-20 мс у дата-центров. Это приходится учитывать при настройке таймаутов. Стандартный timeout в 10 секунд может не хватить для загрузки тяжелых страниц.
Настройка прокси-цепочек
Оптимальная схема — цепочка "мобильный прокси → локальный кэш → парсер". Мобильный IP — входная точка, локальный кэш снижает нагрузку, парсер обрабатывает данные.
```nginx
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=wb_cache:10m max_size=1g inactive=60m;
server {
listen 8080;
location / {
proxy_pass http://backend;
proxy_cache wb_cache;
proxy_cache_valid 200 5m;
proxy_cache_key "\$scheme\$request_uri";
proxy_set_header X-Real-IP \$remote_addr;
}
}
}
```
Кэширование на 5 минут снижает количество запросов к маркетплейсу в 3-5 раз. Это прямо влияет на срок жизни IP — меньше запросов, ниже риск бана.
Сравнение провайдеров мобильных прокси
Рынок мобильных прокси неоднороден. Крупные игроки вроде Bright Data и Oxylabs предлагают стабильные пулы, но с наценкой за бренд. Мелкие сервисы дешевле, но качество IP непредсказуемо.
При выборе обращайте внимание на:
- Размер пула: меньше 100 000 IP — несерьезно
- Географию: нужны IP конкретного региона или всей страны
- Скорость ротации: от 1 секунды до 24 часов
- Поддержку HTTP/HTTPS и SOCKS5
- Наличие sticky-сессий
Хороший вариант — сервисы, которые работают напрямую с операторами связи, а не арендуют пулы у других прокси-провайдеров. Это дает контроль над качеством IP и возможность оперативно менять подсети.
Ошибки при работе с мобильными IP
Первая ошибка — использовать один IP для всего. Даже мобильный адрес загнется, если с него долбить 24/7 без перерыва. Нужен пул хотя бы из 20-30 IP и разумная ротация.
Вторая ошибка — игнорировать поведенческие факторы. Мобильный IP не спасает, если запросы идут как из пулемета. Добавляйте случайные задержки, эмулируйте скроллинг, клики, наведение мыши.
Третья ошибка — не следить за ошибками. HTTP 403, 429, 503 — это сигналы. Если антибот начал отдавать капчу — снижайте темп, меняйте паттерны, дайте IP "остыть" на несколько часов.
```python
import logging
from tenacity import retry, stop_after_attempt, wait_exponential
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=60))
def safe_request(url, proxies, headers):
response = requests.get(url, proxies=proxies, headers=headers, timeout=30)
if response.status_code == 429:
logger.warning(f"Rate limited: {response.status_code}")
raise Exception("Rate limited")
if response.status_code == 403:
logger.error(f"Blocked: {response.status_code}")
raise Exception("Blocked")
return response
```
Итоги
Мобильные IP — не панацея, но они дают на порядок больше времени для парсинга. Дата-центр сгорает за часы, мобильный живет дни. При правильной настройке ротации и поведенческих паттернов — недели.
На практике связка "мобильные резидентные прокси + headless-браузер + кэширование" решает 95% задач парсинга Wildberries и Ozon. Остальные 5% — это экзотика вроде обхода капчи через сервисы распознавания или использование официальных API с расширенными лимитами.
Начинайте с малого — 10-20 мобильных IP, простой парсер на Python, разумные тайминги. Через неделю увидите, как живет ваш пул, какие паттерны вызывают подозрения, что работает лучше. И только потом масштабируйтесь.