Casos de Uso

Rotación de proxy para raspado CAPTCHA

La rotación de proxy reduce la frecuencia de CAPTCHA al distribuir las solicitudes entre múltiples IP. Combinado con CaptchaAI para resolver los CAPTCHA que aún aparecen, obtienes un proceso de raspado confiable que maneja cualquier sistema anti-bot.

Por qué la rotación de proxy reduce los CAPTCHA

Los sitios activan CAPTCHA según patrones de solicitud por IP:

factores IP única Representantes rotativos
Solicitudes por minuto Más de 10 activadores CAPTCHA Distribuido entre IP
reputación de propiedad intelectual Se degrada con el tiempo IP nuevas del grupo
Patrones de sesión Patrones sospechosos visibles Patrones repartidos entre las IP
Consistencia geográfica Ubicación única Diversidad geográfica natural

Tipos de proxy para scraping

Tipo Mejor para Tasa CAPTCHA Costo
Residencial Objetivos de alto valor (Google, Amazon) Más bajo $$$
Móvil Detección ultrabaja Más bajo $$$$
ISP/Static Sesiones sostenidas Bajo $$
centro de datos Sitios indulgentes y de gran volumen superior $

Recomendación: Utilice servidores red residencial autorizadaes para sitios con activadores CAPTCHA agresivos. Los servidores proxy de centros de datos funcionan para sitios menos protegidos.

Rotación de proxy básica (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()

Rotación de proxy inteligente

Realice un seguimiento de qué servidores proxy activan CAPTCHA y evítelos:

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

Rotación de proxy con selenio

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}")
    return webdriver.Chrome(options=options)

# Rotate proxy per session
proxy = random.choice(PROXIES)
driver = create_driver_with_proxy(proxy)
driver.get("https://example.com")

Proxy + CAPTCHA Resolviendo para Cloudflare

La resolución de Cloudflare Challenge requiere pasar un proxy a CaptchaAI:

proxy = "http://user:pass@proxy.example.com:8080"

resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "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

Mejores prácticas

  1. Haga coincidir la geografía del proxy con el objetivo: use proxies de EE. UU. para sitios de EE. UU.
  2. Una sesión por proxy: no reutilice sesiones en diferentes servidores proxy
  3. Límite de velocidad por proxy: máximo de 5 a 10 solicitudes/minute por IP
  4. Supervise las tasas de CAPTCHA: realice un seguimiento de qué servidores proxy activan más CAPTCHA
  5. Usar sesiones fijas: mantenga el mismo proxy para flujos de trabajo de varios pasos
  6. Manejar fallas de proxy: vuelva a intentarlo con un proxy diferente en caso de errores de conexión

Solución de problemas

Problema Solución
Todos los servidores proxy activan CAPTCHA Cambiar a servidores red residencial autorizadaes; reducir la tasa
Errores de tiempo de espera de proxy Eliminar los proxies lentos del grupo; aumentar el tiempo de espera
Contenido diferente por proxy Algunos sitios ofrecen contenido geoespecífico; normalizar
Los tokens CAPTCHA no funcionan con proxy Asegúrese de que el token se utilice desde la misma sesión/IP

Preguntas frecuentes

¿Necesito proxies si uso CaptchaAI?

No estrictamente: CaptchaAI puede resolver CAPTCHA de todos modos, pero los servidores proxy reducen la frecuencia con la que aparecen los CAPTCHA, lo que ahorra tiempo y costos de API.

¿Debo usar el mismo proxy para resolver y extraer CAPTCHA?

Para la mayoría de los tipos de CAPTCHA, el token es válido independientemente de la IP. Para Cloudflare Challenge, debe utilizar el mismo proxy ya que la cookie qa_validation_cookie está vinculada a IP.

¿Cuántos proxy necesito?

Para un scraping moderado (1000 páginas/day), son suficientes entre 10 y 20 proxies residenciales rotativos. Para un volumen elevado, utilice un proveedor de proxy con rotación automática.

Guías relacionadas

Los comentarios están deshabilitados para este artículo.