Все статьиРуководстваПрокси-инфраструктура8 мин

CAPTCHA в сборе данных: диагностика и безопасная реакция

Как отличить CAPTCHA от 403, 429 и сбоя прокси, снизить нагрузку на источник и решить, когда остановить сбор или перейти на API.

Команда InfraProxy

5 февраля 2026 г.обновлено 18 августа 2026 г.

#CAPTCHA#HTTP 429#диагностика#Retry-After#этичный сбор данных

CAPTCHA означает, что источник не готов обслуживать запрос в текущем режиме. Не пытайтесь «продавить» проверку повторными запросами: сначала отделите ограничение сайта от ошибки прокси и уменьшите нагрузку.

CAPTCHA, 403 и 429 — разные события

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

Сигнал Что подтверждено Следующий шаг
CAPTCHA в HTML при 200 Ответ получен, но вместо данных пришла проверка Остановить повторы, проверить разрешённость источника и частоту
403 Forbidden Сервер отказал запросу Не считать прокси «мёртвым»; проверить правила доступа и тело ответа
429 Too Many Requests Превышен лимит запросов Учесть Retry-After, снизить параллельность и частоту
503 Service Unavailable Источник временно недоступен или перегружен Сделать ограниченный backoff; не ротировать IP в цикле
timeout / TLS error HTTP-ответ не получен Проверить маршрут, DNS, прокси и таймаут отдельно

По спецификации HTTP ответ 429 может содержать Retry-After: число секунд или дату следующей допустимой попытки. Это описано в документации MDN.

Как построить безопасную реакцию на ограничение

Базовый обработчик не должен бесконечно повторять запрос. Установите предел попыток, общий временной бюджет и отдельные правила для сетевой ошибки, 429 и CAPTCHA.

import random
import time
import requests

MAX_ATTEMPTS = 3

def fetch_public_page(url: str) -> requests.Response:
    for attempt in range(MAX_ATTEMPTS):
        response = requests.get(
            url,
            timeout=20,
            headers={"User-Agent": "CompanyDataBot/1.0 contact@example.com"},
        )

        if response.status_code == 429:
            retry_after = response.headers.get("Retry-After")
            delay = int(retry_after) if retry_after and retry_after.isdigit() else 2 ** attempt
            time.sleep(delay + random.uniform(0, 0.5))
            continue

        response.raise_for_status()
        return response

    raise RuntimeError("Лимит повторов исчерпан; сбор остановлен")

Код показывает контроль повторов, а не способ обойти ограничение. В production добавьте метрики по домену: долю 200, 403, 429, CAPTCHA-ответов, таймаутов и число повторов на успешную запись.

Когда прокси не решают проблему

Новый IP не меняет правила ресурса, лимит API, требование авторизации или запрет в robots.txt. Если источник отвечает 429, ротация адресов ради сохранения прежней нагрузки маскирует причину и может увеличить вред.

Сначала проверьте:

  1. Есть ли официальный API, выгрузка или лицензированный канал данных.
  2. Разрешён ли нужный путь в robots.txt и условиях использования.
  3. Не превышаете ли вы опубликованный лимит.
  4. Можно ли кэшировать результат и убрать повторные запросы.
  5. Нужна ли страница целиком или достаточно одного публичного endpoint.

Прокси полезны для управляемой сетевой инфраструктуры, географии и разделения рабочих потоков. Они не дают разрешения на доступ и не гарантируют ответ конкретного сайта.

Как проверить гипотезу на своей нагрузке

Сравните прямое соединение, один фиксированный DC и один ISP при одинаковых URL, паузе и параллельности. Считайте 200, 403, 429, CAPTCHA, timeout, p50/p95 и число повторов на успешную запись.

Такой тест показывает поведение выбранной выборки и источника в конкретный период. Он не гарантирует результат на других сайтах или при другой нагрузке.

Этичность и право важнее технической доступности

Собирайте только публичные данные. Уважайте Disallow и Crawl-delay, даже если конкретный клиент технически может их проигнорировать. Не обходите логин, paywall и ограничения доступа. Не собирайте персональные данные без законного основания. Используйте честный User-Agent, кэш, ограниченную параллельность и backoff на 429/503.

Если автоматический доступ запрещён условиями источника, технически успешный запрос не делает сбор допустимым. Для критичного бизнес-процесса согласуйте API, выгрузку или разрешение владельца данных.

Когда переходить на Scraper API

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

Посмотреть возможности Scraper API

Ключевые выводы

  • CAPTCHA, 403, 429 и timeout требуют разных действий.
  • 429 означает, что нужно замедлиться; учитывайте Retry-After.
  • Ротация IP не заменяет разрешение источника и соблюдение лимитов.
  • Тест сравнивает режимы только при одинаковой нагрузке и критериях успеха.
  • При запрете автоматического доступа выбирайте официальный API или согласованную выгрузку.

Краткий ответ: при CAPTCHA остановите повторы, проверьте правила источника и нагрузку, затем отделите HTTP-ограничение от сетевой ошибки прокси.

Нужна прокси-инфраструктура под вашу нагрузку?

Сравните Datacenter и ISP прокси, протоколы и условия теста перед договором.

Перейти к прокси