Как парсить сайты за Cloudflare: руководство (2026)
Cloudflare стоит перед значительной частью публичного веба, поэтому парсер, который работает на одном сайте, часто упирается в стену на следующем. Обычно это видно как HTTP 403 или 503, страница-промежуточная «Just a moment...» или виджет Turnstile с чекбоксом на странице. Это руководство объясняет, что проверяет Cloudflare, какие решения работают, не трогая ничего, к чему не стоит прикасаться, и где здесь место решению капчи. Коротко: убедитесь, что вам можно парсить сайт, замедлитесь, отправляйте запросы, похожие на обычного клиента, используйте настоящий браузер, если странице нужен JavaScript, и только потом занимайтесь капчей. Turnstile — капча, которую Cloudflare использует чаще всего. Поддержка Turnstile в Scarnox скоро появится. Живой тип капчи сегодня — PopularCaptcha.
Что проверяет Cloudflare
Cloudflare оценивает каждый запрос по нескольким сигналам:
- Репутация IP. Адреса из облачных дата-центров начинают с более низкой оценки, чем адреса из домашних сетей.
- Частота и паттерн запросов. Сотни запросов в секунду с одного адреса выглядят как бот, какими бы ни были заголовки.
- Заголовки и TLS-отпечаток. Голая HTTP-библиотека часто отправляет заголовки, порядок заголовков и TLS-рукопожатие, которые не отправляет ни один основной браузер.
- Выполнение JavaScript. Страница проверки запускает скрипты и проверяет, что есть настоящее окружение браузера.
- Cookie. После прохождения проверки Cloudflare выдает cookie допуска, привязанный к этой сессии.
Высокая оценка проходит незаметно. Средняя оценка получает интерактивную проверку. Низкая оценка получает блокировку. Большая часть работы — в том, чтобы поднять вашу оценку, вести себя как добросовестный клиент, а не бороться с проверкой.
Шаг 1: убедитесь, что вам можно парсить сайт
Прежде чем делать что-либо техническое, прочитайте robots.txt сайта и его условия использования. Блокировка часто означает, что владелец что-то вам говорит. Парсинг открытых страниц медленно и с понятной целью — одно. Прорыв сквозь блокировку ради данных, которые владелец ограничил, — другое, и Scarnox такое использование не поддерживает. Юридический обзор отвечает на общие вопросы.
Шаг 2: сделайте простой запрос правильно
Многие парсеры, которые выглядят «заблокированными», просто отправляют плохие запросы. Сначала исправьте это:
- Отправляйте актуальный User-Agent и заголовки, которые отправил бы браузер, например
AcceptиAccept-Language. - Используйте один объект сессии, чтобы cookie сохранялись между запросами, как в браузере.
- Добавляйте задержку между запросами с небольшим случайным разбросом.
- Отступайте при ответах
429и503, а не повторяйте в плотном цикле.
import random
import time
import requests
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
})
def polite_get(url: str, attempts: int = 4) -> requests.Response:
r = None
for attempt in range(attempts):
r = session.get(url, timeout=30)
if r.status_code not in (429, 503):
return r
# Экспоненциальная пауза со случайным разбросом: около 1, 2, 4 секунд плюс шум.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Если это вас пропустило, вы готовы. Оставьте задержку на месте.
Шаг 3: определите, с какой проверкой вы столкнулись
Ответ многое говорит:
- Страница «Just a moment...». Это JavaScript-проверка. Настоящий браузер обычно проходит ее сам через несколько секунд. Затем cookie допуска можно переиспользовать для последующих запросов в той же сессии.
- Виджет Turnstile на форме или странице. Это капча. Ей нужен токен от виджета, прежде чем форма примет отправку.
- Страница блокировки с кодом ошибки. Адрес или запрос отклонены напрямую. Изменение темпа и исправление запросов обычно помогает больше всего. Решение капчи не превращает жесткую блокировку в данные.
Проверка того, что именно вы видите, экономит много напрасных усилий.
Шаг 4: используйте настоящий браузер, когда странице он нужен
Если страница показывает содержимое только после выполнения JavaScript, простой HTTP-клиент его никогда не увидит. Запустите полноценный браузер через Playwright или Selenium. Headless-браузер можно обнаружить, поэтому прочитайте обнаружение headless-браузера, прежде чем на него полагаться, и настройте его так, чтобы он соответствовал окружению реального посетителя. Руководство по JavaScript-сайтам показывает полный пример.
Шаг 5: проверьте репутацию IP
Адреса облачных дата-центров — самая частая причина, по которой чистый запрос получает низкую оценку. Резидентские адреса обычно получают лучшую оценку, за большую цену в скорости и деньгах. Компромисс разобран в резидентских и датацентровых прокси.
Ротация тоже имеет свои ловушки. Смена адреса на каждом запросе выглядит неестественно, потому что настоящий посетитель сохраняет один адрес на весь визит. Закрепленные сессии, где один адрес сохраняется для набора связанных запросов, часто работают лучше быстрой ротации. Ротация прокси для парсинга разбирает детали.
Шаг 6: где здесь место решению капчи
Иногда виджет действительно появляется — на форме, которую вы тестируете, или на странице, автоматизация которой вам разрешена. Тогда токен Turnstile становится обязательным шагом в этом потоке. Поддержка Turnstile в Scarnox скоро появится, поэтому не создавайте production-код под нее уже сейчас. Живой тип капчи сегодня — PopularCaptcha, который использует другой виджет.
Общий порядок работы с любой капчей на основе токена такой же. Вы читаете sitekey со страницы, запрашиваете токен и помещаете его в поле формы, которое ожидает сайт. Токены живут недолго, поэтому отправляйте их сразу. Руководство по PopularCaptcha на Python показывает весь поток от начала до конца, а типы капчи сравнивает виджеты, с которыми вы встретитесь.
Если хотите быть готовы, когда появится поддержка Turnstile, можете начать пробный период прямо сейчас. Начните с бесплатного пробного баланса, карта не нужна: создайте аккаунт. Актуальные тарифы живого типа капчи — на странице цен.
Ответственный парсинг
- Читайте
robots.txtи соблюдайте условия сайта, который парсите. - Ограничивайте частоту вашего краулера и, где возможно, запускайте его в непиковые часы.
- Кешируйте ответы, чтобы никогда без причины не загружать одну и ту же страницу дважды.
- Не собирайте персональные данные без законного основания.
- Если сайт ограничил доступ, остановитесь. Не пытайтесь обойти ограничение.