Когда вы собираете данные с современных 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 — если требуется авторизация;
- protocol —
http/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‑рендерится, меняет цены по региону доставки и включает мягкие блоки.
Рабочая схема
- PlaywrightCrawler для SPA/JS.
- Сессии как контейнер cookies и «липкого» прокси.
- Стратегия: 1 регион = 1 sessionId, ротация при блокировке.
- Логи: 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‑таргетинг и влияние на пиксели/виджеты.