Руководство по скрапингу · 2 мин чтения

Как избежать банов IP при скрапинге

Баны IP обычно происходят от поведения, а не от невезения — слишком много запросов, небрежные заголовки и отпечаток, который кричит «бот». Вот как скрапить в рамках правил и поддерживать поток запросов.

Почему сайты банят IP (и что исправить в первую очередь)

Большинство блокировок вызвано тем, как вы делаете запросы, а не тем, кто вы.

Три сигнала выполняют основную работу за большинством банов:

  • Частота и объём — слишком много запросов в секунду с одного IP или идеально ровный ритм, который не смог бы воспроизвести ни один человек.
  • Отпечаток — TLS/JA3, порядок фреймов HTTP/2 и порядок заголовков, не соответствующие браузеру, за который вы себя выдаёте.
  • Заголовки — отсутствующий или стандартный User-Agent, нет Accept-Language, устаревший или отсутствующий Referer.

Прежде чем оптимизировать что-либо из этого, прочитайте robots.txt и Условия использования целевого сайта. Скрапинг публичных данных часто допустим; но чрезмерная нагрузка на эндпоинт, игнорирование опубликованных лимитов частоты или сбор персональных данных могут нарушать ToS, а в некоторых юрисдикциях — и закон. Соблюдайте crawl-delay, кешируйте то, что загружаете, и не повторяйте запросы к сайту, пока он не упадёт.

Когда вы скрапите ответственно, ваш главный рычаг — это то, как назначаются IP:

ПодходЛучше всего дляКомпромисс
Ротация (новый IP на запрос/пакет)Публичные страницы с большим объёмом, поисковые обходыРаспределяет нагрузку, но ломает сессии, корзины и входы
Липкий / сессионный (тот же IP в течение некоторого времени)Потоки с авторизацией, многошаговая навигация, пагинацияВыглядит по-человечески, но концентрирует нагрузку на одном выходе

s4m использует прокси дата-центров — аутентифицированные SOCKS5 + HTTP, а не резидентные. Они быстрые и дешёвые за GB, но некоторые потребительские сайты легче помечают диапазоны дата-центров, поэтому сочетайте их с чистыми заголовками и честными лимитами частоты. Нужен один стабильный выход для входов? Добавьте выделенный IP. Предпочитаете полный туннель? См. /vpn/, взвесьте варианты на /compare/ или прочитайте больше руководств.

Рычаги, которые уберегают вас от банов

Сочетайте их — ни один отдельный трюк не победит хорошую антибот-систему.

Ограничение частоты и джиттер

Ограничивайте параллелизм, добавляйте случайные задержки между запросами и соблюдайте crawl-delay, а также любые 429 / Retry-After, которые отправляет сервер.

Ротируйте или оставайтесь на липком IP

Ротируйте IP для обходов без сохранения состояния с большим объёмом; держите липкий выход для потоков с авторизацией и множеством шагов. Многие задачи сочетают оба подхода.

Чистый отпечаток

Отправляйте реалистичные заголовки браузера с согласованными Accept-Language и Referer вместо стандартных значений библиотек, которые помечают вас как бота.

Отступайте при сбоях

Используйте экспоненциальное отступление с джиттером на ответы 429 и 5xx и полностью останавливайтесь, когда сайт чётко сигнализирует об остановке.

Контроль использования на IP

Лимиты s4m настраиваются администратором для каждого IP, аккаунта и типа аккаунта, так что одна вышедшая из-под контроля задача не сожжёт общий выход или ваш бюджет.

Без логов, приоритет RAM

Прокси с аутентификацией через TLS, без логов по замыслу. Ваш список целей и трафик остаются вашими — оплата картой или криптой.

Устойчивая к банам схема скрапинга

Шесть шагов от первого запроса до надёжного краулера.

Проверьте robots.txt и ToS

Убедитесь, что эндпоинт разрешает автоматический доступ, обратите внимание на crawl-delay и не трогайте персональные или явно запрещённые данные.

Задайте бюджет запросов

Выберите лимит одновременных запросов и целевое число запросов в секунду значительно ниже того, что выглядело бы как злоупотребление, затем добавьте случайную задержку.

Отправляйте реалистичные заголовки

Задайте настоящие User-Agent, Accept и Accept-Language и сохраняйте их неизменными на протяжении всего сеанса.

