ZenRows API: извлечение данных с защищённых сайтов без своей инфраструктуры | Виталий Воробьев
VorobeoffAIВиталий Воробьев

ZenRows API: извлечение данных с защищённых сайтов без своей инфраструктуры

Облачный API для парсинга данных с сайтов под защитой Cloudflare, DataDome и Akamai. Residential-прокси из 190+ стран, JavaScript-рендеринг, вывод в Markdown и JSON для RAG и LLM.

Веб-скрапинг — это не просто 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. Остальные параметры включаются по необходимости.

ПараметрТипПо умолчаниюЧто делает
apikey
string
—
API-ключ для аутентификации
url
string
—
URL страницы для скрапинга
js_render
boolean
false
JavaScript-рендеринг через headless-браузер
js_instructions
string
—
Кастомный JavaScript: клики, скролл, заполнение форм
premium_proxy
boolean
false
Residential IP для обхода антибот-систем
proxy_country
string
—
Страна IP-адреса (требует premium_proxy)
session_id
integer
—
Фиксация IP на несколько запросов (до 10 минут)
response_type
string
—
Формат ответа: markdown, plaintext, pdf
css_extractor
string (JSON)
—
Извлечение элементов через CSS-селекторы
autoparse
boolean
false
Автоматическое извлечение структурированных данных
wait
integer
0
Задержка в миллисекундах после загрузки
wait_for
string
—
Ожидание появления CSS-селектора в DOM
screenshot
boolean
false
Скриншот страницы
json_response
string
false
Перехват XHR/Fetch-запросов в JSON
custom_headers
boolean
false
Передача кастомных HTTP-заголовков
block_resources
string
—
Блокировка ресурсов (изображения, шрифты) для ускорения
mode
string
—
Adaptive 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.

Ссылки

Продолжить тему

Материалы, которые связаны с этим разбором

Подборка учитывает тему, редкие теги и смысл заголовка с описанием материала.

Открыть материалы по теме ↗

Обсудить задачу

Есть задача, которую хотите усилить с помощью ИИ?

Опишите процесс, что уже пробовали и какой результат хотите получить. Я помогу понять, где ИИ и автоматизация действительно дадут эффект, и предложу понятный следующий шаг.

Для первого сообщения достаточно пары абзацев — готовое техническое задание не требуется.