bgustscraper 0.2.0

Advanced semantic scraping engine with AI-driven compliance checks and legal terms validation
Documentation
# Método de Scraping 2: Deep Scan Interactivo (Playwright) 🕵️

Cuando una página web moderna utiliza frameworks como React, Vue, Angular o Svelte, los enlaces de descarga directa de documentos suelen estar ocultos. El documento solo se genera o descarga tras realizar una acción física en la interfaz, como pulsar un botón que invoca una API de fondo. Para este escenario, `bgustscraper` activa automáticamente el **Deep Scan Interactivo**.

---

## ⚙️ Principio de Funcionamiento

El Deep Scan se ejecuta dentro del subproceso controlado por **Stealth Playwright** en Node.js:

1. **Escaneo del DOM Activo:** Se ejecuta una función selectora avanzada en el navegador renderizado.
2. **Detección de Botones e Interactivos:** Identifica elementos clickables (como `<button>`, `<span role="button">`, `<input type="submit">`, `<a class="download">`) que contengan palabras clave asociadas a descargas:
   * `"descargar"`, `"descarga"`, `"descargas"`
   * `"download"`, `"export"`, `"obtener"`, `"pdf"`, `"csv"`, `"xls"`
3. **Simulación de Clic Secuencial:** El motor simula de forma realista el movimiento del mouse y pulsa secuencialmente cada uno de los botones identificados.
4. **Interceptación de Eventos de Descarga:** Playwright captura el evento `page.waitForEvent('download')` de forma paralela para evitar bloqueos:
   * Intercepta la descarga entrante.
   * Guarda el archivo temporalmente.
   * Extrae la URL de descarga original, la ruta del archivo y los metadatos.
5. **Propagación:** Retorna los documentos capturados "en caliente" al orquestador de Rust.

---

## 🛠️ Código y Archivos Relacionados

* **Implementación Node.js (Worker):** [worker/index.js]file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/worker/index.js
  * Contiene la lógica asíncrona de interacción, simulación de clics y escucha de eventos de descarga bajo la bandera `deep_scan: true`.
* **Orquestación en Rust:** [src/main.rs]file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/src/main.rs
  * Invoca `worker.scrape(&url, Some(ScrapeOptions { deep_scan: true, ... }))` si el escaneo sintáctico inicial resulta en cero documentos detectados.

---

## ⚡ Flujo de Entrada y Salida

* **Entrada:**
  * Petición JSON con parámetro `"deep_scan": true` e `"url"` de navegación.
* **Salida:**
  * Estructura JSON que detalla los archivos descargados:
    ```json
    {
      "status": "success",
      "downloaded_files": [
        {
          "filename": "reporte_2026.pdf",
          "url": "https://example.com/api/v1/generate-report?id=123",
          "path": "downloads/reporte_2026.pdf"
        }
      ]
    }
    ```

---

## ⚖️ Ventajas y Desventajas

### Ventajas:
* **Rompe Single Page Applications (SPAs):** Capaz de descargar informes en portales interactivos que no listan archivos de forma estática.
* **Evasión de CAPTCHAs:** Al interactuar físicamente como un humano, reduce los perfiles de comportamiento que delatan a un scraper básico.
* **Automatización Extrema:** Resuelve el proceso laborioso de hacer clics repetitivos manualmente.

### Desventajas:
* **Mayor Consumo:** Requiere un navegador Chromium completo activo en segundo plano, consumiendo significativamente más memoria RAM y CPU.
* **Tiempo de Ejecución:** Es mucho más lento al requerir esperas explícitas de eventos de red y descargas del navegador.