Скрейпинг товарных агрегаторов с обходом CAPTCHA
Как собирать данные с товарных агрегаторов и ценовых площадок: обход антибот-защиты, TLS-профили, CAPTCHA, extract_rules, extract_schema и масштабирование через batch API.
Команда InfraProxy
20 февраля 2026 г.
Почему стандартный скрейпинг не работает на товарных агрегаторах
Товарные агрегаторы и ценовые площадки — важный источник данных для мониторинга цен, конкурентной разведки и ценовой оптимизации. При этом эти ресурсы относятся к числу наиболее защищённых: попытки автоматизированного сбора данных быстро натыкаются на блокировки, CAPTCHA и «пустые» страницы. Классические методы скрейпинга здесь не работают.
Фингерпринтинг и TLS-отпечатки. Антибот-системы проверяют соответствие User-Agent и TLS-отпечатка. Клиенты Python с OpenSSL имеют отпечаток JA3/JA4, отличный от Chrome — это сразу выдаёт автоматизацию и ведёт к отказу или перенаправлению на CAPTCHA.
Поведенческий анализ. Продвинутые системы отслеживают паттерны запросов, скорость навигации, наличие скролла и движения мыши. Простой HTTP-запрос не генерирует «человеческое» поведение.
CAPTCHA. При превышении порога «нормальной» активности пользователю показывается reCAPTCHA v3, hCaptcha или Cloudflare Turnstile. Обойти их без специализированных сервисов или браузерной эмуляции невозможно.
JavaScript-зависимый контент. Карточки товаров, цены, рейтинги и блоки сравнения подгружаются через XHR/Fetch после выполнения скриптов. Запрос без рендеринга возвращает пустой каркас страницы.
Для стабильного сбора требуется специализированный API с обходом антиботов: TLS-профили браузера, JavaScript-рендеринг, решение CAPTCHA и резидентные прокси.
Решение: API для скрейпинга с обходом антиботов
Scraper API (API для скрейпинга) объединяет все необходимые компоненты:
- TLS-профили браузера — отпечаток Chrome или Firefox вместо OpenSSL
- JavaScript-рендеринг — headless Chrome для полной загрузки динамического контента
- Решение CAPTCHA — автоматическое определение и обработка reCAPTCHA, hCaptcha, Turnstile
- Резидентные прокси — IP домашних провайдеров с высокой репутацией
Вы передаёте URL и правила извлечения — получаете структурированный JSON. Вся логика обхода защит инкапсулирована в сервисе.
Рабочий Python-пример с extract_rules
Базовый workflow: формирование запроса с extract_rules, настройка антибот-режима, отправка в API.
import httpx
import os
API_KEY = os.environ.get("SCRAPER_API_KEY")
BASE_URL = "https://api.example.com/v1/scrape"
payload = {
"url": "https://example.com/shopping/results?q=laptop",
"use_antibot": True,
"tls_profile": "chrome124",
"use_js_render": True,
"solve_captcha": True,
"use_residential": True,
"extract_rules": {
"products": {
"selector": ".product-card, .search-result-item",
"type": "list",
"fields": {
"title": "h3 a, .product-title",
"price": ".price-value, .amount",
"currency": ".currency",
"rating": ".rating-stars",
"review_count": ".reviews-count",
"link": "a@href",
"image": "img@src"
}
}
}
}
with httpx.Client(timeout=60.0) as client:
resp = client.post(
BASE_URL,
json=payload,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
)
resp.raise_for_status()
data = resp.json()
products = data.get("extract", {}).get("products", [])
print(f"Извлечено {len(products)} товаров")
Параметры:
use_antibot— включение стека обхода антибот-защитыtls_profile— TLS-отпечаток браузера (chrome124, firefox и т.д.)use_js_render— рендеринг JavaScriptsolve_captcha— автоматическое решение CAPTCHA при появленииuse_residential— резидентные прокси
Важные нюансы и подводные камни
Хрупкость extract_rules
extract_rules основаны на CSS-селекторах. При изменении вёрстки агрегатора (A/B-тесты, редизайн) селекторы перестают работать, и extract возвращается пустым. Рекомендуется мониторинг: если доля пустых ответов растёт — обновить правила или перейти на extract_schema.
Стоимость solve_captcha
Каждый вызов решения CAPTCHA тарифицируется отдельно. При высокой частоте CAPTCHA расходы растут. Оптимизируйте: используйте резидентные прокси и session_id для многостраничной навигации — это снижает долю запросов с CAPTCHA.
Резидентные прокси обязательны
Датацентровые IP на товарных агрегаторах блокируются очень быстро. Параметр use_residential: true для такого типа источников по сути обязателен.
networkidle vs load
При use_js_render указывайте, когда считать страницу загруженной:
load— событие load страницы (быстрее, но контент может ещё подгружаться)networkidle— отсутствие сетевой активности в течение заданного времени (надёжнее для динамического контента, но дольше)
Для агрегаторов с бесконечным скроллом и отложенной подгрузкой часто нужен js_wait_for — селектор элемента, появление которого говорит о готовности нужного блока.
extract_schema для сложных вложенных структур
Если данные имеют сложную вложенную структуру или разметка часто меняется, используйте extract_schema — описание целевой JSON-схемы. Модель извлекает данные без привязки к конкретным селекторам:
{
"url": "https://example.com/shopping/results?q=monitor",
"use_js_render": true,
"solve_captcha": true,
"extract_schema": {
"products": {
"type": "array",
"items": {
"title": {"type": "string"},
"price": {"type": "number"},
"currency": {"type": "string"},
"rating": {"type": "number"},
"link": {"type": "string"}
}
}
}
}
Преимущества: устойчивость к изменениям разметки. Недостатки: выше стоимость и латентность запроса.
Масштабирование: асинхронный скрейпинг и batch-эндпоинты
При объёмах в тысячи URL последовательные запросы неэффективны.
Асинхронный подход
import asyncio
import httpx
async def scrape_many(urls: list[str], max_concurrent: int = 10) -> list[dict]:
sem = asyncio.Semaphore(max_concurrent)
async def fetch_one(client: httpx.AsyncClient, url: str):
async with sem:
payload = {
"url": url,
"use_antibot": True,
"use_js_render": True,
"solve_captcha": True,
"extract_rules": extract_rules
}
resp = await client.post(BASE_URL, json=payload, headers={"Authorization": f"Bearer {API_KEY}"})
resp.raise_for_status()
return {"url": url, "extract": resp.json().get("extract")}
async with httpx.AsyncClient(timeout=90.0) as client:
tasks = [fetch_one(client, url) for url in urls]
return await asyncio.gather(*tasks)
Ограничьте max_concurrent (10–20), чтобы не превышать лимиты API и не провоцировать блокировки.
Batch-эндпоинт
Многие API поддерживают batch-режим: отправка массива URL в одном запросе, получение job_id, опрос статуса или webhook при готовности, скачивание объединённого результата. Это снижает накладные расходы на соединения и упрощает оркестрацию.
Резюме
- Товарные агрегаторы защищены фингерпринтингом, TLS-проверками и CAPTCHA — стандартный скрейпинг не работает
- API для скрейпинга с антибот-режимом: TLS-профили, JS-рендеринг, решение CAPTCHA, резидентные прокси
extract_rules— быстрый старт; при нестабильной разметке —extract_schema- Учитывайте: хрупкость селекторов, стоимость
solve_captcha, обязательность резидентных прокси, выборnetworkidlevsload - Масштабируйте через асинхронные запросы с ограничением concurrency или batch-эндпоинт
InfraProxy Scraper API поддерживает обход антибот-защиты, TLS-профили, решение CAPTCHA и извлечение данных с товарных агрегаторов. Узнайте условия.
Нужны надёжные прокси для вашего проекта?
InfraProxy предоставляет серверные и резидентные прокси для российского бизнеса. Договор, постоплата, техподдержка.
Читайте также
Настройка прокси для мониторинга цен конкурентов
Пошаговое руководство по настройке прокси для мониторинга цен: ротация IP, geo-targeting, sticky-сессии, обход антибот-защит. Код на Python и bash.
РуководстваКак настроить прокси для RAG-пайплайна
Практическое руководство по настройке прокси для RAG-пайплайна: архитектура, код на Python, sticky-сессии, расписание обходов. InfraProxy, SOCKS5, 100 000+ IP.
РуководстваNo-code веб-скрейпинг: извлечение данных без программирования
Как настроить сбор данных в 2026 году без написания кода: API для скрейпинга, extract_rules, автоматизация через n8n и Make.com, батчевая обработка 100+ страниц.