Amazon utiliza CAPTCHA de imágenes para bloquear el acceso automatizado. Cuando alcances su umbral anti-bot, verás una página que te pedirá que escribas caracteres de una imagen distorsionada. La resolución OCR de CaptchaAI los maneja automáticamente.
Cómo funciona el CAPTCHA de Amazon
Amazon activa CAPTCHA basados en:
| señal | Descripción |
|---|---|
| Volumen de solicitud | Demasiadas solicitudes de una IP en una ventana corta |
| galletas faltantes | Sin cookies de sesión de Amazon |
| encabezados sospechosos | Agente de usuario tipo bot o encabezados faltantes |
| reputación de propiedad intelectual | Rangos de IP de proxy o centro de datos conocidos |
Cuando se activa, Amazon redirige a una página con una imagen de texto distorsionada y un campo de entrada. Debes resolver la imagen y enviar el texto para continuar.
Requisitos
| Requisito | Detalles |
|---|---|
| Clave API CaptchaAI | Decaptchaai.com |
| Pitón 3.7+ | Con peticiones y hermosa sopa4 |
| apoderados residenciales | Recomendado para raspado sostenido |
Resolviendo el CAPTCHA de imagen de Amazon
Paso 1: detectar la página 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")
Paso 2: extrae y resuelve la imagen
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")
Paso 3: envíe la solución
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
Ejemplo de trabajo completo
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)
Mejores prácticas para el raspado de Amazon
- Utilice proxies residenciales: Amazon bloquea agresivamente las IP de los centros de datos
- Rotar agentes de usuario: utilice un conjunto de cadenas de navegador realistas
- Mantener sesiones: conservar las cookies en todas las solicitudes
- Agregar retrasos: 3 a 10 segundos entre solicitudes
- Establecer idioma de aceptación: incluya siempre encabezados locales
- No elimine las páginas iniciadas: se puede acceder a las páginas de productos sin iniciar sesión
Solución de problemas
| Problema | Solución |
|---|---|
| CAPTCHA en cada solicitud | Utilice representantes residenciales; ralentizar la tasa de solicitudes |
| Solución CAPTCHA rechazada | Verifique que la imagen se haya descargado correctamente; reintentar |
| Bucles de redireccionamiento | Verificar el manejo de cookies; utilizar allow_redirects=True |
| Datos de producto vacíos | Amazon puede ofrecer diferentes diseños; seleccionar selectores |
Preguntas frecuentes
¿Amazon utiliza reCAPTCHA?
Amazon utiliza principalmente su propio CAPTCHA (texto distorsionado) basado en imágenes. CaptchaAI los resuelve utilizando el punto final method=base64 para la resolución de image/OCR.
¿Cuántas solicitudes antes de que Amazon muestre un CAPTCHA?
Varía. Con buenos servidores proxy y encabezados realistas, puedes eliminar cientos de páginas. Sin servidores proxy, los CAPTCHA pueden aparecer después de 10 a 20 solicitudes.
¿Es legal raspar Amazon?
La extracción de datos de productos disponibles públicamente es generalmente legal, pero consulte los términos de servicio de Amazon y las leyes aplicables en su jurisdicción.
Guías relacionadas
- Recopilación de datos de resultados de búsqueda con manejo de CAPTCHA
- Rotación de proxy para raspado CAPTCHA
- Resolución de CAPTCHA de imagen mediante API