Вход Регистрация

Прокси

Проблемы с ротацией: как обеспечить смену IP в нужный момент

IP не меняется вовремя? Разбираем причины: правила, провайдер, сессии. Настройка ротации по времени, запросу и сессии, защита от блокировок и падений связи.

Команда Froxy 5 ноя 2025 7 мин
Проблемы с ротацией: как обеспечить смену IP в нужный момент

Многие системы безопасности сайтов, в том числе файрволы веб-приложений (WAF), блокируют запросы неугодных им пользователей на основе IP-адресов. Более эффективных методов защиты пока не нашли и скорее всего никогда не найдут. Только если не будет внедрена какая-нибудь тотальная система физической верификации пользователей.

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

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

Почему ротация IP-адресов критически важна для веб-скрапинга

Вы же не поверите, если мы скажем, что ротируемый IP-прокси — это обязательное условие работы парсера? Поэтому давайте всё разложим по полочкам.

Какие выгоды даёт ротация IP / прокси:

  • Обход блокировок и банов. Мы ещё в самом начале сказали, что большинство систем защиты работает на основе IP-адресов. Заменяя адрес на новый, вы «обнуляетесь» для системы защиты — она воспринимает вас как абсолютно нового клиента. Тут стоит упомянуть, что сложные WAF-комплексы могут идентифицировать пользователей и по другим атрибутам, их совокупность называют цифровыми отпечатками, но отпечатки легко подделать и уникализировать без особых технических решений. А вот IP-адрес заменить на новый без прокси крайне сложно. Профессиональные прокси-сервисы обеспечивают пул адресов на несколько миллионов IP, соответственно, прокси можно ротировать хоть при каждом новом запросе. Система защиты не может добавить в чёрный список весь интернет. Кроме того, многие сложные комплексы, в том числе Cloudflare или Akamai, учитывают историю обращений и поведенческие факторы. А какая может быть история, если вы обращаетесь к сайту каждый раз с нового IP?
  • Распараллеливание запросов. Процесс сбора данных с прокси может ускориться кратно. Простой расчёт и здравая логика это подтверждают. Если с одним IP-адресом парсер может работать только в один поток и последовательно обходить страницы, то буквально с двумя прокси процесс можно ускорить в 2 раза — если разбить парсинг на 2 потока. При 10 прокси — на 10 потоков, при 1000 — на 1000. Сколько страниц можно собрать за одну итерацию? С одним прокси — только одну, с 10 прокси — 10, с 1000 — 1000 и т.д. Вроде всё очевидно. С прокси всё упирается только в производительность вашего парсера и оборудования, на котором он работает. Единственный момент — не стоит создавать слишком большую нагрузку на целевой сайт, так как это может привести к эффекту, который дают DDoS-атаки.
  • Доступ к региональным библиотекам и к локализованному содержимому. Веб-сервисы и крупные международные сайты часто предполагают, что настоящие пользователи приходят с разных сетей, провайдеров и стран. Соответственно каждой аудитории или региону может отображаться своя версия сайта и контента. В каких-то регионах сайт вообще может не работать. Использование прокси в целевой стране обеспечит доступ к нужному содержимому. Например, как в случае с просмотром видео на стриминговых сервисах.
  • Повышение анонимности. Если владелец сайта захочет отследить ваш цифровой след, то он сможет найти только владельца сервера, на котором работал прокси. Это чем-то напоминает эффект маски Анонимуса. Все видят её, а не ваше настоящее лицо. Тут стоит отметить, что для максимальной анонимности следует предпринять и ряд других технических шагов, так как прокси не шифруют трафик.

Распространённые проблемы с ротацией IP-адресов

Распространённые проблемы с ротацией IP-адресов

