Прокси для парсинга: сколько IP нужно и как не получить бан

Парсинг без прокси быстро упирается в лимиты: сайт видит сотни запросов с одного адреса и начинает отдавать капчу, ошибку 429 или блокировку. Прокси распределяют нагрузку между многими IP, но и их нужно правильно рассчитать и настроить. Разберём, как прикинуть количество адресов, выбрать тип и написать устойчивый парсер.

Сколько IP нужно: простой расчёт

Точной формулы нет, потому что каждый сайт ограничивает частоту по-своему. Но прикинуть порядок можно так:

  1. Определите объём: сколько страниц нужно получить и за какое время. Например, 50 000 страниц за 10 часов — это около 5 000 страниц в час.
  2. Оцените безопасную частоту на один IP. Начните с консервативного темпа, например один запрос в 5–10 секунд с адреса, и посмотрите, появляются ли ошибки. Это стартовая точка для эксперимента, а не норма для всех сайтов.
  3. Разделите одно на другое. При одном запросе в 6 секунд один IP даёт около 600 запросов в час. Для 5 000 страниц в час нужно примерно 9 адресов, плюс запас 20–30% на сбои и замедления — итого 11–12.

Если сайт начинает ограничивать раньше, снижайте частоту на IP и добавляйте адреса. Если ошибок нет — можно осторожно ускоряться.

Ротация или статичные IP

Статичные адреса

Пул фиксированных серверных IPv4 или ISP, по которому парсер сам распределяет запросы. Подходит, когда: - сайт не слишком агрессивно защищён; - нужно держать сессию (логин, корзина, пагинация с cookies); - объём трафика большой — оплата за IP выгоднее оплаты за гигабайты.

Для такого сценария подойдут серверные IPv4 прокси: их удобно загрузить списком и перебирать в коде.

Ротируемые резидентские

Адрес меняется на каждый запрос или закрепляется на время. В резидентских прокси Vynx можно выбрать страну прямо в строке подключения, получать новый IP на каждый запрос или закреплять IP на 10 минут, 30 минут или 1 час, а порты из диапазона 10000–10999 дают параллельные выходные IP. Это удобно, когда: - сайт жёстко режет дата-центровые адреса; - нужно очень много разных IP при небольшом объёме данных; - важна проверка выдачи из разных стран.

Учитывайте, что трафик списывается из пакета, поэтому отключайте загрузку картинок, шрифтов и скриптов, если они не нужны.

IPv6

Если целевой сайт поддерживает IPv6, пакеты IPv6-адресов дают много IP за небольшие деньги. Перед покупкой обязательно проверьте поддержку — подробнее в статье про IPv6 прокси.

Таймауты и параллельность

  • Всегда задавайте таймаут. Без него один зависший запрос может остановить поток навсегда. Разумная отправная точка — 5–10 секунд на подключение и 20–30 секунд на чтение, дальше подстройте под сайт.
  • Ограничьте число потоков на IP. Десять одновременных запросов с одного адреса — это для сайта то же самое, что высокая частота. Лучше много IP с одним-двумя потоками на каждый.
  • Добавьте случайную паузу. Запросы ровно раз в секунду выглядят как робот. Небольшой разброс задержки делает нагрузку естественнее.
  • Переиспользуйте соединения. Сессия (requests.Session) экономит время на установке соединений.

Ответы 403, 429 и капча

Ответ Что обычно означает Что делать
429 Too Many Requests превышен лимит частоты снизить темп, учесть заголовок Retry-After, добавить IP
403 Forbidden доступ запрещён: IP, заголовки или поведение показались подозрительными проверить заголовки, сменить тип IP, снизить частоту
Капча сайт сомневается, что перед ним человек реже запросы, другой тип IP, меньше параллельности
407 ошибка авторизации на самом прокси проверить логин и пароль

Важно отличать ответы сайта от ошибок прокси. Код 407 приходит от прокси-сервера, а 403 и 429 — от сайта. Таймауты и connection refused чаще связаны с подключением к прокси — разбор таких случаев есть в чек-листе «Прокси не работает».

Не пытайтесь «продавить» блокировку повторными запросами без паузы: это только ухудшит репутацию адреса.

Этика и закон

  • Читайте robots.txt и пользовательское соглашение сайта, соблюдайте указанные ограничения.
  • Не создавайте нагрузку, которая мешает работе сайта.
  • Не собирайте персональные данные без законных оснований и учитывайте требования законодательства о защите данных в вашей стране.
  • Собирайте только то, что действительно нужно для задачи.

Примеры подключения

curl

# HTTP-прокси
curl -x http://user:pass@203.0.113.10:8000 \
     --connect-timeout 10 --max-time 30 \
     -A "Mozilla/5.0" https://example.com/

# SOCKS5 с DNS на стороне прокси
curl -x socks5h://user:pass@203.0.113.10:8000 https://example.com/

Python requests с перебором пула и повторами

import random
import time
import requests

PROXIES = [
    "http://user:pass@203.0.113.10:8000",
    "http://user:pass@203.0.113.11:8000",
    "http://user:pass@203.0.113.12:8000",
]

def fetch(url, attempts=3):
    for attempt in range(attempts):
        proxy = random.choice(PROXIES)
        try:
            r = requests.get(
                url,
                proxies={"http": proxy, "https": proxy},
                headers={"User-Agent": "Mozilla/5.0"},
                timeout=(10, 30),
            )
        except requests.RequestException:
            time.sleep(2 ** attempt)
            continue
        if r.status_code == 429:
            retry_after = r.headers.get("Retry-After", "")
            time.sleep(int(retry_after) if retry_after.isdigit() else 2 ** attempt * 5)
            continue
        return r
    return None

resp = fetch("https://example.com/")
print(resp.status_code if resp else "failed")

Список прокси удобно скачать в личном кабинете в формате protocol://login:password@ip:port — тогда строки можно вставить в код без преобразования. Если нужен SOCKS5, установите requests[socks] и используйте схему socks5h://; разница протоколов разобрана в статье HTTP или SOCKS5.

Коротко

  • Количество IP = требуемая скорость / безопасная частота на один IP, плюс запас.
  • Статичные IPv4 выгодны для больших объёмов и сессий, резидентские с ротацией — для защищённых сайтов.
  • Всегда задавайте таймауты и ограничивайте число потоков на один адрес.
  • На 429 отвечайте паузой, на 403 и капчу — снижением темпа и сменой типа IP.
  • Соблюдайте robots.txt, правила сайтов и законы о данных.

Для большинства парсинговых задач хорошая отправная точка — пул серверных IPv4 прокси: быстрый канал, фиксированная цена за адрес и список в удобном для кода формате.