Веб-скрапинг — это не просто 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.
Ссылки
Ссылки
- Документация: docs.zenrows.com
- Universal Scraper API: zenrows.com/products/universal-scraper
- Python SDK: github.com/zenrows/zenrows-python-sdk
- Node.js SDK: github.com/zenrows/zenrows-node-sdk
- Тарифы: zenrows.com/pricing