Ко всем статьям

Прокси для Crawlee: mobile proxy, ротация IP и гео‑парсинг

2026-03-05
Прокси для Crawlee: mobile proxy, ротация IP и гео‑парсинг

Практический гайд: как настроить индивидуальные mobile proxy в Crawlee (Node/Python), проверить IP/гео, избежать ошибок и собрать цены из JS‑каталогов.

Когда вы собираете данные с современных JS‑сайтов (каталоги, маркетплейсы, конфигураторы), «просто сделать запрос» часто не срабатывает: цены и наличие зависят от региона, контент догружается скриптами, а антибот быстро режет трафик. В таких задачах помогает Crawlee — библиотека для надежных краулеров — и грамотно настроенные прокси, особенно mobile proxy.

Прокси для Crawlee: что именно настраиваем и зачем

На практике прокси для Crawlee — это два уровня: (1) логика выбора IP для запросов/сессий (ротация, «липкие» сессии), и (2) точка подключения прокси в браузерный профиль (Playwright) или HTTP‑клиент. В Crawlee этим управляет ProxyConfiguration и (при необходимости) SessionPool, который помогает не повторять попытки через уже «плохие» прокси.

Почему Crawlee удобно для прод‑сбора

  • Надежность: очереди, ретраи, параллельность, контроль ошибок.
  • Браузерный сбор: Playwright‑краулер для корректного JS‑рендера.
  • Прокси/сессии: встроенная ротация IP и закрепление состояния пользователя.

Mobile proxy: когда они реально дают эффект

Mobile proxy используют IP мобильных операторов и часто работают через carrier‑grade NAT (CGNAT): множество абонентов делят один публичный IP, а сама сеть регулярно перераспределяет адреса. Поэтому мобильные IP нередко выглядят «естественнее» для антибот‑систем, а ротация может быть более частой, чем у датацентров.

  • Гео‑QA: проверка цен/доставки/валюты для разных регионов.
  • JS‑каталоги с блокировками: когда данные тянутся через XHR/GraphQL и IP банят по частоте.
  • Поиск мягких блоков: вместо 403 сайт отдает пустые карточки или «заглушку».

Короткая таблица: какие прокси выбирать

Тип Плюсы Минусы Когда подходит
Datacenter Дешево и быстро Часто детектируются Простые сайты, нагрузочные тесты
Residential Лучше проходят антибот, есть гео‑таргет Дороже, бывает нестабильный пинг Каталоги со средним уровнем защиты
Mobile (индивидуальные) Выше «доверие», естественная ротация Медленнее и дороже, гео по городу может «плавать» Сложные JS‑проекты, региональные цены

Где в Crawlee задается прокси на уровне профиля

В браузерных краулерах идея такая: Crawlee выбирает proxy URL (через ProxyConfiguration), а затем передает его в контекст запуска браузера. В документации упоминается формат URL с логином/паролем, например http://user:pass@host:port.

Какие поля нужны: host/port/login/password и протокол

  • host — адрес прокси‑узла;
  • port — порт;
  • login/password — если требуется авторизация;
  • protocolhttp/https/socks5. Playwright поддерживает HTTP(S) и SOCKSv5, а также username/password и bypass‑список.

Crawlee (Node.js): ProxyConfiguration + PlaywrightCrawler

В Node‑версии вы создаете ProxyConfiguration, передаете в краулер, и Crawlee автоматически управляет подключением. Без sessionId прокси ротируются по кругу; с sessionId один и тот же идентификатор будет стабильно получать один proxy URL — это помогает держать «липкую» сессию.

// Node.js (Crawlee + Playwright)
import { PlaywrightCrawler, ProxyConfiguration } from 'crawlee';

const proxyConfiguration = new ProxyConfiguration({
  proxyUrls: [
    'http://login:password@host1:port',
    'http://login:password@host2:port',
  ],
});

const crawler = new PlaywrightCrawler({
  proxyConfiguration,
  async requestHandler({ page, request, session, log }) {
    log.info(`URL: ${request.url}, session: ${session?.id ?? 'none'}`);
    // ... сбор данных
  },
});

await crawler.run(['https://example.com']);

