Тема 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)
- Запрос 1:
3. 👨💻 КОД: Подключаем прокси
В httpx (и requests, и 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)
🧠 Советы Архитектора:
- Не покупай списки прокси (txt файлы). Это прошлый век. 90% из них мертвы. Покупай доступ к Gateway (сервисы типа Bright Data, Smartproxy, Soax, Webshare). Ты платишь за трафик, но получаешь рабочий сервис.
- Экономь трафик. Если юзаешь резидентов (они дорогие), блокируй загрузку картинок и шрифтов (особенно в Playwright). Ты платишь за каждый гигабайт. Зачем тебе качать баннер на 5МБ?
- Ошибка 407 (Proxy Authentication Required): Значит, ты забыл добавить свой IP в "белый список" в панели управления прокси-провайдера, либо ошибся в логине/пароле.
Блок 3 (Взлом) закрыт. Мы научились ломать API, подделывать TLS и менять маски (IP). Теперь ты умеешь добывать данные. Но как их хранить и структурировать, чтобы не превратить проект в помойку?