С какими техническими проблемами можно столкнуться при работе через прокси с ротацией IP:

  1. Низкое качество подключений. Соединения могут сбрасываться в любой момент, а скорость может стремится к нулю. Работать в таких условиях крайне сложно. Если в вашем списке много прокси низкого качества, логично написать свою утилиту для их предварительного тестирования — с проверкой доступности и пинга (это первый показатель скорости отклика).
  2. Низкое доверие к IP-адресам. Например, IP-адреса прокси уже могут быть в чёрных списках целевого сайта или даже в специальных спам-базах. Подключения с таких адресов могут сразу блокироваться — ещё до загрузки содержимого страниц. Ещё одна распространённая проблема — использование серверных прокси. Многие WAF и антифрод-системы с большим подозрением относятся к IP, которые не принадлежат реальной целевой аудитории (а это в основном адреса домашних и мобильных пользователей). Соответственно, логично выбирать в первую очередь ротируемые резидентные и мобильные прокси.
  3. Неправильный выбор расположения. В разных задачах важен свой индивидуальный подход. Например, если вы авторизовались в целевом сервисе, то его система защиты может заблокировать весь аккаунт из-за подозрительной активности, когда каждый новый запрос отправляется из нового расположения. Пользователь физически не может переместиться из Торонто в Канберру за пару секунд. При авторизации логично максимально удерживать сессию, а если ротация срабатывает принудительно, то следующий адрес лучше всего подбирать из той же локации и у того же оператора связи. Если у вас большое количество потоков парсинга без авторизации, то тут можно использовать абсолютно противоположный подход — каждый новый запрос удобнее всего отправлять из разных локаций и подсетей/провайдеров. Но стоит учитывать, что для разных расположений может отдаваться разное содержимое. Какие-то локации вообще могут полностью блокироваться для подключений.
  4. Попытка сохранения сессии при смене IP. Антифрод-системы могут детально изучать цифровые отпечатки браузерного профиля клиента. Даже простейшие системы защиты умеют проверять токены в куках. И если клиент с одними и теми же признаками идентификации подключается из разных локаций, то это повод для блокировки. Исключение — когда ротируемые IP-адреса подбираются из той же подсети (с одним и тем же ASN-номером или от одного и того же провайдера связи). В этом случае ротация выглядит естественно.
  5. Сложность управления. Чем больше у вас прокси-серверов в списке, тем сложнее ими управлять — какой IP и из какой локации, к какому типу устройств относится, с какими данными для авторизации связан (при наличии защиты с парой логин+пароль) и т.д. А если прокси ещё и имеют минимальное время жизни (периодически уходят в оффлайн), то управление усложняется кратно, ведь нужно ещё и каждый раз проверять списки на актуальность и жизнеспособность ротируемых IP-адресов.

Любая из обозначенных проблем имеет свои решения или обходные пути. Но все такие решения — это дополнительное погружение в тематику, а также расходы времени, сил, а чаще всего бюджета.

Собственно, по этой причине получили такое широкое распространение прокси-сервисы, которые берут на себя вопросы ротации IP, их мониторинга, проверки качества и т.п., вплоть до организации подбора в нужном городе и с выбором провайдера связи. Получается формат инфраструктуры «под ключ». Пример такого сервиса — Froxy.

Как правильно ротировать IP-адреса в скриптах для веб-скрапинга

Как правильно ротировать IP-адреса в скриптах для веб-скрапинга

Основной и максимально простой подход при работе со списками прокси — это рандомизация выбора. Но всегда возникает масса «но». Например, когда список прокси периодически обновляется (в этом случае его нужно вынести отдельным файлом или базой данных), когда прокси низкого качества (потребуется обязательная проверка, хотя бы на доступность и на значение пинга), когда прокси нужно интегрировать с разными библиотеками (процесс подключения может выглядеть по-разному), когда требуется поддержка особых протоколов (например, socks5 вместо стандартного http) и т.п.

У готовых прокси-сервисов вообще может использоваться API-интерфейс и специальные вызовы для принудительной ротации IP. Всё это не имеет ничего общего с прямой ротацией прокси в списках непосредственно в коде скрипта парсинга. Но хватит теории, пора переходить к практике — рассказываем и показываем на примерах как ротировать IP.

Использование списков прокси в коде

Простейший пример с выбором случайного значения из списка. Предположим, что парсинг целевого сайта организован через библиотеку requests (здесь и ниже — язык программирования Python):

import requests, random

proxy_list = ['ip1:port1', 'ip2:port2', 'ip3:port3', 'user:password@123.456.789.002:8080']
proxy = random.choice(proxy_list)

response = requests.get('https://httpbin.org/ip', proxies={'http': f'http://{proxy}'})
print(response.text)

Вместо случайного выбора можно «зациклить» перебор списка:

import requests
from itertools import cycle

proxy_list = ['ip1:port1', 'ip2:port2', 'ip3:port3']

for proxy in cycle(proxy_list):
    response = requests.get('https://httpbin.org/ip', proxies={'http': f'http://{proxy}'})
    print(f"Proxy: {proxy}, Answer: {response.json()['origin']}")

