Amazon utilise des CAPTCHA d'image pour bloquer l'accès automatisé. Lorsque vous atteignez leur seuil anti-bot, vous verrez une page vous demandant de saisir des caractères à partir d'une image déformée. La résolution OCR de CaptchaAI les gère automatiquement.
Comment fonctionne le CAPTCHA d'Amazon
Amazon déclenche des CAPTCHA en fonction de :
| Signal | Descriptif |
|---|---|
| Volume de demande | Trop de requêtes provenant d'une seule adresse IP dans une courte fenêtre |
| Cookies manquants | Pas de cookies de session Amazon |
| En-têtes suspects | Agent utilisateur de type robot ou en-têtes manquants |
| Réputation IP | Plages IP connues du centre de données ou du proxy |
Lorsqu'il est déclenché, Amazon redirige vers une page avec une image de texte déformée et un champ de saisie. Vous devez résoudre l'image et soumettre le texte pour continuer.
Exigences
| Exigence | Détails |
|---|---|
| Clé API CaptchaAI | Depuiscaptchaai.com |
| Python3.7+ | Avec des demandes et une belle soupe4 |
| Procurations résidentielles | Recommandé pour un grattage soutenu |
Résoudre le CAPTCHA d'image d'Amazon
Étape 1 : Détecter la page CAPTCHA
import requests
from bs4 import BeautifulSoup
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
})
def is_captcha_page(html):
return "Type the characters you see in this image" in html or \
"captcha" in html.lower()
url = "https://www.amazon.com/dp/B0EXAMPLE"
resp = session.get(url)
if is_captcha_page(resp.text):
print("CAPTCHA detected!")
else:
print("Page loaded successfully")
Étape 2 : extraire et résoudre l'image
import base64
API_KEY = "YOUR_API_KEY"
def solve_amazon_captcha(session, captcha_page_html, captcha_page_url):
soup = BeautifulSoup(captcha_page_html, "html.parser")
# Find the CAPTCHA image
img_tag = soup.find("img", src=lambda s: s and "captcha" in s.lower())
if not img_tag:
raise Exception("CAPTCHA image not found")
img_url = img_tag["src"]
# Download the image
img_resp = session.get(img_url)
img_base64 = base64.b64encode(img_resp.content).decode()
# Submit to CaptchaAI
submit_resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "base64",
"body": img_base64
})
task_id = submit_resp.text.split("|")[1]
# Poll for result
import time
for _ in range(30):
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(f"Solve error: {result.text}")
raise TimeoutError("Solve timed out")
Étape 3 : soumettre la solution
def submit_captcha_solution(session, captcha_page_html, solution, captcha_page_url):
soup = BeautifulSoup(captcha_page_html, "html.parser")
form = soup.find("form")
# Build form data
form_data = {}
for inp in form.find_all("input"):
name = inp.get("name")
if name:
form_data[name] = inp.get("value", "")
# Set the CAPTCHA answer
form_data["field-keywords"] = solution
# Submit
action = form.get("action", captcha_page_url)
if action.startswith("/"):
from urllib.parse import urljoin
action = urljoin(captcha_page_url, action)
resp = session.post(action, data=form_data)
return resp
Exemple de travail complet
import requests
import base64
import time
from bs4 import BeautifulSoup
API_KEY = "YOUR_API_KEY"
def scrape_amazon_product(url):
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9"
})
resp = session.get(url)
# Handle CAPTCHA if present
if "captcha" in resp.text.lower():
soup = BeautifulSoup(resp.text, "html.parser")
img = soup.find("img", src=lambda s: s and "captcha" in s.lower())
if img:
# Download and solve
img_data = session.get(img["src"]).content
img_b64 = base64.b64encode(img_data).decode()
submit = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "base64", "body": img_b64
})
task_id = submit.text.split("|")[1]
for _ in range(30):
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|"):
solution = result.text.split("|")[1]
break
# Submit solution
form = soup.find("form")
form_data = {inp.get("name"): inp.get("value", "")
for inp in form.find_all("input") if inp.get("name")}
form_data["field-keywords"] = solution
action = form.get("action", url)
resp = session.post(action, data=form_data)
# Parse product data
soup = BeautifulSoup(resp.text, "html.parser")
title = soup.find("span", {"id": "productTitle"})
price = soup.find("span", class_="a-price-whole")
return {
"title": title.text.strip() if title else None,
"price": price.text.strip() if price else None
}
product = scrape_amazon_product("https://www.amazon.com/dp/B0EXAMPLE")
print(product)
Meilleures pratiques pour le scraping d'Amazon
- Utilisez des proxys résidentiels – Amazon bloque de manière agressive les adresses IP des centres de données
- Rotation des agents utilisateurs – Utilisez un pool de chaînes de navigateur réalistes
- Maintenir les sessions – Conserver les cookies lors des requêtes
- Ajouter des délais – 3 à 10 secondes entre les requêtes
- Définir Accept-Language – Toujours inclure les en-têtes de paramètres régionaux
- Ne supprimez pas les pages connectées – Les pages produits sont accessibles sans connexion
Dépannage
| Problème | Corriger |
|---|---|
| CAPTCHA à chaque demande | Utiliser des proxys résidentiels ; ralentir le taux de demandes |
| Solution CAPTCHA rejetée | Vérifiez que l'image a été téléchargée correctement ; réessayer |
| Redirection des boucles | Vérifiez la gestion des cookies ; utiliser allow_redirects=True |
| Données produit vides | Amazon peut proposer différentes mises en page ; vérifier les sélecteurs |
FAQ
Amazon utilise-t-il reCAPTCHA ?
Amazon utilise principalement son propre CAPTCHA (texte déformé) basé sur des images. CaptchaAI les résout à l'aide du point de terminaison method=base64 pour la résolution d'image/OCR.
Combien de requêtes avant qu'Amazon affiche un CAPTCHA ?
Cela varie. Avec de bons proxys et des en-têtes réalistes, vous pouvez parcourir des centaines de pages. Sans proxy, les CAPTCHA peuvent apparaître après 10 à 20 requêtes.
Le scraping d'Amazon est-il légal ?
La suppression des données produit accessibles au public est généralement légale, mais vérifiez les conditions de service d'Amazon et les lois applicables dans votre juridiction.
Guides connexes
- Collecte de données des résultats de recherche avec gestion CAPTCHA
- Rotation du proxy pour le grattage de CAPTCHA
- Résolution de CAPTCHA d'image à l'aide de l'API