La rotation du proxy réduit la fréquence des CAPTCHA en répartissant les requêtes sur plusieurs adresses IP. Combiné avec CaptchaAI pour résoudre les CAPTCHA qui apparaissent encore, vous obtenez un pipeline de scraping fiable qui gère n'importe quel système anti-bot.
Pourquoi la rotation des proxys réduit les CAPTCHA
Les sites déclenchent des CAPTCHA en fonction de modèles de requête par IP :
| Facteur | IP unique | Rotation des procurations |
|---|---|---|
| Requêtes par minute | 10+ déclenche CAPTCHA | Distribué sur les IP |
| Réputation IP | Se dégrade avec le temps | Nouvelles IP du pool |
| Modèles de session | Modèles suspects visibles | Modèles répartis sur les adresses IP |
| Cohérence géographique | Emplacement unique | Diversité géographique naturelle |
Types de proxy pour le grattage
| Tapez | Idéal pour | Taux CAPTCHA | Coût |
|---|---|---|---|
| Résidentiel | Cibles à forte valeur ajoutée (Google, Amazon) | Le plus bas | $$$ |
| Mobile | Détection ultra-faible | Le plus bas | $$$$ |
| ISP/Static | Des séances soutenues | Faible | $$ |
| Centre de données | Sites à gros volume et indulgents | Plus haut | $ |
Recommandation : Utilisez des proxys résidentiels pour les sites dotés de déclencheurs CAPTCHA agressifs. Les proxys de centre de données fonctionnent pour les sites moins protégés.
Rotation de proxy de base (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()
Rotation du proxy intelligent
Suivez quels proxys déclenchent des CAPTCHA et évitez-les :
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
Rotation des proxys avec 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")
Résolution de proxy + CAPTCHA pour Cloudflare
La résolution de Cloudflare Challenge nécessite de transmettre un proxy à 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 cf_clearance cookie
# Use the same proxy for subsequent requests
Meilleures pratiques
- ** Faites correspondre la géolocalisation du proxy à la cible ** – Utilisez des proxys américains pour les sites américains
- Une session par proxy – Ne réutilisez pas les sessions sur différents proxys
- ** Limite de débit par proxy ** - Max 5 à 10 requêtes /minute par IP
- Surveillez les taux de CAPTCHA – Suivez quels proxys déclenchent plus de CAPTCHA
- Utilisez des sessions persistantes – Conservez le même proxy pour les flux de travail en plusieurs étapes
- Gérer les échecs de proxy – Réessayez avec un autre proxy en cas d'erreurs de connexion
Dépannage
| Problème | Corriger |
|---|---|
| Tous les proxy déclenchent des CAPTCHA | Passez aux proxys résidentiels ; réduire le taux |
| Erreurs d'expiration du proxy | Supprimez les proxys lents du pool ; augmenter le délai d'attente |
| Contenu différent par proxy | Certains sites proposent du contenu géo-spécifique ; normaliser |
| Les jetons CAPTCHA ne fonctionnent pas avec le proxy | Assurez-vous que le jeton est utilisé à partir de la même session/IP |
FAQ
Ai-je besoin de proxys si j'utilise CaptchaAI ?
Pas strictement : CaptchaAI peut résoudre les CAPTCHA de toute façon. Mais les proxys réduisent la fréquence d'apparition des CAPTCHA, ce qui permet d'économiser du temps et des coûts d'API.
Dois-je utiliser le même proxy pour la résolution et le scraping de CAPTCHA ?
Pour la plupart des types CAPTCHA, le jeton est valide quelle que soit l'adresse IP. Pour Cloudflare Challenge, vous devez utiliser le même proxy puisque le cookie cf_clearance est lié à l'IP.
De combien de proxys ai-je besoin ?
Pour un scraping modéré (1 000 pages/day), 10 à 20 proxys résidentiels rotatifs suffisent. Pour un volume élevé, utilisez un fournisseur proxy avec rotation automatique.
Guides connexes
- Gratter sans se bloquer
- Comment fonctionne Cloudflare Challenge
- Utiliser des proxys avec CaptchaAI