Веб-скрапинг — это не просто HTTP-запрос. Современные сайты защищены антибот-системами, контент грузится через JavaScript, а IP-адреса блокируются после первой сотни запросов. Настроить прокси-ротацию, поддержку headless-браузеров и обход Cloudflare своими силами — это недели работы и постоянная поддержка.

ZenRows решает эту задачу как облачный сервис. Один API-вызов заменяет инфраструктуру из прокси-фермы, браузерной фермы и системы мониторинга антибот-правил. Вы передаёте URL — получаете данные в HTML, Markdown или JSON.

Ключевая разница с self-hosted скраперами: не нужно настраивать прокси, ротировать IP и отслеживать обновления правил Cloudflare. Сервис адаптируется к защитам автоматически, заявленный uptime residential-прокси — 99,9%.

Что это

ZenRows — облачный API для извлечения данных с публичных веб-страниц. Сервис берёт на себя всю инфраструктуру скрапинга: обход антибот-систем, JavaScript-рендеринг, ротацию residential-прокси, управление сессиями. Пользователь передаёт URL и параметры запроса, в ответ получает контент страницы в одном из форматов: HTML, Markdown, JSON, plaintext или PDF.

Пул прокси-серверов ZenRows включает более 55 миллионов residential IP-адресов из 190+ стран. Это означает, что каждый запрос может приходить с разного реального IP-адреса, принадлежащего интернет-провайдеру, а не дата-центру — такие адреса не вызывают подозрений у антибот-систем.

API работает по REST-принципу: GET-запрос к https://api.zenrows.com/v1/ с параметрами url и apikey. Дополнительные параметры управляют рендерингом, прокси, форматом ответа и сессиями. Для разработчиков доступны SDK для Python и Node.js, а также REST API для любого языка программирования.

Зачем нужно

Если вы когда-нибудь пытались собрать данные с сайта, защищённого Cloudflare, вы знаете, что обычный requests.get() возвращает пустую страницу или капчу. ZenRows устраняет эту проблему: антибот-защита обходится на стороне сервиса, и вы получаете чистый контент.

Практические сценарии:

ЗадачаЧто даёт ZenRows
ИИ и RAGСвежие веб-данные в Markdown или JSON для языковых моделей — без ручного парсинга HTML
Мониторинг ценОтслеживание конкурентов в e-commerce через residential-прокси
ЛидогенерацияСбор контактов и обогащение CRM
Анализ отзывовАгрегация данных с десятков платформ
Маркетинговая разведкаМониторинг запусков продуктов и трендов

RAG (Retrieval-Augmented Generation) — архитектура, где языковая модель дополняет ответы данными из внешних источников. ZenRows позволяет подключить к такой системе любой сайт как источник актуальной информации: данные возвращаются в Markdown, готовые для векторизации и подачи в LLM.

Как устроено

API-параметры

Основной эндпоинт — https://api.zenrows.com/v1/. Обязательные параметры: apikey и url. Остальные параметры включаются по необходимости.

ПараметрТипПо умолчаниюЧто делает
apikeystringAPI-ключ для аутентификации
urlstringURL страницы для скрапинга
js_renderbooleanfalseJavaScript-рендеринг через headless-браузер
js_instructionsstringКастомный JavaScript: клики, скролл, заполнение форм
premium_proxybooleanfalseResidential IP для обхода антибот-систем
proxy_countrystringСтрана IP-адреса (требует premium_proxy)
session_idintegerФиксация IP на несколько запросов (до 10 минут)
response_typestringФормат ответа: markdown, plaintext, pdf
css_extractorstring (JSON)Извлечение элементов через CSS-селекторы
autoparsebooleanfalseАвтоматическое извлечение структурированных данных
waitinteger0Задержка в миллисекундах после загрузки
wait_forstringОжидание появления CSS-селектора в DOM
screenshotbooleanfalseСкриншот страницы
json_responsestringfalseПерехват XHR/Fetch-запросов в JSON
custom_headersbooleanfalseПередача кастомных HTTP-заголовков
block_resourcesstringБлокировка ресурсов (изображения, шрифты) для ускорения
modestringAdaptive Stealth Mode: auto — автоматический выбор конфигурации

Антибот-обход

ZenRows работает с защитой Cloudflare, DataDome, Akamai и другими системами без ручной настройки. Механика: residential-прокси подменяют IP, headless-браузер рендерит JavaScript, система автоматически подбирает конфигурацию для каждого сайта. Adaptive Stealth Mode (mode=auto) начинает с самого дешёвого варианта и эскалирует до JS-рендеринга или premium-прокси только при необходимости.

JavaScript-рендеринг

Сайты на React, Vue, Angular и другие SPA требуют выполнения JavaScript для загрузки контента. Параметр js_render=true включает headless-браузер, который дожидается загрузки, прокручивает страницу и кликает по кнопкам. Дополнительные параметры wait и wait_for управляют таймингами.

Сессии

Параметр session_id фиксирует IP-адрес на несколько запросов — до 10 минут. Это нужно для многошаговых сценариев: авторизация, корзина, пагинация, где сервер ожидает один и тот же IP.

Геолокация

Residential-прокси из 190+ стран через параметр proxy_country. Используется для доступа к региональному контенту: локальные цены, региональные версии сайтов, гео-ограниченный контент.

