Як скрапити сайт, захищений 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 скоро з'явиться, тож не створюйте продакшен-код на неї зараз. Тип капчі, що працює сьогодні, - PopularCaptcha, який використовує інший віджет.
Загальний робочий процес для будь-якої капчі на основі токена однаковий. Ви зчитуєте sitekey зі сторінки, запитуєте токен і розміщуєте токен у полі форми, якого очікує сайт. Токени короткоживучі, тож відправляйте їх одразу. Посібник по PopularCaptcha для Python показує цей робочий процес від початку до кінця, а типи капчі пояснено порівнює віджети, які ви зустрінете.
Якщо хочете бути готові, коли підтримка Turnstile стане доступною, можете почати безкоштовний пробний період уже зараз. Почніть з безкоштовного пробного кредиту, картка не потрібна: створіть обліковий запис. Актуальні тарифи для живого типу капчі дивіться на сторінці тарифів.
Скрапінг відповідально
- Читайте
robots.txtі дотримуйтеся умов сайту, який скрапите. - Обмежуйте частоту запитів свого краулера і запускайте його в непікові години, де це можливо.
- Кешуйте відповіді, щоб ніколи не завантажувати одну сторінку двічі без потреби.
- Уникайте збору персональних даних без законної підстави.
- Якщо доступ до сайту обмежено, зупиніться. Не намагайтеся обійти обмеження.