Cómo hacer scraping de Amazon a escala sin que te bloqueen
Amazon es el objetivo que todo el mundo quiere y que casi nadie consigue scrapear de forma limpia a escala. Descarga unas cuantas páginas de producto a mano y parece fácil. Apunta un trabajo real hacia unos miles de ASIN y todo se desmorona: CAPTCHAs, páginas de “Sorry, something went wrong”, bloqueos de IP, precios que cambian silenciosamente según el país desde el que llegó tu petición, y un diseño de página que se ve diferente según el vendedor, el buy box y si el artículo es una variación.
Esta guía repasa por qué Amazon es difícil, qué desencadena realmente un bloqueo y cómo construir un scraper que siga funcionando cuando lo escalas de diez páginas a cientos de miles. Al final hay cifras reales de una prueba de estrés que hicimos contra Amazon a través de ScrapeUnblocker.
Por qué Amazon es difícil de scrapear
Amazon no depende de un único proveedor anti-bot. Ejecuta su propio stack de detección, y lo hace de forma agresiva. Hay varias cosas que lo hacen más difícil que un sitio de e-commerce cualquiera:
- Detección de ritmo y patrones. Si golpeas las páginas de producto demasiado rápido, o con un ritmo demasiado regular, desde la misma dirección, te limitan o te sirven un CAPTCHA. El umbral no está publicado y va cambiando.
- Reputación de IP. Las peticiones desde rangos de IP de centros de datos se tratan con sospecha de inmediato. Una dirección residencial limpia se comporta de forma muy distinta a un bloque de AWS o Hetzner.
- Fingerprinting del navegador. Amazon inspecciona los fingerprints TLS, el orden de las cabeceras, las cookies y la ejecución de JavaScript. Un cliente HTTP pelado que no ejecuta JavaScript es fácil de detectar.
- Contenido dependiente de la geolocalización. El precio, la disponibilidad, la moneda, las estimaciones de entrega e incluso qué vendedor gana el buy box cambian con la ubicación del comprador. Scrapea
amazon.comdesde una IP europea y las cifras no son las que ve un comprador estadounidense. - Variación de diseño. La misma plantilla de página se renderiza de forma distinta para un libro, una ficha de moda cargada de variaciones y un artículo del marketplace de terceros. Un selector que funciona en un ASIN devuelve silenciosamente nada en el siguiente.
Cualquiera de estos por separado es manejable. Es la combinación lo que hace que un scraper ingenuo parezca funcionar en las pruebas y luego se hunda en producción.
Qué es lo que realmente hace que te bloqueen
Cuando la gente dice “Amazon me bloqueó”, casi siempre es por una de estas razones:
- IPs de centros de datos. La señal más grande de todas. Si tus peticiones vienen de un proveedor de nube, ya estás marcado antes incluso de que la página cargue.
- Ningún navegador de verdad. Descargar HTML en bruto sin ejecutar JavaScript activa las comprobaciones de fingerprint y te deja con páginas medio renderizadas.
- Demasiada concurrencia desde una sola identidad. Cincuenta peticiones en paralelo por una única IP no es cómo compra un humano.
- Reutilizar sesiones y cookies. Arrastrar el mismo tarro de cookies a través de miles de peticiones construye un perfil que tiene una forma trivialmente robótica.
- Ignorar la geolocalización. Rebotar entre países en la misma sesión, o scrapear un mercado desde la región equivocada, produce datos inconsistentes y un escrutinio extra.
La solución para todos ellos es la misma idea: hacer que cada petición parezca un humano distinto y plausible en una conexión residencial, ejecutando un navegador real, desde una ubicación que coincida con el mercado que estás scrapeando.
Construir un scraper que sobreviva a escala
Puedes montar esto tú mismo. Requiere cuatro piezas móviles, y cada una es un compromiso de mantenimiento:
- Proxies residenciales con rotación. Un pool grande de IPs residenciales, rotadas por petición o por sesión corta, para que ninguna dirección cargue con un volumen sospechoso. Los proxies de centro de datos no dan la talla en Amazon.
- Un navegador real con un fingerprint aleatorizado. Chrome headless o similar, con ejecución de JavaScript, cabeceras realistas y un fingerprint que cambie entre peticiones. Esto es lo que supera los retos y renderiza la página completa.
- Segmentación geográfica. Fija cada petición al país cuyo mercado quieres, para que los precios y la disponibilidad sean los que ven los compradores reales de ese mercado.
- Reintentos y backoff. Amazon sirve ocasionalmente un error blando incluso al tráfico legítimo. Un scraper que reintenta con una IP nueva y un backoff corto convierte una tasa de error del 0,2% en un conjunto de datos limpio.
El problema es que las cuatro cambian con el tiempo. Amazon actualiza sus defensas, los pools de proxies se queman, los fingerprints se quedan obsoletos, y acabas manteniendo infraestructura de scraping en lugar de usar los datos. Ese es exactamente el trabajo del que se encarga ScrapeUnblocker: tú envías una URL, y él elige la ruta más barata que realmente funciona para ese dominio, incluyendo una ruta dedicada para Amazon con los proxies, el navegador y el renderizado ya ajustados.
Qué extraer de una página de producto de Amazon
Una vez que puedes cargar la página de forma fiable, los campos que vale la pena sacar suelen ser:
- ASIN - el identificador de producto estable, a menudo la clave más limpia para hacer joins.
- Título y marca.
- Precio y moneda - recuerda que estos dependen de la geolocalización.
- Buy box - el precio y el vendedor que ganan el buy box pueden diferir de las demás ofertas de la ficha.
- Disponibilidad y estimación de entrega.
- Valoración y número de reseñas.
- Imágenes y variaciones - tallas, colores y sus ASIN por variación.
- Vendedor - de primera mano (vendido por Amazon) frente al marketplace de terceros.
En lugar de escribir y mantener selectores CSS o XPath para cada variante de diseño, puedes solicitar la salida ya parseada y dejar que el servicio extraiga los campos estructurados por ti. Con ScrapeUnblocker, añadir parsed_data=true devuelve un payload JSON construido a partir del marcado de Schema.org, los datos embebidos de la página y reglas generadas por IA, así que te saltas por completo la frágil capa de selectores.
Ejemplo: una página de producto, JSON limpio
Aquí tienes la petición completa. Apúntala a una URL de producto, segmenta el mercado que te interesa y pide los datos parseados:
curl -X POST "https://api.scrapeunblocker.com/getPageSource?url=https%3A%2F%2Fwww.amazon.com%2Fdp%2FB09B8V1LZ3&parsed_data=true&proxy_country=US" \
-H "X-ScrapeUnblocker-Key: YOUR_API_KEY"
Lo mismo en Python, preparado para un lote de ASIN:
import requests
API_KEY = "YOUR_API_KEY"
ENDPOINT = "https://api.scrapeunblocker.com/getPageSource"
def scrape_product(asin, country="US"):
url = f"https://www.amazon.com/dp/{asin}"
resp = requests.post(
ENDPOINT,
params={"url": url, "parsed_data": "true", "proxy_country": country},
headers={"X-ScrapeUnblocker-Key": API_KEY},
timeout=120,
)
resp.raise_for_status()
return resp.json()["data"] # { page_type, source, data }
for asin in ["B09B8V1LZ3", "B0BSHF7WHW", "B08N5WRWNW"]:
product = scrape_product(asin)
print(asin, product["data"])
Sin lista de proxies, sin navegador que cuidar, sin rotación de fingerprints que mantener. El parámetro proxy_country acepta un código ISO de dos letras y cubre más de 150 países, así que scrapear amazon.de desde Alemania o amazon.co.uk desde Reino Unido es un cambio de un solo campo.
¿Aguanta a escala? Las cifras
Hablar de fiabilidad es barato, así que aquí tienes una prueba real. Ejecutamos una prueba de estrés contra Amazon a través de ScrapeUnblocker: 2.000 peticiones, primero con concurrencia 10 y luego con concurrencia 30, scrapeando páginas de producto una tras otra.
- Tasa de éxito del 99,8%, plana en ambos niveles de concurrencia. Subir de 10 a 30 peticiones en paralelo no la degradó.
- Sin quema de proxies. El éxito se mantuvo estable desde la primera petición hasta la última, sin deriva a medida que avanzaba la ejecución. El pool no se degradaba bajo carga.
- El puñado de fallos fue determinista - los mismos ASIN específicos fallando de forma repetible, no bloqueos aleatorios ni CAPTCHAs colándose. Esa es la firma de una peculiaridad de página en esos artículos, no de un sistema anti-bot alcanzando al scraper.
Ese último punto importa más que la cifra del titular. Un scraper que está siendo detectado poco a poco muestra fallos crecientes y aleatorios a medida que se ejecuta. Un scraper cuyos únicos fallos son los mismos pocos productos cada vez no está siendo bloqueado en absoluto. Simplemente está topándose con fichas de casos límite, que puedes manejar con un reintento o un caso especial.
Errores comunes
- Mezclar mercados en un mismo conjunto de datos. Decide el país por trabajo y cíñete a él, o acabarás comparando precios de EE. UU. con precios del Reino Unido sin darte cuenta.
- Fiarte del primer precio que ves. El buy box, los cupones y el subscribe-and-save pueden desplazar la cifra. Captura el buy box de forma explícita.
- Subir la concurrencia para ahorrar tiempo. Más paralelismo contra una sola identidad es la forma más rápida de que te marquen. Escala añadiendo identidades distintas, no golpeando más fuerte desde una.
- Scrapear cachés obsoletas. Si cacheas de forma agresiva, los precios y el stock quedan desactualizados rápido en Amazon. Ajusta tu cadencia de refresco a lo volátiles que son los datos.
Una nota sobre hacer esto de forma responsable
Scrapea datos públicos de productos, no información personal. Respeta los términos del sitio, mantén tu tasa de peticiones razonable y no intentes extraer nada detrás de un inicio de sesión. Los datos de precios y catálogo en las páginas de producto públicas son lo que la mayoría de los casos de uso legítimos necesitan de todos modos - monitorización competitiva, repricing, investigación de mercado y alimentar modelos - y nada de eso requiere tocar datos privados.
La versión corta
Amazon es difícil porque apila reputación de IP, fingerprinting, contenido dependiente de la geolocalización y variación de diseño unos sobre otros. Vencerlo a escala significa proxies residenciales con rotación, un navegador real, segmentación geográfica y reintentos sensatos - y luego mantener todo eso al día a medida que Amazon cambia. Puedes construir y mantener eso, o puedes apuntar una URL a un servicio que ya lo tiene ajustado y recibir de vuelta HTML limpio o JSON parseado. En cualquier caso, el objetivo es muy scrapeable a escala: 99,8% en 2.000 peticiones, manteniéndose estable bajo carga, no es una casualidad. Es lo que ocurre cuando cada petición parece un comprador real.
Prueba ScrapeUnblocker gratis
Tasa de éxito del 95%+ · desde 0,55 € por cada 1000 llamadas · 500 solicitudes gratis al registrarte.