De Regex a los LLM: Mi viaje extrayendo datos web no estructurados

Intenté construir una herramienta de comparación de precios. Necesitaba datos de productos de docenas de sitios de comercio electrónico.

Cada sitio utilizaba estructuras HTML diferentes. Algunos usaban clases CSS aleatorias. Otros usaban JavaScript para cargar el contenido.

Mi primer plan utilizaba Regex y BeautifulSoup. Funcionó para dos sitios. Luego, todo se rompió. Un sitio cambió su diseño. Otro sitio empezó a usar contenido dinámico. Pasaba más tiempo arreglando scrapers que utilizando los datos.

Después intenté usar un LLM. Envié el HTML sin procesar a una IA y le pedí los datos. Esto también falló. El resultado era inconsistente. La IA alucinaba valores. Mis costes de API aumentaron porque el HTML consume demasiados tokens.

Encontré un punto medio. Ahora utilizo un enfoque híbrido.

Este es mi proceso:

  • Preprocesar el HTML. Elimino scripts, estilos y barras de navegación. Solo conservo el texto visible. Esto mantiene bajos los recuentos de tokens.
  • Usar el modo JSON. Utilizo function calling para obligar al LLM a devolver datos estructurados.
  • Añadir una lógica de reintento. Reintento hasta tres veces si el JSON falla.
  • Cachear resultados. Guardo las extracciones exitosas por URL para evitar costes repetidos.

Regex y BeautifulSoup siguen siendo lo mejor para páginas estáticas y bien estructuradas. Son rápidos y gratuitos.

Los LLM son mejores para sitios desordenados o cambiantes. No son mágicos. Primero debes limpiar tu entrada para ahorrar dinero.

Mi flujo de trabajo actual:

• Usar un parser ligero para sitios fáciles. • Usar un LL