2 puntos por GN⁺ 2024-08-07 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-08-07
Opiniones de Hacker News
  • Comparte su experiencia con un problema similar

    • Opera un sitio web de comparación de precios de lentes en 30 países
    • Los cambios en el HTML de los sitios web son un gran problema
    • Hacer el matching de productos entre más de 100 sitios web fue el gran obstáculo inicial
    • La mayor parte se puede resolver con expresiones regulares, pero se necesita mapeo manual
    • Construir el scraper y la infraestructura es relativamente fácil; el mantenimiento es lo difícil
    • Cuando desaparece un producto, es difícil identificar la causa del error
    • Es un proyecto entretenido, pero desafiante y con problemas molestos por resolver
  • Está trabajando en un proyecto similar en Nueva Zelanda

    • Usa Playwright y Typescript, y guarda archivos Parquet en almacenamiento en la nube
    • Solo recopila datos y todavía no los muestra
    • La tarea principal es evadir servicios de proxy inverso como Akamai y Cloudflare
    • En Nueva Zelanda hay al menos 3 startups haciendo lo mismo
    • La inflación impulsa mucha innovación
    • Ha observado patrones en los que los supermercados hacen los precios más complejos
  • Creó un sitio web similar y recibió mucha atención

    • Usa un servidor de Linode con 2GB de RAM, 5 IPv4 y 1000 IPv6
    • Hace scraping de todos los productos con intervalos de hasta 40 minutos
    • Usa curl impersonate y scraping de JSON
    • El 90% del mercado entrega precios mediante llamadas Ajax, y para el 10% restante usa expresiones regulares
    • Sitio web: economizafloripa.com.br
  • Existe la posibilidad de que las dos principales cadenas de supermercados de Australia formen un duopolio mediante algoritmos de IA para análisis de precios

    • Los algoritmos de IA podrían colaborar para maximizar ganancias
    • Esto podría hacerse legalmente con datos públicos de precios, e ilegalmente compartiendo costos de suministro o datos de ganancia por producto
    • Los consumidores terminan pagando ganancias maximizadas
  • Lleva más de 8 años operando en el mercado sueco

    • Sitio web: matspar.se
    • Los clientes pueden comparar productos de todas las principales tiendas online y agregarlos al carrito
    • Después de comparar el precio total, pueden exportar el carrito a la tienda que quieran
    • Hace scraping de más de 30 millones de precios al día
  • Con transparencia de precios, el seguimiento sería más fácil

    • Ejemplo: comparar el precio de la leche de avena entre distintos códigos postales y supermercados
    • Posibilidad de rastrear la "reduflación" (Shrinkflation) (ofrecer menos cantidad al mismo precio)
    • Hace falta verificar no solo el precio, sino también el costo por gramo
  • Cómo hacer cambios sin que el scraper falle

    • Se pueden agregar verificaciones automáticas para que los precios no cambien de forma anormal
    • Ejemplo: evitar que el precio cambie más de 100%, o que la cantidad de productos activos cambie más de 20%
  • Comparte su experiencia siguiendo precios al mudarse a una nueva región

    • Es más fácil comprar barato yendo a dos mercados o grandes tiendas
    • Europa: Aldi/Lidl, EE. UU.: Costco/Trader Joe's
    • Online: CamelCamelCamel/Amazon
    • Comprar directamente al fabricante puede salir más barato
  • Más que el scraping, lo difícil es evadir bloqueos cada vez más sofisticados

    • Hay que rotar constantemente proxies residenciales y evitar patrones de scraping de datos
    • Algunos supermercados ocultan las solicitudes de red
    • También bloquean revisar las solicitudes de red y los datos desde la app móvil
    • Por el costo y el trabajo de desarrollo continuo, concluyó que no vale la pena
  • El problema de que se renderice con JavaScript del lado del cliente

    • Irónicamente, los datos que llenan el sitio se entregan en un formato JSON simple, así que el scraping es más confiable