Marco Cippitelli

ADIE: ¿Qué tal el web scraping declarativo?

Tras más de media década de experiencia en web scraping, no pude evitar preguntarme si no existía una forma más limpia de extraer datos de la web, y esto es lo que se me ocurrió.

ADIE Screenshot

Visión general

Agnostic Data Ingestion Engine (ADIE) es un motor de ingesta de datos y web scraping declarativo de alto rendimiento escrito en Rust. Está diseñado específicamente para la ingesta de datos públicos y abiertos, sirviendo como una alternativa robusta a nivel de sistema frente a las rutinas imperativas ad-hoc, pesadas y frágiles.

ADIE no es una herramienta de automatización de navegadores para simular interacciones de usuario o gestionar sesiones autenticadas. En su lugar, es un motor backend-first diseñado para gestionar todo el ciclo de vida de la extracción de datos públicos —desde la obtención asíncrona hasta la persistencia estructurada— dando prioridad a la estabilidad del sistema, el control de concurrencia y la observabilidad.

Características clave

Concurrencia y rendimiento

  • Runtime asíncrono: Construido sobre Tokio para I/O no bloqueante y una programación de tareas eficiente.
  • Gestión de recursos: Implementa tokio::sync::Semaphore para la limitación de frecuencia a nivel de dominio, garantizando una extracción respetuosa y evitando el agotamiento de recursos.
  • Seguridad de hilos (Thread Safety): Utiliza las primitivas Arc y Mutex para mantener la integridad de los datos en hilos de ejecución concurrente.

Pipeline de datos

  • Extracción: Motor declarativo diseñado para gestionar estructuras XML/HTML simples, sitios web hidratados con JavaScript y respuestas de API.
  • Transformación: Mapeo de datos fuertemente tipado utilizando el sistema de structs de Rust para garantizar la consistencia del esquema.
  • Persistencia: Integración de almacenamiento modular con SQLite, MongoDB, MySQL y PostgreSQL para una ingesta de datos flexible y de alto volumen.

Observabilidad y TUI

  • Monitoreo en tiempo real: TUI (Terminal User Interface) personalizada para realizar el seguimiento del estado del motor, los ciclos de ejecución y las métricas de salud del sistema.
  • Registro estructurado (Logging): Sistema de registro segmentado para una depuración granular de procesos concurrentes.

Limitaciones

  • La implementación actual no cuenta con bloqueo de sistemas anti-bot, lo cual no es un detalle menor. Sin embargo, dada la arquitectura del sistema, están abiertas las puertas para incorporar un servicio de terceros en la capa de red para hacerle frente a sistemas como Cloudflare o similares.

Entorno y stack

  • Lenguaje: Rust (Edición 2024).
  • Sistema operativo: Desarrollado y optimizado actualmente para Debian GNU/Linux 13 (Trixie).
  • Bases de datos soportadas: SQLite, MySQL, PostgreSQL, MongoDB.

Principios de desarrollo

  • Soberanía: Diseñada como una herramienta propietaria para mantener un control total sobre la lógica de extracción y el ciclo de vida de los datos.
  • Resiliencia: Enfocada en un tiempo de actividad (uptime) a largo plazo y una gestión defensiva de errores para lidiar con la volatilidad de los sitios web de destino.
  • Eficiencia: Huella de recursos mínima en comparación con herramientas de automatización basadas en navegador como Puppeteer o Selenium.

ADIE sugiere una alternativa al web scraping tradicional: pasar de escribir código de extracción complejo a escribir configuraciones sencillas. Al utilizar un lenguaje específico de dominio (DSL) en YAML legible por humanos, permite definir qué datos recolectar, desacoplando completamente tu esquema de datos de las mecánicas subyacentes de red y análisis sintáctico.

Vos te centrás por completo en la estructura de los datos públicos; ADIE se encarga de la ejecución de forma segura y a escala.