Сбор больших объёмов веб-данных в реальном времени необходим для обучающих наборов LLM, сравнения цен в электронной коммерции, мониторинга общественного мнения и отраслевых баз знаний RAG. Однако сегодня более 70% ценных сайтов защищены корпоративными WAF, такими как Cloudflare, Akamai, DataDome или Kasada. Одного фиксированного IP и замены User-Agent недостаточно: важны также протокольный отпечаток клиента и характер запросов.

1. Эволюция современных систем защиты от ботов

По мере развития веб-скрейпинга технологии защиты от ботов прошли четыре отчётливых этапа:

  • Первое поколение — статические признаки: Проверка HTTP-заголовков User-Agent, Referer, Host и ограничение частоты запросов с одного IP (Rate Limiting).
  • Второе поколение — проверки JavaScript: Внедрение обфусцированного JavaScript, вычисление доказательства работы (PoW) и поиск признаков headless-браузера (window.navigator.webdriver).
  • Третье поколение — сетевые и протокольные отпечатки: Сопоставление наборов шифров в сообщении TLS Client Hello (JA3/JA4), а также характеристик кадров SETTINGS и WINDOW_UPDATE при установлении соединений HTTP/2.
  • Четвёртое поколение — анализ поведения с помощью ИИ и мультимодальные проверки: Совместный анализ данных гироскопа и движений мыши, энтропии интервалов между нажатиями клавиш, проверок Turnstile и динамическая блокировка на основе общей карты репутации IP.

2. Отпечатки TLS: JA3/JA4 и кадры HTTP/2

Разработчики часто спрашивают: «Почему Cloudflare мгновенно блокирует мой код на Python Requests даже после подключения прокси?» Причина — отпечаток TLS Client Hello.

При TLS-рукопожатии стандартный стек Python urllib3 / OpenSSL передаёт списки поддерживаемых наборов шифров, расширений и групп эллиптических кривых, которые заметно отличаются от данных настоящего браузера Google Chrome:

Уязвимое место: отпечаток JA3 библиотеки Python Requests

Распространённые библиотеки Python имеют очень устойчивые JA3-отпечатки, которые практически все WAF заносят в списки явных признаков сканеров. Даже пул из 100 000 статических резидентных IP с чистой репутацией не помешает WAF вернуть 403 Forbidden или запустить пятисекундную проверку до отправки данных HTTP-запроса.

Для работы с TLS-отпечатками современным системам сбора данных нужны сетевые библиотеки с поддержкой TLS Spoofing, например curl_cffi и tls-client. Они позволяют воспроизводить характеристики рукопожатия Chrome или Firefox со 100% совпадением.

3. Проверки Cloudflare и Turnstile

Cloudflare Turnstile постепенно заменяет традиционную reCAPTCHA. Сервис незаметно выполняет сложные вычисления на клиенте и оценивает репутацию IP-адреса, с которого устанавливается соединение:

  1. Упрощённая проверка для чистых IP: Turnstile оценивает несколько сигналов. Сам по себе резидентский IP не гарантирует успешную проверку; тестируйте целевой сайт и обрабатывайте проверки с учётом его требований.
  2. Дополнительные проверки для IP дата-центров: Для запросов из известных диапазонов дата-центров WAF принудительно показывает один или несколько интерактивных флажков даже при реалистичном отпечатке браузера, что существенно замедляет автоматизированный сбор.

4. Архитектура высокопроизводительного гибридного пула прокси

Для корпоративного сбора данных в большом масштабе зрелая архитектура использует двухуровневый прокси-шлюз с разделением потоков, а не направляет все запросы через дорогие резидентные IP:

┌─ Кластер клиентов (Scrapy / Playwright / Go Colly)
│ └─► Отправка запроса на сбор данных
├─ Уровень 1: интеллектуальный маршрутизатор (Smart Router)
│ ├─ Оценка уровня защиты целевого сайта
│ ├─ Статические ресурсы с низким риском (CSS, JS, изображения, документы) ──► Статические серверные прокси IP123 (проверьте доступную скорость)
│ └─ Ключевые данные с усиленной защитой (карточки товаров, API цен, результаты поиска) ──► Статические резидентские прокси IP123 (проверьте доступ к целевому сайту)
└─ Динамический предохранитель и автоматические повторные попытки
При ответе 429/403 изучите ответ и соблюдайте указания по повторным запросам. Сохраняйте статический IP для каждой сессии; другой IP не гарантирует принятие запроса.

5. Автоматизация на Python и сохранение сессий

В следующем учебном примере используется curl_cffi и условная точка подключения прокси. Замените её и целевой URL фактическими значениями; пример не гарантирует доступ к защищённой странице.

import time
from curl_cffi import requests

# 配置 IP123 专线代理 IP 网关
PROXY_URL = "http://customer_user:pass_token@gateway.ip123.net:8888"

proxies = {
    "http": PROXY_URL,
    "https": PROXY_URL,
}

def fetch_protected_site(target_url: str):
    # impersonate="chrome120" 将自动模拟 Chrome 的 TLS JA3/JA4 与 HTTP/2 帧特征
    session = requests.Session()
    
    headers = {
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
        "Sec-Ch-Ua-Mobile": "?0",
        "Sec-Ch-Ua-Platform": '"Windows"',
    }
    
    try:
        response = session.get(
            target_url,
            headers=headers,
            proxies=proxies,
            impersonate="chrome120",
            timeout=15
        )
        print(f"[+] Status: {response.status_code}, Length: {len(response.text)}")
        return response.text
    except Exception as e:
        print(f"[-] Request failed: {e}")
        return None

if __name__ == "__main__":
    url = "https://example-cloudflare-protected-site.com"
    html = fetch_protected_site(url)

Современный кластер сбора данных сочетает качественный клиент эмуляции TLS и нативные резидентные прокси с чистой репутацией. Узлы IP123 поддерживают множество параллельных коротких и постоянных соединений и обеспечивают высокую доступность при масштабном сборе данных.