# Método de Scraping 1: Detección Sintáctica Estática 🔍
La **Detección Sintáctica Estática** es la estrategia de raspado de primer nivel en `bgustscraper`. Está diseñada para ser ultrarrápida, de bajo consumo y efectiva en sitios web tradicionales que sirven enlaces de descarga directos en su estructura HTML inicial.
---
## ⚙️ Principio de Funcionamiento
Cuando el orquestador Rust inicia un scraping, evalúa primero las etiquetas HTML devueltas por el navegador o el cliente HTTP. El módulo `extractor.rs` realiza una búsqueda sintáctica sobre el árbol DOM:
1. **Parsea el HTML:** Convierte el código HTML crudo en un árbol DOM consultable.
2. **Filtrado de Elementos:** Escanea todas las etiquetas de hipervínculos (`<a href="...">`) presentes en el documento.
3. **Resolución de URLs Relativas:** Convierte cualquier enlace relativo (ej: `/documentos/tasa.pdf`) en una dirección absoluta válida utilizando el dominio base (ej: `https://example.com/documentos/tasa.pdf`).
4. **Validación de Patrones:** Compara las URLs resultantes contra una lista de extensiones de documentos de interés:
* **Documentos:** `.pdf`, `.doc`, `.docx`
* **Hojas de Cálculo:** `.csv`, `.xls`, `.xlsx`
* **Archivos Comprimidos:** `.zip`, `.rar`, `.tar.gz`
* **Formatos de Intercambio:** `.json`, `.xml`
---
## 🛠️ Código y Archivos Relacionados
* **Implementación Rust:** [extractor.rs](file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/src/extractor.rs)
* Contiene la función principal `find_documents(html: &str, base_url: &str) -> Vec<String>`.
* **Motor HTML Utilizado:** La biblioteca `scraper` de Rust (basada en el motor HTML5 `html5ever`).
---
## ⚡ Flujo de Entrada y Salida
* **Entrada:**
* `html`: String con el HTML parseable de la página.
* `base_url`: String con la URL base de origen para resolver enlaces relativos.
* **Salida:**
* `Vec<String>`: Listado de URLs absolutas deduplicadas que apuntan a descargas directas de archivos.
---
## ⚖️ Ventajas y Desventajas
### Ventajas:
* **Velocidad Exponencial:** Toma fracciones de milisegundo en procesarse una vez obtenido el HTML.
* **Consumo de RAM Mínimo:** No requiere levantar subprocesos de Chromium ni inferencia por IA.
* **Perfecto para Portales de Datos:** Ideal para portales gubernamentales u oficinas de estadística que listan descargas públicas en tablas estáticas.
### Desventajas:
* **Inútil contra Contenidos Dinámicos:** Si los enlaces se generan mediante JavaScript en caliente al hacer clic, o mediante peticiones API de fondo, esta estrategia no encontrará nada.
* **Vulnerable a Bloqueos:** No esquiva retos anti-bot complejos por sí sola (requiere soporte de Playwright/Stealth).