Cómo rastrear precios de supermercados
- En diciembre de 2022, se construyó un sitio web para seguir los cambios de precios de tres grandes supermercados de Grecia.
- Durante el proceso hubo que resolver varios problemas, y se obtuvieron muchas lecciones.
Scraping de sitios con js
- El principal problema eran los sitios web renderizados con JavaScript.
- Se utilizó Playwright para controlar un navegador web de forma programática.
- Playwright es compatible con los navegadores Chromium, Safari y Firefox, y puede usarse con Node, Java, .NET y Python.
- Se escribió código para manejar el scroll infinito y extraer información de productos.
Automatización
- En una M1 MacBook Pro, hacer scraping de todo el supermercado tomaba entre 50 minutos y 2 horas y 30 minutos.
- Era bueno para desarrollo y pruebas, pero se necesitaba una solución más permanente.
¿Usar una laptop vieja?
- Se probó usar una laptop vieja de 2013, pero el rendimiento fue muy decepcionante.
¿Usar la nube?
- AWS era demasiado caro, y Hetzner resultó mucho más barato.
- Se decidió usar un servidor de Hetzner.
¡Usar una laptop vieja y la nube!
- Se automatizó el scraping en un servidor en la nube, y la laptop vieja se usó como servidor de CI.
- Se configuró un pipeline con Concourse y se ejecutó la tarea de scraping todos los días.
Evitar las restricciones de IP
- Debido a reglas de firewall de Akamai, las solicitudes desde direcciones IP no residenciales eran bloqueadas.
- Se usó Tailscale para hacer que las solicitudes parecieran venir desde la IP de casa.
Causas y momentos de los fallos
- El proyecto de scraping se veía afectado por los desarrolladores del sitio web.
- Había dos tipos de fallos: cambios incompatibles y cambios no incompatibles.
- Era importante recibir retroalimentación rápidamente.
Optimización
- Se realizaron varias optimizaciones, como alertas por correo, histéresis, timeouts y configuración de reintentos.
- El rendimiento mejoró usando un servidor más grande y reduciendo la obtención de datos.
Costos
- El costo de usar un servidor en Hetzner era muy bajo.
- Se usó el nivel gratuito de R2 de Cloudflare para reducir los costos de almacenamiento de datos.
Conclusión
- Se explican los componentes principales para construir un pipeline de scraping con el fin de rastrear cambios de precios en supermercados.
Resumen de GN⁺
- Este artículo comparte la experiencia de usar Playwright y servicios en la nube para rastrear cambios de precios en supermercados.
- Explica cómo hacer scraping de sitios web renderizados con JavaScript, además de métodos de automatización y optimización.
- Describe cómo usar Hetzner y Tailscale para reducir costos y evitar restricciones de IP.
- Este artículo puede ser útil para quienes estén interesados en web scraping y automatización.
1 comentarios
Opiniones de Hacker News
Comparte su experiencia con un problema similar
Está trabajando en un proyecto similar en Nueva Zelanda
Creó un sitio web similar y recibió mucha atención
curl impersonatey scraping de JSONExiste la posibilidad de que las dos principales cadenas de supermercados de Australia formen un duopolio mediante algoritmos de IA para análisis de precios
Lleva más de 8 años operando en el mercado sueco
Con transparencia de precios, el seguimiento sería más fácil
Shrinkflation) (ofrecer menos cantidad al mismo precio)Cómo hacer cambios sin que el scraper falle
Comparte su experiencia siguiendo precios al mudarse a una nueva región
Más que el scraping, lo difícil es evadir bloqueos cada vez más sofisticados
El problema de que se renderice con JavaScript del lado del cliente