Construye un rastreador de precios de Amazon en Python (la forma honesta)
Construye un rastreador de precios funcional con Python y Selenium, con pruebas reales de qué es lo que realmente te bloquea.
Puntos clave
- Las páginas de productos rara vez bloquean scrapers; en las pruebas, 150 solicitudes pasaron sin bloqueos.
- Las páginas de búsqueda de Amazon se bloquean en la primera solicitud, incluso con un proxy.
- El bloqueo se trata más de no ser un navegador real que de tu dirección IP.
- Un proxy dirigido por país es necesario para fijar precios locales correctos, no solo para evitar bloqueos.
Pensé que había encontrado la PlayStation 5 más barata de internet.
Mi rastreador de precios mostró 74,00 $ junto a una PS5, pero si algo parece demasiado bueno para ser verdad en internet, casi siempre lo es. Esos 74 $ no eran la consola. Era el scraper capturando el elemento equivocado, y es exactamente el tipo de bug silencioso que hace que la mayoría de tutoriales de «rastreador de precios de Amazon» sean discretamente inútiles.
Así que en lugar de simplemente publicar cincuenta líneas de Python y dar por terminado, que es lo que casi todas las guías hacen, probé la cosa correctamente. Lo ejecuté contra Amazon a volumen, medí exactamente qué se bloquea y qué no, y arreglé los bugs que los tutoriales nunca mencionan. Los resultados fueron genuinamente sorprendentes: un scraper básico golpeó una página de producto 150 veces sin un solo bloqueo, pero se cerró en la primera solicitud a una página de búsqueda.
Esta guía es el rastreador funcional más todo lo que las pruebas revelaron, incluyendo un truco de Selenium que vale la pena conocer incluso si ya has construido scrapers: maneja una ventana real de Chrome, visualmente, así que ves cómo la página se carga y se raspa en tiempo real.
¿Amazon realmente te bloqueará?
Cada tutorial te advierte que Amazon bloqueará tu scraper instantáneamente. Así que lo probé, y los resultados genuinamente me confundieron.
Apunté un scraper básico, sin pretensiones, a una página de producto PlayStation 5 y simplemente lo dejé golpear. Una solicitud, dos, diez, cincuenta, seguí esperando el muro. Nunca llegó. La cosa disparó 150 solicitudes a la misma página y cada una volvió «ok». No podía creer lo abierto que era.
Lo fue. Las páginas de producto, resulta, apenas se preocupan. Luego apunté el mismo scraper a una página de resultados de búsqueda, y murió en la primera solicitud. No la décima, no la quincuagésima. La primera. Un 503 de inmediato.
Los resultados de búsqueda son donde sucede la recopilación de datos real, así que es donde Amazon concentra sus defensas. ¿Páginas de productos individuales? Completamente abiertas.
Aquí está lo que probé y qué sucedió:
Página de producto, scraper básico: 150 solicitudes, cero bloqueos
Página de búsqueda, scraper básico: bloqueado en la solicitud n.º 1 (503)
Página de búsqueda, mejores encabezados: aún bloqueado en la solicitud n.º 1
Página de búsqueda, encabezados + proxy residencial: aún bloqueado en la solicitud n.º 1
Página de búsqueda, navegador real: funcionó, 16 resultados
Página de búsqueda, navegador + proxy de EE. UU.: funcionó, 22 resultados
La parte que más me sorprendió: lanzar un proxy residencial a la página de búsqueda no ayudó en absoluto. Aún bloqueado, primera solicitud. El bloqueo nunca fue por mi dirección IP, sino por el hecho de que no era un navegador real. En el momento en que cargué la misma página de búsqueda en un navegador real en lugar de un script sin procesar, funcionó:
Construyendo el rastreador
Vamos a construir la cosa. Todo el rastreador son aproximadamente 50 líneas de Python. Necesitas Python 3 y Google Chrome instalados, luego un comando para las librerías:
pip install selenium requests matplotlib
Apuntándolo a un producto
Cada producto de Amazon tiene un ID llamado ASIN, el código de 10 caracteres en la URL justo después de /dp/. Por ejemplo, en amazon.com/dp/B0F1J12R6N, el ASIN es B0F1J12R6N. Eso es todo lo que el rastreador necesita para encontrar un producto.
Por qué requests no es suficiente
La forma obvia de raspar una página es la librería requests de Python: una línea, obtener el HTML, listo. Y para una página de producto, incluso devuelve un 200 OK. Pero aquí está la trampa en la que caí: un 200 no significa que obtuviste los datos. Amazon construye el precio en la página con JavaScript, y requests no ejecuta JavaScript. Así que obtienes una página, pero el precio no está en ella.
Por eso este rastreador usa Selenium en su lugar. Selenium maneja un navegador Chrome real: abre la página, ejecuta JavaScript, y te deja leer el resultado completamente renderizado. La primera vez que lo ejecutas, Chrome se abre por su cuenta con un banner que dice «Chrome está siendo controlado por software de prueba automática», y lo ves funcionar en tiempo real.
Raspando el precio (y el bug que todos envían)
Aquí es donde la mayoría de tutoriales se rompen discretamente. El enfoque común agarra el elemento .a-price y lee su texto. El problema: Amazon pone el precio en ese elemento dos veces, una vez visible, una vez para lectores de pantalla, así que obtienes un desordenado 449,00 $449,00 $ en lugar de un número limpio.
La solución es dirigirse a la copia limpia y única del precio dentro de la caja de compra y leerlo cuidadosamente, verificando el precio de la caja de compra principal primero para que no agarres accidentalmente el precio de un accesorio, que es exactamente cómo terminé con ese «PS5 de 74 $». Los selectores exactos están en el código en GitHub.
Una vez que se dirige al elemento correcto, el precio vuelve limpio:
Almacenando el historial y graficándolo
Un rastreador de precios solo es útil si recuerda. El script guarda cada lectura en un archivo, indexado por producto, almacenando el precio como un número real más su moneda, no una cadena «54,00 $». Eso importa: números que puedes graficar, comparar y encontrar el más bajo; cadenas que no. Dejado solo, el script verifica una vez y se detiene; añade una opción de bucle y recomprueba según una programación, construyendo historial con el tiempo que un segundo script pequeño convierte en un gráfico de precio a lo largo del tiempo.
El bug que casi me cuesta: podrías estar raspando el país equivocado
¿Recuerdas esa PlayStation de 74 $? Fue la primera señal de que algo no estaba bien. La segunda fue peor, porque fue más difícil de detectar.
Cuando ejecuté el rastreador por primera vez sin un proxy, Amazon no solo me dio precios extraños, para algunos productos ni siquiera me dio un precio real, solo un aviso de «este artículo no puede ser enviado a tu ubicación». El rastreador no tenía nada útil que registrar.
Así que lo enruté a través de un proxy para parecer un comprador estadounidense. El precio volvió en euros. Al principio asumí que el proxy no había funcionado en absoluto. Luego noté que la página decía «Enviar a Irlanda», y lo entendí: el proxy funcionó bien, simplemente me había dejado en una IP irlandesa. Idea correcta, país equivocado.
La solución es un proxy residencial fijado al país que realmente te importa. Una vez que fijé el mío a EE. UU., el rastreador extrajo el precio correcto, 54,00 $, en dólares, cada vez.
Y ese anclaje de país no es algo opcional, es el punto esencial. Digamos que estás rastreando precios de competidores para decidir qué cobrar en un mercado dado. Esos números solo tienen sentido si son los precios que ese mercado realmente ve. El mismo producto podría ser 449 $ en EE. UU. y 499 € en Irlanda. Si tu scraper silenciosamente devuelve el precio irlandés, estás tomando decisiones para un mercado basado en datos de otro mercado, y porque se ve válido, nadie lo detecta.
Así que un proxy aquí no se trata de colarse para evitar bloqueos, mis pruebas mostraron que las páginas de productos apenas bloquean de todas formas. Se trata de asegurarse de que los datos que recopilas sean los datos correctos.
Si quieres datos de precios anclados a un país específico, los proxies residenciales de FlashProxy te permiten apuntar a cualquier ubicación, así que siempre estás recopilando los precios que ese mercado realmente ve.
Entonces… ¿esto debería haber sido más difícil?
Aquí está mi conclusión honesta: si alguna vez necesitas raspar precios de una página web, no tienes que leer cien blogs, ver un montón de videos de YouTube, o seguir molestando a una IA hasta que finalmente lo haga bien. Simplemente puedes hacerlo tú mismo. Es extremadamente fácil, y honestamente, es casi preocupante lo fácil que es.
Antes de empezar, asumí que esto sería difícil. Genuinamente estaba nervioso ejecutando las primeras pruebas sin un proxy conectado, supuse que sería bloqueado para siempre, o limitado en velocidad hasta el olvido. Esperaba consecuencias.
Nada sucedió. Literalmente nada. 150 solicitudes a una página de producto, sin proxy, sin bloqueos, sin baneo, sin correo electrónico airado. El muro en el que me estaba preparando principalmente no estaba allí, y en el único lugar donde sí estaba (páginas de búsqueda), un navegador real lo atravesó sin problema.
Así que si lo único que te detiene de construir uno de estos era la suposición de que es difícil o arriesgado: no lo es. Constrúyelo. Solo mantenlo razonable, rastrea precios públicos, no bombardees el sitio, y respeta sus términos. Pero el miedo, mayormente está en tu cabeza, igual que estaba en la mía.
El código completo
El proyecto completo, el rastreador, el asistente de proxy, los gráficos, y los scripts de prueba, es de código abierto: amazon-price-tracker-python en GitHub. Clónalo y ejecútalo, o lee exactamente cómo funciona.


