Перейти к содержанию

Тема 10: Прокси и Ротация: Какие бывают прокси (Residental vs Server) и как правильно менять IP, чтобы не спалиться?

Представь, что ты грабишь банк. Ты надел маску (User-Agent), научился ходить как охранник (TLS Fingerprint), но... ты приходишь в банк каждые 5 секунд через одну и ту же дверь. Охранник не тупой. Он просто закроет эту дверь.

IP-адрес — это твой физический вход. Чтобы парсить масштабно, тебе нужно менять "двери" постоянно.


1. Пирамида Прокси (Типы)

Не все IP одинаково полезны. Есть иерархия.

Уровень 1: Datacenter (Серверные) — "Дешево и сердито"

Это IP-адреса хостингов (AWS, DigitalOcean, Hetzner).

  • Плюсы: Дешевые, безумно быстрые, стабильные.
  • Минусы: У них на лбу написано "Я СЕРВЕР". Сайты видят, что IP принадлежит дата-центру, а живые люди не сидят с серверов.
  • Применение: Идеально для простых сайтов без защиты. Для Avito или Google — мусор, забанят подсетью сразу.

Уровень 2: Residential (Резидентские) — "Маскировка под соседа"

Это IP-адреса реальных людей (домашний Wi-Fi). Как они их получают? Обычно через бесплатные VPN-приложения, которые вшивают юзерам SDK: "Ты юзаешь VPN бесплатно, а мы юзаем твой канал как прокси".

  • Плюсы: Выглядят как обычный Вася из Саратова. Траст (доверие) высокий.
  • Минусы: Дорогие (продаются за гигабайты трафика). Медленнее (канал зависит от Васи). Могут отвалиться в любой момент, если Вася выключил роутер.
  • Применение: Золотая середина для парсинга защищенных сайтов.

Уровень 3: Mobile (Мобильные) — "Режим Бога"

Это IP-адреса сотовых операторов (4G/5G).

  • Суть (CGNAT): У операторов мало IPv4 адресов. Поэтому за одним IP может сидеть 1000 реальных людей.
  • Почему это круто: Сайт БОИТСЯ банить мобильный IP. Если он забанит этот IP, он отрежет доступ тысяче реальных клиентов.
  • Плюсы: Почти бессмертные.
  • Минусы: Очень дорогие.
  • Применение: Instagram, Facebook, самые лютые защиты.

2. Стратегия Ротации: Как менять IP?

У тебя есть два пути, как использовать прокси в коде.

Путь А: Gateway (Ротация на каждом запросе)

Ты покупаешь доступ к пулу прокси. Тебе дают один адрес (Gateway), например proxy.provider.com:8000. Каждый раз, когда ты шлешь запрос на этот адрес, провайдер сам перенаправляет его через новый случайный IP из пула.

  • Код: Элементарный. Ты просто долбишь в одну дырку.
  • Подходит для: Сбора общедоступных данных (цены, каталоги), где не нужно логиниться.

Путь Б: Sticky Session (Липкая сессия)

Если тебе нужно залогиниться и ходить по кабинету, тебе нельзя менять IP на каждом клике (сайт охренеет, что ты за секунду переместился из Токио в Париж). Тебе нужно "прилипнуть" к одному IP на время сессии (например, на 10 минут).

  • Как это делается: Обычно через изменение username прокси.
    • Запрос 1: user-session-123:pass@host:port -> IP A
    • Запрос 2: user-session-123:pass@host:port -> IP A (тот же!)
    • Запрос 3: user-session-456:pass@host:port -> IP B (новый юзер = новый IP)

3. 👨‍💻 КОД: Подключаем прокси

В httpxrequests, и curl_cffi) прокси подключаются через словарь proxies.

import httpx

# Формат: protocol://user:pass@host:port
PROXY_URL = "<http://myuser:mypassword@gate.proxyservice.com:8000>"

# Для httpx прокси задаются через 'mounts' или аргумент 'proxy' (в новых версиях)
# Самый простой способ:
proxies = {
    "http://": PROXY_URL,
    "https://": PROXY_URL,
}

# 1. Ротация на каждом запросе (обычный режим)
with httpx.Client(proxies=proxies) as client:
    resp = client.get("<https://httpbin.org/ip>")
    print(f"Мой IP: {resp.json()['origin']}")
    # Выведет IP прокси, а не твой

# 2. Асинхронно + Ротация
async def fetch_with_proxy():
    async with httpx.AsyncClient(proxies=proxies) as client:
        resp = await client.get("<https://httpbin.org/ip>")
        print(resp.text)

🧠 Советы Архитектора:

  1. Не покупай списки прокси (txt файлы). Это прошлый век. 90% из них мертвы. Покупай доступ к Gateway (сервисы типа Bright Data, Smartproxy, Soax, Webshare). Ты платишь за трафик, но получаешь рабочий сервис.
  2. Экономь трафик. Если юзаешь резидентов (они дорогие), блокируй загрузку картинок и шрифтов (особенно в Playwright). Ты платишь за каждый гигабайт. Зачем тебе качать баннер на 5МБ?
  3. Ошибка 407 (Proxy Authentication Required): Значит, ты забыл добавить свой IP в "белый список" в панели управления прокси-провайдера, либо ошибся в логине/пароле.

Блок 3 (Взлом) закрыт. Мы научились ломать API, подделывать TLS и менять маски (IP). Теперь ты умеешь добывать данные. Но как их хранить и структурировать, чтобы не превратить проект в помойку?