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
- Haga coincidir la geografía del proxy con el objetivo: use proxies de EE. UU. para sitios de EE. UU.
- Una sesión por proxy: no reutilice sesiones en diferentes servidores proxy
- Límite de velocidad por proxy: máximo de 5 a 10 solicitudes/minute por IP
- Supervise las tasas de CAPTCHA: realice un seguimiento de qué servidores proxy activan más CAPTCHA
- Usar sesiones fijas: mantenga el mismo proxy para flujos de trabajo de varios pasos
- 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
- Raspar sin bloquearse
- Cómo funciona Cloudflare Challenge
- Usando servidores proxy con CaptchaAI