Практика для mobile proxy: при региональных ценах лучше закреплять IP на группу страниц (регион = sessionId), а менять прокси при блокировке или после лимита страниц.

Crawlee (Python): ProxyConfiguration, ProxyInfo и SessionPool

В Python‑версии подход похож: задаете ProxyConfiguration со списком proxyUrls, а библиотека их ротирует. В обработчике страницы можно посмотреть текущий прокси через ProxyInfo.

# Python (Crawlee + Playwright)
from crawlee.playwright_crawler import PlaywrightCrawler
from crawlee.configuration import ProxyConfiguration

proxy_config = ProxyConfiguration(proxy_urls=[
    "http://login:password@host1:port",
    "http://login:password@host2:port",
])

crawler = PlaywrightCrawler(proxy_configuration=proxy_config)

@crawler.router.default_handler
async def handle(ctx):
    proxy_info = ctx.proxy_info
    ctx.log.info(f"Using proxy: {proxy_info.url if proxy_info else 'none'}")
    # ... сбор данных

await crawler.run(["https://example.com"])

Как валидировать прокси перед запуском

Проверяйте не только «IP сменился», но и гео, стабильность и то, что весь трафик действительно идет через прокси. В учебных примерах часто используют HTTPBin‑эндпоинт, чтобы быстро увидеть IP глазами сервера.

Проверка Как сделать Что считаем нормой
IP изменился HTTPBin / «what is my IP» Публичный IP не ваш офис/датацентр
Гео соответствует Сверить IP‑гео в 2–3 сервисах Страна совпадает; город у mobile может отличаться
Авторизация login/password в URL или параметры proxy Нет 407 Proxy Auth Required
Стабильность Серия коротких запросов с малой параллельностью Низкий % таймаутов и «просадок»

Кейс: карточки товаров из JS‑каталога с разными ценами по регионам

Задача: собрать название, цену, скидку и наличие из каталога, который JS‑рендерится, меняет цены по региону доставки и включает мягкие блоки.

Рабочая схема

  1. PlaywrightCrawler для SPA/JS.
  2. Сессии как контейнер cookies и «липкого» прокси.
  3. Стратегия: 1 регион = 1 sessionId, ротация при блокировке.
  4. Логи: sessionId + ProxyInfo + маркеры блоков.

Почему «ломаются» виджеты и пиксели при гео‑парсинге через прокси

Смена IP‑гео часто включает другую ветку логики: иной баннер согласия, другой набор сторонних скриптов, блокировку third‑party до события consent. Многие CMP прямо описывают блокировку контента и пикселей до получения согласия.

Если прокси «скачет» по странам или дает неточное гео, гео‑таргетинг CMP может включать/выключать скрипты непредсказуемо — отсюда «битые» пиксели и виджеты.

Риски, ограничения и типовые ошибки

  • Неточное гео у mobile: страна чаще стабильна, город — нет.
  • Скорость: mobile прокси медленнее — корректируйте таймауты и параллельность.
  • Протокол: перепутали http/https/socks5.
  • Слишком частая ротация: выглядит неестественно — закрепляйте сессии.
  • Несовпадение «региона»: IP один, а cookie/язык/валюта другие.
  • Правила и законность: соблюдайте ToS, robots и разумные лимиты.

FAQ

Можно ли без прокси для Crawlee?

Да, если сайт простой. Но для гео‑QA и защищенных JS‑каталогов прокси часто критичны, чтобы распределить нагрузку и удерживать стабильные сессии.

Как устроен crawlee proxy rotation и при чем тут sessionId?

Без sessionId прокси могут ротироваться по кругу; с sessionId один идентификатор стабильно получает один proxy URL. Это снижает шанс блокировок и помогает хранить cookies/токены в рамках одной «персоны».

Источники

  • Crawlee JS: ProxyConfiguration и ротация (round‑robin / sessionId).
  • Crawlee JS/Python: SessionPool и работа с «плохими» прокси.
  • Crawlee Python: ProxyConfiguration и ProxyInfo.
  • Playwright: поддерживаемые типы прокси и параметры.
  • Mobile proxy и CGNAT (обзор).
  • Consent/geo‑таргетинг и влияние на пиксели/виджеты.