Выберите ротационные или закреплённые (sticky)

Ротируйте выходы для страниц без состояния; используйте один закреплённый (sticky) выход на каждую авторизованную сессию, чтобы состояние не сломалось посреди процесса.

Добавьте экспоненциальный backoff

При 429 / 503 подождите Retry-After (или 2^n) плюс jitter и повторите несколько раз, затем корректно прекратите попытки.

Ограничьте использование на IP

Используйте лимиты s4m для каждого IP, чтобы один скрап не исчерпал выход, и следите за тарифицируемым использованием по мере масштабирования.

Python: вежливый краулер через прокси s4m

Закреплённая (sticky) сессия, реалистичные заголовки, backoff с jitter. Замените USER:PASS на свои учётные данные — никогда не прописывайте настоящий IP жёстко в коде.

python
import random
import time
import requests

# s4m datacenter proxies (authenticated). Placeholder host only.
USER, PASS = "USER", "PASS"
HTTP  = f"http://{USER}:{PASS}@proxy.s4m.online:3128"
SOCKS = f"socks5://{USER}:{PASS}@proxy.s4m.online:1080"  # pip install requests[socks]

PROXIES = {"http": HTTP, "https": HTTP}

HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
        "(KHTML, like Gecko) Chrome/125.0 Safari/537.36"
    ),
    "Accept": "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
}


def polite_get(url, session, max_retries=5):
    for attempt in range(max_retries):
        r = session.get(url, headers=HEADERS, proxies=PROXIES, timeout=20)
        if r.status_code == 429 or r.status_code >= 500:
            wait = float(r.headers.get("Retry-After", 2 ** attempt))
            time.sleep(wait + random.uniform(0, 1))  # backoff + jitter
            continue
        r.raise_for_status()
        return r
    raise RuntimeError(f"gave up after {max_retries} tries: {url}")


def crawl(urls):
    # One Session = one sticky exit for this run; open a new one to rotate.
    with requests.Session() as s:
        for url in urls:
            resp = polite_get(url, s)
            yield url, resp.text
            time.sleep(random.uniform(1.5, 4.0))  # rate-limit + jitter


if __name__ == "__main__":
    for url, html in crawl(["https://example.com/page/1"]):
        print(url, len(html))
FAQ

Ответы на вопросы

Достаточно ли датацентровых прокси, чтобы избежать банов?

Они скрывают ваш исходящий IP и распределяют нагрузку, что предотвращает многие блокировки по частоте запросов. Но прокси s4m — датацентровые, а не резидентные, и некоторые потребительские сайты охотнее помечают датацентровые диапазоны, поэтому сочетайте их с чистыми заголовками, разумными лимитами частоты и закреплёнными (sticky) сессиями там, где важно состояние.

Использовать ротационные или закреплённые (sticky) прокси?

Ротируйте выходы для публичных страниц без состояния с большим объёмом запросов, чтобы ни один отдельный IP не привлекал внимания. Сохраняйте закреплённую (sticky) сессию, когда вы авторизованы или проходите многошаговый процесс, поскольку смена IP посреди сессии выглядит подозрительно и может сломать корзины или авторизацию. Многие задачи сочетают оба подхода.

Законен ли веб-скрапинг?

Это зависит от вашей юрисдикции, данных и условий сайта. Публичные неперсональные данные часто допустимы, но ToS платформы могут запрещать автоматический доступ, даже когда он технически возможен, а персональные данные подпадают под дополнительные правила. Всегда проверяйте robots.txt и ToS и скрапьте осмотрительно.

Как не дать одной задаче сжечь всю мою квоту?

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

Могу ли я получить стабильный IP для скрапинга под авторизацией?

Да. Дополнительная опция выделенного персонального IP — это статический выход, который вы при желании можете отвязать от вашей личности и привязать либо к прокси, либо к VPN — полезно, когда цель привязывает сессию к одному постоянному адресу.

Скрапьте умнее, а не усерднее

Аутентифицированные SOCKS5- + HTTP-прокси дата-центра, измеряемые по факту, с лимитами использования на IP и опциональным выделенным IP. No-logs по замыслу — и честно, что это выходы дата-центра, а не резидентные.

Эту страницу нашли по запросу

Реальные поисковые фразы, на которые отвечает эта страница — по ссылкам откроются материалы, раскрывающие тему глубже.