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 скоро з'явиться, тож не створюйте продакшен-код на неї зараз. Тип капчі, що працює сьогодні, - PopularCaptcha, який використовує інший віджет.

Загальний робочий процес для будь-якої капчі на основі токена однаковий. Ви зчитуєте sitekey зі сторінки, запитуєте токен і розміщуєте токен у полі форми, якого очікує сайт. Токени короткоживучі, тож відправляйте їх одразу. Посібник по PopularCaptcha для Python показує цей робочий процес від початку до кінця, а типи капчі пояснено порівнює віджети, які ви зустрінете.

Якщо хочете бути готові, коли підтримка Turnstile стане доступною, можете почати безкоштовний пробний період уже зараз. Почніть з безкоштовного пробного кредиту, картка не потрібна: створіть обліковий запис. Актуальні тарифи для живого типу капчі дивіться на сторінці тарифів.

Скрапінг відповідально

Що далі