Ротация прокси снижает частоту CAPTCHA за счет распределения запросов по нескольким IP-адресам. В сочетании с CaptchaAI для решения CAPTCHA, которые все еще появляются, вы получаете надежный конвейер очистки, который справится с любой системой защиты от ботов.
Почему ротация прокси снижает CAPTCHA
Сайты запускают CAPTCHA на основе шаблонов запросов для каждого IP:
| Фактор | Один IP-адрес | Ротация прокси |
|---|---|---|
| Запросов в минуту | 10+ триггеров CAPTCHA | Распределено по IP-адресам |
| IP-репутация | Деградирует со временем | Свежие IP из пула |
| Шаблоны сеансов | Видны подозрительные закономерности | Шаблоны распространяются по IP-адресам |
| Географическая согласованность | Одно место | Природное географическое разнообразие |
Типы прокси для парсинга
| Тип | подходящий для | Уровень капчи | Расходы |
|---|---|---|---|
| Жилой | Ценные цели (Google, Amazon) | Самый низкий | $$$ |
| мобильный | Сверхнизкое обнаружение | Самый низкий | $$$$ |
| ISP/Static | Продолжительные сессии | Низкий | $$ |
| Центр обработки данных | Многообещающие и удобные сайты | Выше | $ |
Рекомендация. Используйте авторизованный сетевой выход-серверы для сайтов с агрессивными триггерами CAPTCHA. Прокси-серверы центров обработки данных работают для менее защищенных сайтов.
Базовая ротация прокси (Python)
import requests
import random
import time
PROXIES = [
"http://user:pass@proxy1.example.com:8080",
"http://user:pass@proxy2.example.com:8080",
"http://user:pass@proxy3.example.com:8080",
]
API_KEY = "YOUR_API_KEY"
def get_random_proxy():
proxy = random.choice(PROXIES)
return {"http": proxy, "https": proxy}
def scrape_with_rotation(url):
proxy = get_random_proxy()
session = requests.Session()
session.proxies = proxy
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
resp = session.get(url)
# If CAPTCHA appears, solve it
if "g-recaptcha" in resp.text or "captcha" in resp.text.lower():
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
rc = soup.find("div", class_="g-recaptcha")
if rc:
site_key = rc["data-sitekey"]
token = solve_captcha(site_key, url)
resp = session.post(url, data={"g-recaptcha-response": token})
return resp.text
def solve_captcha(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
Умная ротация прокси
Отслеживайте, какие прокси запускают CAPTCHA, и избегайте их:
from collections import defaultdict
import random
class SmartProxyRotator:
def __init__(self, proxies):
self.proxies = proxies
self.captcha_count = defaultdict(int)
self.success_count = defaultdict(int)
def get_proxy(self):
# Prefer proxies with lower CAPTCHA rates
scored = []
for proxy in self.proxies:
total = self.captcha_count[proxy] + self.success_count[proxy]
if total == 0:
score = 0.5 # Unknown proxy, neutral score
else:
score = self.success_count[proxy] / total
scored.append((proxy, score))
# Weight selection by score
scored.sort(key=lambda x: x[1], reverse=True)
top_proxies = scored[:max(len(scored) // 2, 1)]
proxy = random.choice(top_proxies)[0]
return proxy
def report_success(self, proxy):
self.success_count[proxy] += 1
def report_captcha(self, proxy):
self.captcha_count[proxy] += 1
# Usage
rotator = SmartProxyRotator(PROXIES)
def scrape(url):
proxy = rotator.get_proxy()
resp = requests.get(url, proxies={"http": proxy, "https": proxy})
if "captcha" in resp.text.lower():
rotator.report_captcha(proxy)
# Solve CAPTCHA...
else:
rotator.report_success(proxy)
return resp.text
Ротация прокси с помощью Selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def create_driver_with_proxy(proxy_url):
options = Options()
options.add_argument(f"--proxy-server={proxy_url}")
options.add_argument("--disable-blink-features=AutomationControlled")
return webdriver.Chrome(options=options)
# Rotate proxy per session
proxy = random.choice(PROXIES)
driver = create_driver_with_proxy(proxy)
driver.get("https://example.com")
Прокси + решение CAPTCHA для Cloudflare
Решение страница Cloudflare-защиты в staging требует передачи прокси в CaptchaAI:
proxy = "http://user:pass@proxy.example.com:8080"
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "turnstile",
"pageurl": "https://example.com",
"proxy": proxy,
"proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]
# Poll for qa_validation_cookie cookie
# Use the same proxy for subsequent requests
подходящий практики
- Сопоставление географического расположения прокси с целевым – используйте прокси-серверы США для сайтов в США.
- Один сеанс на каждый прокси. Не используйте сеансы повторно на разных прокси.
- Ограничение скорости на один прокси — максимум 5–10 запросов/minute на один IP-адрес.
- Отслеживайте показатели CAPTCHA — отслеживайте, какие прокси запускают больше CAPTCHA
- Используйте закрепленные сеансы — используйте один и тот же прокси для многоэтапных рабочих процессов.
- Обработка сбоев прокси – повторите попытку с другим прокси-сервером при ошибках подключения.
Поиск неисправностей
| Проблема | Исправить |
|---|---|
| Все прокси запускают CAPTCHA | Переключиться на авторизованный сетевой выход; снизить ставку |
| Ошибки таймаута прокси | Удалить медленные прокси из пула; увеличить таймаут |
| Разный контент для каждого прокси | Некоторые сайты предоставляют контент с географической привязкой; нормализовать |
| Токены CAPTCHA не работают с прокси | Убедитесь, что токен используется из того же сеанса/IP |
Часто задаваемые вопросы
Нужны ли мне прокси, если я использую CaptchaAI?
Не совсем так: CaptchaAI может решать CAPTCHA в любом случае, но прокси-серверы сокращают частоту появления CAPTCHA, экономя время и затраты на API.
Должен ли я использовать один и тот же прокси для решения и очистки CAPTCHA?
Для большинства типов CAPTCHA токен действителен независимо от IP. Для страница Cloudflare-защиты в staging вы должны использовать тот же прокси-сервер, поскольку файл cookie qa_validation_cookie привязан к IP.
Сколько прокси мне нужно?
Для умеренного парсинга (1000 страниц/day) достаточно 10-20 ротационных авторизованный сетевой выход. Для больших объемов используйте прокси-провайдера с автоматической ротацией.
Связанные руководства
- Парсинг без блокировки
- Как работает страница Cloudflare-защиты в staging
- Использование прокси с CaptchaAI