Saltar al contenido

GamesScraping

games-scraping.mrubi.dev
Captura de GamesScraping

El reto principal

Un scraper de cinco tiendas se rompe constantemente: basta con que una cambie una clase CSS para que su extractor devuelva vacío. Mantener a mano cinco juegos de selectores es una tarea sin final, y el usuario solo ve que "faltan precios" sin saber por qué.

Problema concreto

Cuando un extractor devuelve vacío, en vez de fallar en silencio el sistema manda el fragmento de HTML a un modelo de OpenAI y le pide el selector correcto; si el selector propuesto extrae un precio válido, se guarda y sustituye al anterior. Fue clave acotar el gasto: la reparación solo se dispara ante un fallo real, nunca en cada consulta, y el resultado se cachea una hora para no volver a pagar por lo mismo.

Qué aprendí

Un modelo de lenguaje encaja bien justo donde el código determinista se rompe: entender HTML que cambia sin avisar. La disciplina está en usarlo como último recurso y validar siempre su respuesta antes de confiar en ella.

  • Las cinco tiendas se consultan en paralelo con Promise.allSettled: una que caiga no tumba al resto
  • Toda llamada a un modelo tiene que estar acotada por caché y por condición de disparo
  • Nunca confiar en la salida del modelo: se valida contra el HTML real antes de guardarla
Tecnologías
  • Node.js
  • Puppeteer
  • OpenAI
  • Caché
  • VPS