Более сложный пример, который:

  • читает прокси из текстового файла all_proxies.txt (файл должен лежать в той же папке, что и скрипт, одна строка — один прокси, кодировка utf-8, формат записей — http://user:pass@1.2.3.4:8000 или socks5://9.9.9.9:1080);
  • проверяет каждый прокси запросом к https://httpbin.org/ip и измеряет «пинг» (временную задержку) в миллисекундах;
  • создаёт новый файл с «хорошими» прокси good_proxies.txt и включает в него только прокси с задержкой < 100 мс;
  • использует пул прокси для парсинга списка URL'ов через веб-драйвер Playwright;
  • при исчерпании рабочих прокси останавливает работу.

Сам скрипт (не забудьте создать и наполнить файл с прокси):

import requests, time

from playwright.sync_api import sync_playwright
from itertools import cycle

# Порог пинга в миллисекундах
PING_LIMIT = 100

# Тестовый URL для проверки прокси
TEST_URL = "https://httpbin.org/ip"

def check_proxies():
    """Проверяет прокси из all_proxies.txt и сохраняет рабочие с ping < 100 мс в good_proxies.txt."""
    good = []
    with open("all_proxies.txt", "r", encoding="utf-8") as f:
        proxies = [line.strip() for line in f if line.strip() and not line.startswith("#")]
    print(f"[INFO] Found {len(proxies)} proxy for verification...")

    for proxy in proxies:
        proxies_dict = {"http": proxy, "https": proxy}
        start = time.perf_counter()
        try:
            r = requests.get(TEST_URL, proxies=proxies_dict, timeout=5)
            latency = (time.perf_counter() - start) * 1000
            if r.ok and latency < PING_LIMIT:
                good.append(proxy)
                print(f"[OK] {proxy} — {latency:.0f} ms")
            else:
                print(f"[BAD] {proxy} — slowly ({latency:.0f} ms)")
        except Exception:
            print(f"[ERR] {proxy} — unavailable")

    # Сохраняем подходящие прокси
    with open("good_proxies.txt", "w", encoding="utf-8") as f:
        for p in good:
            f.write(p + "\n")
    print(f"[DONE] Working proxies are saved: {len(good)} pcs.")

def parse_with_proxies(url):
    """Функция открывает страницу через Playwright, перебирая прокси из good_proxies.txt при ошибках подключения."""
    try:
        with open("good_proxies.txt", "r", encoding="utf-8") as f:
            proxies = [line.strip() for line in f if line.strip()]
    except FileNotFoundError:
        print("[ERROR] The file good_proxies.txt not found. First, run check_proxies().")
        return

    if not proxies:
        print("[ERROR] There are no suitable proxies for parsing.")
        return

    proxy_cycle = cycle(proxies)
    print(f"[INFO] Uploaded by {len(proxies)} working proxies")

    for proxy in proxy_cycle:
        print(f"[TRY] Uploading {url} via {proxy}")
        try:
            with sync_playwright() as p:
                browser = p.chromium.launch(
                    headless=True,
                    proxy={"server": proxy}
                )
                page = browser.new_page()
                page.goto(url, timeout=15000)
                print("[SUCCESS] Page loaded successfully.")
                print("Title:", page.title())
                browser.close()
                break  # если страница открылась — выходим из цикла
        except Exception as e:
            print(f"[FAIL] Error with {proxy}: {e}")
            continue
    else:
        print("[STOP] All proxies from good_proxies.txt exhausted, parsing stopped.")

if __name__ == "__main__":
    # Шаг 1. Проверяем прокси и формируем файл good_proxies.txt
    check_proxies()

    # Шаг 2. Пример использования парсера
    parse_with_proxies("https://example.com/")
Резидентные прокси

Идеальные прокси-серверы для доступа к ценным данным со всего мира.

Выбрать прокси $1.99, 100Mb

Автоматизация ротации с помощью прокси-сервисов

В случае с готовой инфраструктурой ротируемых прокси, достаточно создать аккаунт и приобрести трафик для прокси. В личном кабинете нужно создать новый порт или фильтр, в котором указываются: расположение, из которого будут подбираться прокси, ISP-провайдер (по желанию), логика ротации (замена выходных IP-адресов раз в N-минут/секунд, максимальное удержание или ротация IP при каждом новом запросе).

На выходе вы получаете параметры подключения. Это своего рода точка входа в прокси-сеть. Подробнее о механизме в материале о BackConnect-прокси.

Простейший пример запуска headless-браузера через библиотеку Playwright и прокси Froxy:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        'server': 'http://proxy.froxy.com:9000',
        'username': 'user',  # заполните своими данными
        'password': 'pass'   # заполните своими данными
    })
    page = browser.new_page()
    page.goto('https://httpbin.org/ip')
    print(page.content())
    browser.close()

Даже если IP-адреса прокси будут ротироваться на стороне Froxy, данные для подключения в скрипте менять не нужно.

Обратите внимание, у провайдера прокси могут быть свои технические ограничения и лимиты. Например, при автоматической ротации IP по времени — от 90 секунд до 1 часа. Плюс могут быть лимиты на одновременные (параллельные) подключения и на количество устройств в белом списке.

Управление сеансами и файлами cookie

