Сценарии использования

Ротация прокси для парсинга CAPTCHA

Ротация прокси снижает частоту 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

подходящий практики

  1. Сопоставление географического расположения прокси с целевым – используйте прокси-серверы США для сайтов в США.
  2. Один сеанс на каждый прокси. Не используйте сеансы повторно на разных прокси.
  3. Ограничение скорости на один прокси — максимум 5–10 запросов/minute на один IP-адрес.
  4. Отслеживайте показатели CAPTCHA — отслеживайте, какие прокси запускают больше CAPTCHA
  5. Используйте закрепленные сеансы — используйте один и тот же прокси для многоэтапных рабочих процессов.
  6. Обработка сбоев прокси – повторите попытку с другим прокси-сервером при ошибках подключения.

Поиск неисправностей

Проблема Исправить
Все прокси запускают CAPTCHA Переключиться на авторизованный сетевой выход; снизить ставку
Ошибки таймаута прокси Удалить медленные прокси из пула; увеличить таймаут
Разный контент для каждого прокси Некоторые сайты предоставляют контент с географической привязкой; нормализовать
Токены CAPTCHA не работают с прокси Убедитесь, что токен используется из того же сеанса/IP

Часто задаваемые вопросы

Нужны ли мне прокси, если я использую CaptchaAI?

Не совсем так: CaptchaAI может решать CAPTCHA в любом случае, но прокси-серверы сокращают частоту появления CAPTCHA, экономя время и затраты на API.

Должен ли я использовать один и тот же прокси для решения и очистки CAPTCHA?

Для большинства типов CAPTCHA токен действителен независимо от IP. Для страница Cloudflare-защиты в staging вы должны использовать тот же прокси-сервер, поскольку файл cookie qa_validation_cookie привязан к IP.

Сколько прокси мне нужно?

Для умеренного парсинга (1000 страниц/day) достаточно 10-20 ротационных авторизованный сетевой выход. Для больших объемов используйте прокси-провайдера с автоматической ротацией.

Связанные руководства

Комментарии для этой статьи отключены.