Hice un Tracker de Precios de Amazon con Decodo
499 segments
Hoy te enseño cómo montar un rastreador
de precios de Amazon con Typesc, pero no
una demo de sacar el precio una vez y ya
está. Vamos a construir un scrapping en
condiciones que consulte el título, el
precio, que guardemos un histórico en
una base de datos, que lo automaticemos
con GHUp actions y que no nos bloqueen
nunca utilizando de codo. Así que sí,
vamos a construir como un tracker de
precios porque claro, hacer scrapping
parece muy fácil. Haces un fetch y ya
está, recuperas los datos y venga a
extraerlos. Y esto funcionar funciona.
Ya ves que como tienes el HTML te pones
aquí a buscar dónde tienes el precio y
ya está. Pero cuando estás con webs más
serias empiezan los problemas. Tienes
problemas de rate limit, o sea, que te
limitan la tasa de veces que puedes
hacer la petición. Te bloquean la IP, el
HTML cambia contenido dinámico, los
capchas y en ese momento precioso en el
que crees que todo funciona, pero que en
realidad te está devolviendo basura.
Pero bueno, que no te preocupes porque
vamos a empezar desde el principio. Que
sepas que todo el código de lo que vas a
ver en este vídeo lo tienes disponible
en este repositorio que en la
descripción te dejo el enlace para que
no te lo pierdas. Y de hecho vamos a ver
cómo hacer un scrapping manual
[carraspeo] rápidamente. Este archivo lo
tienes en el repositorio, pero te lo voy
a explicar paso a paso para que lo
entiendas porque es básico. Tengo una
función principal en este archivo
manualscrapper.ts,
que lo que [resoplido] hace es iterar
sobre los assins. ¿Qué es esto del asin?
No te asustes. Estos son los
identificadores únicos en la store de
Amazon de los productos. ¿Ves? Los he
puesto aquí como variables de entorno
[resoplido] en la tienda de Amazon en
España. Y los assins los sacas de la
URL. Aquí, fíjate, este sería el asin de
este producto, pero seguramente puedes
ir a otro producto y encontrarte esta
URL supergre y luego, ¿dónde está la
SIM? Está justo después. Este es el
identificador que necesitas. Y entonces,
¿qué pasa con todo esto? Porque esto no
sirve absolutamente para nada. De hecho,
esto puedes poner aquí, mira, puedes
poner lo que quieras, puedes poner aquí
lo que quieras. Le das al enter y
funciona perfectamente. ¿Lo sabías?
Bueno, pues ya sabes, le puedes hacer
una broma a tu amigo, pones aquí
PlayStation 5, se pasa la URL y se
asusta. Pero bueno, el tema es que lo
importante de la URL es esto. Sacas ese
identificador, te lo traes para aquí.
Ahora iteramos sobre cada uno de estos
identificadores y llamamos a la función
scrape. Esto, ¿qué es lo que hace? Pues
vamos a hacer una petición sobre la URL
correcta que hemos construido aquí con
el dominio si españa, si es Estados
Unidos o lo que sea y pasándole el
identificador de producto. hacemos un
fetch, que al hacer un fetch es como
hacer esto, ver código fuente de la
página, recuperar todo el contenido y
como es simplemente el HTML lo que
queremos, por eso aquí lo que estamos
haciendo es un response punto text, por
eso no estamos convirtiendo a Jason ni
nada, sino que es un punto text. Cosas
importantes que de headers le estamos
pasando un user agent como si fuésemos
un usuario. Esto cuando hacemos
scrapping manual pues es normal para que
no nos bloqueen. Luego que si hay algún
error hacemos un throughout new error y
aquí lo que hacemos es un console lo log
del HTML para ver qué es lo que nos ha
devuelto. De hecho, si vamos a la
terminal y yo ejecuto npx TSX, esto es
porque estoy utilizando Typescript,
¿vale? Para no tener que compilarlo y
ejecutarlo al vuelo. Ejecutamos este
scrapper, ¿vale? Y fíjate que en cuanto
termine, pues aquí tengo todo el HTML.
Qué graciosos la gente de Amazon
metiendo estas cosas. En ese HTML es que
tenemos que extraer toda la información.
Y para eso, pues, ¿qué hacemos? Pues
utilizar un Regex. Lo que hacemos aquí,
fíjate, para encontrar el título del
producto, pues buscamos el elemento del
productemos
lo de dentro. Y finalmente, una vez que
hemos hecho todas las regs, lo que
hacemos es devolver cada uno de los
campos. Y bueno, así te puedes defender
mientras no cambie el HTML porque si no
lo tienes que cambiar todo y ya está. Lo
peor en realidad es que ya le he dado
unas cuantas veces, pero voy a estar
dándole hasta que me pase esto, ¿vale? Y
es que de vez en cuando Amazon puede
detectar que estás haciendo demasiadas
peticiones y te va a dar un 421, te va a
hacer un rate limit, te va a limitar el
número de peticiones que vas a poder
hacer. Es verdad que si tú de repente le
vuelves a dar, a lo mejor ha pasado
suficiente tiempo, pues puede volver a
funcionar sin ningún problema, ¿vale?
Pero si tú vuelves a ejecutar todo el
rato lo mismo, cada vez el rey limito
y es más fácil que te vuelva a salir.
Vale, aquí vamos a ver. Ahora mismo pues
habrá pasado un minuto y me estará
permitiendo hacerlo. Ahora me va a dejar
fatal. Pues voy a decir, "No, pues ya
no." Ah, no, ahí está. Vale, otra vez.
Fíjate que me ha vuelto a salir este
error. Obviamente si tú haces un
scrapping, pues muy corto, no pasa nada.
Pero para arreglar esto podríamos
utilizar los servicios de Decodo. Decodo
es un servicio que te permite no tener
que enfocarte tanto en la parte de la
infraestructura, sino más en el dato.
¿Por qué? Porque tiene servicios tanto
de proxy como directamente para hacer
scrapping. Como a mí lo que me interesa
es construir un tracker y no pelearme
con esto, pues me viene genial.
Podríamos utilizar los proxis de decodo,
que está muy bien porque te permite
acceder a más de 115 millones de IPs
diferentes en más de 195 localizaciones.
O sea, que sería imposible que Amazon me
pudiera bloquear porque estaría
cambiando todo el rato la IP. ¿Y cómo se
utilizaría? Pues así, aquí tienes este
código de No lo puedes ver.
utilizaríamos el https proxy agent,
donde accedemos con la URL de Decodo.
Tendríamos que acceder también con
nuestro nombre de usuario y password,
pero esto lo que haría es que cuando
hagamos el fetch, esto va a tener este
agente que es el que se va a encargar de
tener una IP diferente y hacer la
petición por nosotros. Pero por encima
de esto también tienen los scrappers que
ya están utilizando toda esta plataforma
y tú no te tienes que pelear y ya están
preparados para sacar información de
cualquier web y con algunas plantillas
específicas para sacar, por ejemplo, de
Amazon. Que sepas que en este vídeo nos
está apoyando Decodo y por eso tengo en
la descripción un enlace con una prueba
gratuita para el Webcrapping API y que
también te da un 10% de descuento por si
te ha gustado el servicio y quieres
seguir utilizándolo en tus próximos
proyectos. En este caso le vamos a dar a
start free y ves, yo ya tengo aquí el
webscrapping API. Podemos buscar aquí,
vamos a ir al API Playground. Fíjate que
aquí tenemos el web scrapping más
general, pero podemos ponerlo en Amazon.
Amazon Product. Aquí le vamos a poner
pues justamente esta ID de aquí. Podemos
desactivar el JavaScript rendering, que
es interesante, pero en este caso lo que
va a hacer es que tarde más si
necesariamente. Le decimos que el output
es JSON. Le indicamos que la tienda es
la española. Importante. Podemos aquí
cambiar más cosas, pero bueno, no es
importante. Y ahora simplemente vamos a
enviar la petición. Voy a cambiarlo en
Note para que veamos aquí cómo es la
API. Le voy a enviar la petición y en 3
segundos tenemos toda la información.
Fíjate que tenemos aquí, pues yo que sé,
los bullet points, la categoría, la caja
de compra. Aquí tendríamos toda la
información. O sea, es que tenemos mucha
más información de la que parecía antes,
¿eh? Porque es que nos ha convertido
toda la página web a un Jason de, por
ejemplo, la descripción tenemos, o sea,
no hemos tenido que pelearnos con
absolutamente nada. Y aquí tenemos esta
información, todas las imágenes, también
tenemos el precio, tenemos también por
aquí todos los detalles, el nombre del
producto, bueno, una pasada, tenemos
aquí un montón de información, rating,
tenemos es que hasta el breakdown, las
reviews, nos ha sacado un montón de
información. Esto obviamente se puede
personalizar para que nos devuelva más o
menos información, pero bueno, cuanta
más información tengamos pues mucho
mejor. Ahora, volviendo a la petición,
fíjate aquí que nos podemos copiar todo
esto. Aquí está mi token. No te lo
copies, utiliza el tuyo, que te he
dejado el enlace para que consigas el
tuyo. Pero bueno, nos podemos copiar
todo este código y vamos a volver a mi
proyecto. Antes hemos visto el manual
scrapper para hacerlo manualmente
haciendo un fetch a saco. Ahora voy a ir
al archivo scrapper. TS. Y fíjate que
aquí tengo el método Scrappe Product.
Vale, pues lo que vamos a hacer aquí es
pegar lo que había copiado. Aquí, ojo
que te sale el token, no me lo robes.
Entonces, para el token, yo lo voy a
sacar de la variable de entorno. Tengo
esta función get decodo out, que es la
que voy a utilizar aquí, y directamente
voy a ir a las variables de entorno y
voy a rellenar este decodo out token.
Para eso volvemos al dashboard de decodo
y nos tenemos que copiar este basic
authentication token. Le damos aquí a
copiar. Volvemos por aquí. Nos vemos a
las variables de entorno. Ahora mírame a
los ojos. Mírame a los ojos. No mires
esto. No mires. Ya está. Ahora ya
podemos volver por aquí. Entonces la
respuesta, fíjate una cosita importante,
la query le tenemos que pasar el así, el
assín que nos lleva por parámetro. Y
esta respuesta vamos a decirle que si no
está bien la respuesta vamos a enviar el
error, ¿vale? Vamos a quitar esta línea
aquí del catch porque no tiene sentido.
Ya estamos comprobando aquí el error.
Luego aquí tenemos que transformar la
respuesta para recuperar los datos que
ya antes hemos visto que era un objeto
un poco complejo. Data. resols, la
primera el primer elemento de resols,
luego el contenido, luego más resols y
finalmente vamos a poder mapear todos
los datos. Aquí hago alguna
transformación para tener el precio como
si fuese un número. Lo mismo con la
puntuación. Entonces, hacemos algunas
transformaciones y con esto ya
deberíamos tener nuestro scrapper sin
tener que preocuparnos de ray limit, de
capcha ni nada. Ahora vamos a probarlo.
Voy a volver a la terminal y voy a
ejecutar este script de aquí, pnpm run
track proxy, que lo que hace es ejecutar
este scrapper de aquí y vamos a ver si
funciona correctamente. ¿Ves? Ahora
mismo está utilizando el proxy de
Decodo, utilizando todo esto y ya
tenemos aquí toda la información sin
ningún tipo de problema, el precio,
rating, reviews, el stock URL y cuando
ha hecho el scrapping. No ha tardado
nada, fíjate. Y lo bueno es que esto sí
que yo puedo estar volviendo a darle
otra vez más, que no vamos a tener
problemas de rate limitarnos
de los elementos HTML ni nada,
directamente nos está sacando la
información sin que tengamos que
nosotros tener una preocupación si
escala o no escala. Acuérdate que tengo
un enlace para que pruebes todo esto, mi
enlace exclusivo para ti. Ahora que ya
tenemos todo esto, una cosa que me
gustaría hacer es ver si podemos ver el
histórico. Para eso, yo lo que estoy
haciendo aquí en el proxy scrapper,
fíjate que ahora mismo, pues nada, está
recuperando los assins, estoy llamando
este scrapping manual, pues lo que vamos
a hacer es iniciar sesión con una base
de datos. Yo voy a utilizar Turso, no sé
si lo conocéis, pero está bastante bien.
Una base de datos que podemos poner en
la nube. Voy a iniciar sesión con GitHub
y voy a iniciar en una base de datos
donde pueda guardar toda esta
información. Ya tengo la base de datos
aquí, Amazon Tracking. Pues una vez que
estamos aquí tenemos la información para
conectarnos, el database URL, que lo
vamos a poner en la variable de entorno.
Como no te voy a enseñar la variable de
entorno, lo que sí que puedes ver en el
example, ¿vale? Fíjate que tenemos el
turso database URL y el turso out token.
Pues estas son las dos cosas que tienes
que rellenar. El token lo vas a sacar
aquí. Le das a create token y te va a
crear el token según como lo digas. Le
vamos a decir que sea de lectura y
escritura y que nunca expire. Y cuando
le damos a create token, pues tenemos
aquí la información. Esto sería la URL y
esto sería el token que no aparece
completo, pero ya me va bien que no
aparezca completo. Entonces, mientras me
miras a los ojos, voy a estar rellenando
la información con el token, que no se
me escape nada. Y ya he pasado toda la
información, así que ya lo tengo las
variables de entorno. Lo único que me
hace falta ahora sería importar aquí una
forma de iniciar la base de datos. Aquí
tengo un esquema donde tengo toda la
tabla y toda la información, los índices
que tenemos que utilizar y también
tendía aquí las queries, fíjate aquí las
queries. Tengo aquí las queries, es safe
snapshot para recuperar todos los
snapshots. Esto es básicamente para
hacer el histórico. Así que vamos a
hacer un import. Vamos a hacer el safe
snapshot y este safe snapshot vamos a
utilizarlo aquí dentro, ¿vale? Primero
aquí importante, vamos a inicializar la
base de datos. Vale, aquí me ha
importado algo, ¿no? Vale, perfecto. Y
aquí dentro, una vez que tenemos la
información, vamos a hacer el save
snapshot, ¿vale? Para guardar esta
información en nuestra base de datos.
Ahora que hemos hecho esto, vamos a
ejecutar otra vez a ver si funciona
correctamente. Está solicitando la
información adecodo. Estamos haciendo el
crowling. Ha guardado en la base de
datos este snapshot y al volver a
nuestra base de datos podemos ir a edit
data y ver pues todo el histórico y
deberíamos ver lo que ha ocurrido hoy.
Si compartimos aquí, fíjate, hoy es 30
de abril y ya tenemos los datos de hoy.
Así que perfecto. ¿Cómo podemos ver este
histórico? Pues simplemente levantando
el entorno de desarrollo. Yo lo he
dejado aquí en el puerto 4322.
Y fíjate qué gráfica más bonita. Tenemos
los dos elementos con su título, sus
precios y todo. Y podemos ver la
evolución de los precios de cada uno. Un
elemento. Tampoco que hayan cambiado
mucho. Ha bajado un pelín la memoria
RAM. Mira, ha bajado un poquito. Ha
bajado, ¿cuánto? 5 € han bajado 2 € y
luego esta sí que parece ser que ha
bajado de 416 a 413,99.
Bueno, algo es algo, algo es algo. Pero
bueno, aquí podéis ver la evolución de
precios donde cada día ha hecho pues
este scrapping, se ha quedado la
información, le ha guardado la base de
datos y ya tenemos el histórico. Y ahora
la pregunta del millón, ¿cómo podemos
automatizar esto de forma que todos los
días a la misma hora podamos recuperar
el precio y así tener el histórico, pues
vamos a crear una Gighub action y es que
tenemos aquí este flujo de trabajo, un
Wordflow, que lo que hacemos es que
funciona en schedule, lo tenemos aquí
con un Chrome Job que siempre a las 7 de
la mañana se va a ejecutar y si no
también lo podemos ejecutar manualmente.
Para esto funciona este Wordflow
Dispatch. ¿Qué estamos haciendo aquí?
Tenemos diferentes pasos. Va a funcionar
en la última versión de Ubuntu. Lo que
hacemos es los pasos, el checkout del
repo para recuperarlo. Vamos a hacer un
setup de PNPM para poder instalar las
dependencias. Setup de NOJS con la
versión 22. Instalamos las dependencias
y leemos todas las variables de entorno
que necesitamos para que funcione y
ejecutamos el script pnpm track proxy.
Ahora, una vez que tenemos esto, vámonos
a nuestro repositorio. Fíjate que yo lo
he ejecutado en realidad más veces, pero
lo he ido eliminando. Y lo que puedo
hacer aquí es darle en esta action le
podría dar aquí a rank workflow y
manualmente ejecutarlo. Lo que va a
pasar es que va a funcionar todos los
días a las 7 de la mañana, pero lo voy a
hacer ahora manualmente. Puedo entrar
para ver cómo va ejecutándose paso a
paso. Ya ha hecho el checkout del repo.
Está también haciendo el setup de no GS,
instalando las dependencias, ejecutando
el tracker. Ahora está llamando a los
servicios de decodo con el proxy sin
problemas ni capcha ni nada. Re limit,
adiós. Automáticamente está rotando las
IPS para ti. Y fíjate que ya ha
terminado. ¿Cuánto ha tardado? Pues
habrá tardado unos 10 segundos, 12
máximo, 37, va, 25, perdón. Ha tardado
25 segundos, pero lo que es el tracker
en realidad ha tardado 12 segundos. Y
para asegurarnos que esto está
funcionando, pues fíjate que aquí
podríamos resetear esto y ver que aquí,
fíjate que ahora tenemos también del 30
de abril, que es hoy, tenemos más. ¿Por
qué? Porque justamente ahora los ha
añadido. Ha añadido a la hora que
estamos ahora, pues ha añadido nuevos. Y
aquí, aunque no se va a notar mucho si
refresco, podríamos ver que tenemos aquí
más de un punto. De hecho, fíjate que no
es redondo como este. ¿Por qué? Porque
como es el mismo día, pues tenemos más
de un punto ahí que nos da el precio. No
es lo ideal normalmente tener más de un
punto en el mismo día porque no es muy
útil, pero al menos sabemos que
funcionar funciona. Así que todo esto lo
tienes totalmente de código abierto, se
llama scrapping Amazon Prices para que
veas cómo lo he hecho desde cero, para
que veas cómo funciona y que además lo
puedas hacer funcionar una vez que le
pasas tus variables de entorno. que te
acuerdes que estoy utilizando los
servicios de decodo y que te dejo en la
descripción mi enlace donde puedes
conseguir un 10% de descuento en sus
servicios por si te ha gustado y lo
quieres utilizar más adelante. Fíjate
que aquí te dice el precio y que todo lo
que he ejecutado me ha salido por 2
céntimos de dólar. Imagínate, además, no
tienes que poner tarjeta de crédito ni
nada, lo puedes probar y te va a
encantar. O sea, ya puedes probar desde
el principio sin ningún tipo de problema
y ya ves que es muy fácil y es que hay
un montón de templates diferentes para
YouTube, para TikTok, para Reddit, para
lo que tú quieras. Y lo mejor es que
tienes también el servicio de proxis,
que lo tienes aquí por si quieres hacer
una rotación automática de IPS, también
lo puedes hacer. Espero que os haya
gustado este vídeo, este pedazo de
tutorial, porque me parece que es muy
interesante que muy pocas veces se
utiliza este tipo de técnica de cómo
utilizar un proxy, cómo hacer un
scrapping mucho más avanzado. Además,
ten un histórico que seguramente muchas
veces has visto, "Oye, ¿cómo hará esto?"
pues lo hacen así, no tiene mucha más
historia y además que lo hemos hecho de
código abierto. Si te gusta este tipo de
contenido y si te ha gustado el servicio
de Decodo, que muy poca gente lo conoce
y que la verdad es que está muy genial,
pues deja tu like si te gusta este tipo
de contenido, me ayudas un montón
dejando tu like porque luego me dicen
que no programo, pero es que cuando
programo pues la gente no deja su like.
Pues deja un like, pon un comentario,
dime qué te ha parecido y si lo
reventamos, yo que sé, si llegamos a los
5,000 likes, le voy a decir a Decodo que
hacemos una segunda parte para el tema
de los proxis, a ver qué os parece.
Vale, espero que lo hayáis disfrutado
mucho. Nos vemos. Ciao.
[música]
Ask follow-up questions or revisit key timestamps.
Este video es una guía práctica sobre cómo construir un rastreador de precios de Amazon profesional utilizando TypeScript. El autor explica los desafíos comunes del web scraping, como los bloqueos de IP y el rate limiting, y cómo solucionarlos utilizando el servicio de Decodo para la rotación de proxies y la obtención de datos estructurados. Además, muestra cómo persistir los datos en una base de datos (Turso) para mantener un histórico de precios y automatizar todo el proceso mediante GitHub Actions.
Videos recently processed by our community