Сайты могут отслеживать не только IP-адреса, но и сессии (через cookies), http-заголовки, а также другие параметры цифровых отпечатков. Поэтому при ротации IP важно корректно синхронизировать сессии, особенно если вы работаете с целевым сайтом после авторизации в аккаунте или после прохождения процедуры валидации (подробнее об обходе блокировок Cloudflare).

Пример «липких» сессий (с фиксированной привязкой сессии к одному прокси):

import requests

def create_session_with_proxy(proxy):
    s = requests.Session()
    s.proxies.update({"http": proxy, "https": proxy})
    s.headers.update({"User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"})
    return s

proxy = "http://user:pass@1.2.3.4:8000"
sess = create_session_with_proxy(proxy)

# Логин — cookies сохранятся в sess.cookies
login_resp = sess.post("https://example.com/login", data={"user":"u","pass":"p"})

# Дальше делать действия в той же сессии и через тот же proxy
resp = sess.get("https://example.com/protected")

Пример синхронизации смены IP с очисткой/обновлением cookies:

# Когда сменили proxy:
sess.close()
sess = create_session_with_proxy(new_proxy)  # чистая сессия, новый cookiejar

Если вы используете прокси-сервис с ротируемыми IP, такой как Froxy, то нужно заранее создать несколько разных портов/фильтров с максимальным удержанием выходных IP — это могут быть «липкие» сессии или просто фильтры с большим временем автоматической ротации. Выгрузив список портов, вы получаете почти полный аналог статических прокси, которые можно ротировать по вашим условиям, например, вместе с очисткой сессии.

Лучшие практики для надёжной ротации IP-адресов

Лучшие практики для надёжной ротации IP-адресов

Дадим рекомендации в формате советов. Соблюдать их или нет, каждый разработчик парсеров решает сам:

  • Используйте качественные прокси. Чем выше их качество, тем вам же лучше. Для понимания — сравнение бесплатных прокси с платными.
  • Выбирайте прокси-сервисы с автоматической ротацией. В этом случае за состоянием и качеством прокси будет следить провайдер. Вам не придётся придумывать свой «велосипед».
  • Продумывайте логику ротации заранее и в строгом соответствии с задачами. Где-то лучше ротировать IP при каждом запросе, а где-то наоборот — удерживать сессии. Где-то нужно подбирать новые прокси из того же города или даже из сети одного провайдера связи, а где-то достаточно случайного выбора из любой локации. Решайте всегда по ситуации.
  • Придерживайтесь правила — один поток, один прокси. Так вы сможете существенно снизить вероятность блокировки.
  • Следите за куками и цифровыми отпечатками. Сейчас всё больше сайтов использует сложные системы защиты. Одних только прокси может быть недостаточно. В некоторых ситуациях может потребоваться даже эмулирование человеческого поведения и использование headless-браузеров (а где-то — антидетектов).
  • Обязательно отслеживайте успешность запросов и мониторьте коды ошибок сервера. Только так вы сможете оперативно отреагировать на проблемы парсинга и предусмотреть альтернативные сценарии автоматизации.

Заключение и рекомендации

Ротируемые IP-адреса и прокси могут решить массу проблем при парсинге целевых сайтов. Но, к сожалению, не все. Чтобы парсер работал без остановок и банов, нужно подойти к вопросу максимально комплексно и вдумчиво. Где-то сессии и прокси нужно удерживать по максимуму, одновременно позаботившись об эмуляции цифровых отпечатков и человеческого поведения, а где-то полезно ротировать IP при каждом запросе.

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

Но в любом случае, в основе основ качество прокси. Присмотритесь к Froxy — у нас свыше 10 млн домашних и мобильных IP с гибким геотаргетингом.

Получайте уведомления о новых функциях и обновлениях Froxy

Узнайте первыми о новых функциях Froxy, чтобы оставаться в курсе событий происходящих на рынке цифровых технологий и получать новости о новых функциях Froxy.

Статьи по Теме

Почему без прокси вы тратите больше, чем думаете

Прокси

Почему без прокси вы тратите больше, чем думаете

Узнайте, как отсутствие прокси-серверов увеличивает затраты: от блокировок и потерь в скрапинге до неэффективной автоматизации. Примеры и решения...

Команда Froxy 4 июн 2025 5 мин
Как обойти защиту Cloudflare от ботов: вариант веб-скрапинга с Puppeteer

Парсинг

Как обойти защиту Cloudflare от ботов: вариант веб-скрапинга с Puppeteer

Как настроить Puppeteer для обхода Cloudflare: прокси-серверы, управление сессиями и обработка CAPTCHA. В статье практические советы и напоминание об...

Команда Froxy 30 окт 2025 10 мин