Scarnox · Blog

Как парсить сайты за Cloudflare: руководство (2026)

Cloudflare стоит перед значительной частью публичного веба, поэтому парсер, который работает на одном сайте, часто упирается в стену на следующем. Обычно это видно как HTTP 403 или 503, страница-промежуточная «Just a moment...» или виджет Turnstile с чекбоксом на странице. Это руководство объясняет, что проверяет Cloudflare, какие решения работают, не трогая ничего, к чему не стоит прикасаться, и где здесь место решению капчи. Коротко: убедитесь, что вам можно парсить сайт, замедлитесь, отправляйте запросы, похожие на обычного клиента, используйте настоящий браузер, если странице нужен JavaScript, и только потом занимайтесь капчей. Turnstile — капча, которую Cloudflare использует чаще всего. Поддержка Turnstile в Scarnox скоро появится. Живой тип капчи сегодня — PopularCaptcha.

Что проверяет Cloudflare

Cloudflare оценивает каждый запрос по нескольким сигналам:

Высокая оценка проходит незаметно. Средняя оценка получает интерактивную проверку. Низкая оценка получает блокировку. Большая часть работы — в том, чтобы поднять вашу оценку, вести себя как добросовестный клиент, а не бороться с проверкой.

Шаг 1: убедитесь, что вам можно парсить сайт

Прежде чем делать что-либо техническое, прочитайте robots.txt сайта и его условия использования. Блокировка часто означает, что владелец что-то вам говорит. Парсинг открытых страниц медленно и с понятной целью — одно. Прорыв сквозь блокировку ради данных, которые владелец ограничил, — другое, и Scarnox такое использование не поддерживает. Юридический обзор отвечает на общие вопросы.

Шаг 2: сделайте простой запрос правильно

Многие парсеры, которые выглядят «заблокированными», просто отправляют плохие запросы. Сначала исправьте это:

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: определите, с какой проверкой вы столкнулись

Ответ многое говорит:

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

Шаг 4: используйте настоящий браузер, когда странице он нужен

Если страница показывает содержимое только после выполнения JavaScript, простой HTTP-клиент его никогда не увидит. Запустите полноценный браузер через Playwright или Selenium. Headless-браузер можно обнаружить, поэтому прочитайте обнаружение headless-браузера, прежде чем на него полагаться, и настройте его так, чтобы он соответствовал окружению реального посетителя. Руководство по JavaScript-сайтам показывает полный пример.

Шаг 5: проверьте репутацию IP

Адреса облачных дата-центров — самая частая причина, по которой чистый запрос получает низкую оценку. Резидентские адреса обычно получают лучшую оценку, за большую цену в скорости и деньгах. Компромисс разобран в резидентских и датацентровых прокси.

Ротация тоже имеет свои ловушки. Смена адреса на каждом запросе выглядит неестественно, потому что настоящий посетитель сохраняет один адрес на весь визит. Закрепленные сессии, где один адрес сохраняется для набора связанных запросов, часто работают лучше быстрой ротации. Ротация прокси для парсинга разбирает детали.

Шаг 6: где здесь место решению капчи

Иногда виджет действительно появляется — на форме, которую вы тестируете, или на странице, автоматизация которой вам разрешена. Тогда токен Turnstile становится обязательным шагом в этом потоке. Поддержка Turnstile в Scarnox скоро появится, поэтому не создавайте production-код под нее уже сейчас. Живой тип капчи сегодня — PopularCaptcha, который использует другой виджет.

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

Если хотите быть готовы, когда появится поддержка Turnstile, можете начать пробный период прямо сейчас. Начните с бесплатного пробного баланса, карта не нужна: создайте аккаунт. Актуальные тарифы живого типа капчи — на странице цен.

Ответственный парсинг

Следующие шаги