Интеграции

ZenRows интегрируется с популярными no-code и AI-инструментами:

КатегорияИнструменты
Автоматизацияn8n, Make, Zapier, Pipedream
ИИ-фреймворкиLangChain, LlamaIndex, Flowise
Обогащение данныхClay
СкрапингScrapy

Для разработчиков есть SDK для Python и Node.js, а также REST API для любого языка. На GitHub доступны официальные репозитории zenrows-python-sdk и zenrows-node-sdk.

Когда использовать

ZenRows подходит, когда:

  • Сайт защищён антибот-системой и обычные HTTP-клиенты не работают
  • Контент загружается через JavaScript и нужен рендеринг
  • Требуются residential-прокси для гео-таргетинга
  • Нужен вывод данных в Markdown или JSON для подачи в LLM
  • Объём запросов от тысячи до миллионов — инфраструктуру масштабирует сервис

Не подходит, когда:

  • Нужен полный контроль над браузером (для этого есть Scraping Browser — отдельный продукт ZenRows)
  • Достаточно простого HTTP-запроса без защиты (Cloudflare отсутствует)
  • Бюджет не позволяет платить за каждый запрос

Пример

Базовый запрос к API на Python:

import requests
import os

params = {
    'url': 'https://www.example.com/',
    'apikey': os.environ.get('ZENROWS_API_KEY'),
    'js_render': 'true',
    'premium_proxy': 'true',
}

response = requests.get('https://api.zenrows.com/v1/', params=params)
print(response.text)

Параметр js_render включает headless-браузер, premium_proxy — residential-прокси. Для простых статичных страниц оба параметра можно не указывать — запрос будет дешевле.

API-ключ храните в переменных окружения, никогда не коммитьте в репозиторий.

Модель оплаты

ZenRows берёт деньги только за успешные запросы. Если запрос не вернул данные — вы не платите. HTTP 404 и 410 считаются успешными — запрос выполнен корректно, данные возвращены.

Стоимость зависит от сложности запроса. Базовый запрос дешевле, с включением JavaScript-рендеринга или premium-прокси цена растёт:

ФункцияМножитель к базовой стоимости
Базовый запросx1
JavaScript-рендерингx5
Premium-проксиx10
JS + проксиx25

Adaptive Stealth Mode (mode=auto) использует те же множители — вы платите только за конфигурацию, которая сработала. Если внутренние попытки потребовали эскалации, оплачивается только успешный запрос.

Ограничения

Ограничения

Что учитывать

Перед внедрением ZenRows в проект нужно понимать границы сервиса.

Лимиты concurrency — От 5 параллельных запросов на тарифе Developer до 250 на Business 3K.

Превышение даёт HTTP 429. Отмена запроса на клиенте не освобождает слот мгновенно — сервер дорабатывает запрос до конца.

Лимит размера ответа — От 5 МБ на Developer до 50 МБ на Enterprise.

Превышение даёт HTTP 413 без частичных данных.

Время сессии — Фиксированный IP держится до 10 минут.

Для более длинных процессов нужно менять session_id.

Стоимость масштабов — Premium-прокси дороже базового запроса в 10 раз, комбинация JS + прокси — в 25 раз.

На больших объёмах разница существенна.

Только публичные данные

— Сервис не обходит paywall, авторизацию через социальные сети и CAPTCHA, требующую ручного решения без интеграции с 2Captcha.

Антипаттерны

Антипаттерны

Чего не делать

Типичные ошибки при работе с ZenRows.

Включать js_render и premium_proxy для всех запросов — Это стоит в 25 раз дороже базового.

Используйте Adaptive Stealth Mode, чтобы сервис сам выбирал минимальную конфигурацию.

Игнорировать css_extractor для больших страниц — Если нужны только цены со страницы, нет смысла скачивать весь HTML.

CSS-селекторы сокращают размер ответа и стоимость.

Хардкодить API-ключ в коде — Только переменные окружения.

Утёкший ключ означает оплаченные запросы за ваш счёт.

Ожидать обход любой защиты

— Некоторые сайты используют продвинутые CAPTCHA (reCAPTCHA, Cloudflare Turnstile), которые требуют интеграции с 2Captcha или аналогами.

Отправлять запросы без обработки 429

— При превышении concurrency-лимита ZenRows возвращает 429, нужно ретраить с экспоненциальной задержкой.

Чеклист

Чеклист

Проверка перед запуском

Перед первым запросом к ZenRows API.

API-ключ получен и сохранён в переменной окружения

— Не в коде, не в .env в репозитории.

Параметры подобраны под задачу — js_render только для JS-сайтов, premium_proxy только для защищённых.

Базовый запрос стоит дешевле всего.

Concurrency-лимит тарифа проверен

— Превышение даст 429, нужно настраивать очередь или ретраи.

Лимит размера ответа учтён

— Если страница большая, использовать css_extractor или response_type=markdown.

Обработка ошибок добавлена — 429 (concurrency), 413 (размер), 401/402 (авторизация/баланс).

Без ретраев стабильность пострадает.

Adaptive Stealth Mode протестирован

— mode=auto может сэкономить на запросах, где не нужен постоянный premium_proxy.

Ссылки

Ссылки