## https://sploitus.com/exploit?id=0393280B-B063-555C-A9C1-6B4EC1CF3D64
# CyberSec Crawler
Crawler de ciberseguridad multilingüe que recolecta automáticamente noticias, vulnerabilidades, exploits y recursos educativos de las principales fuentes de seguridad informática en inglés y español.
Incluye un **menú interactivo** para facilitar todas las operaciones sin necesidad de recordar comandos.
---
## Tabla de Contenidos
- [Características](#caracteristicas)
- [Fuentes Soportadas](#fuentes-soportadas)
- [Stack Tecnológico](#stack-tecnologico)
- [Estructura del Proyecto](#estructura-del-proyecto)
- [Instalación](#instalacion)
- [Configuración](#configuracion)
- [Uso](#uso)
- [Menú Interactivo (Recomendado)](#menu-interactivo-recomendado)
- [Comandos Directos](#comandos-directos)
- [Arquitectura y Flujo de Datos](#arquitectura-y-flujo-de-datos)
- [Modelo de Datos](#modelo-de-datos)
- [Tests](#tests)
- [Docker](#docker)
- [Consideraciones Técnicas](#consideraciones-tecnicas)
- [Contribuir](#contribuir)
- [Licencia](#licencia)
---
## Características
- 🎮 **Menú interactivo**: Interfaz de terminal navegable para todas las operaciones
- 🌐 **Multilingüe**: Recolecta contenido en inglés y español de fuentes especializadas
- 🕷️ **12 spiders**: Cada fuente tiene su propio spider optimizado para su estructura HTML
- 🧹 **Limpieza automática**: Elimina HTML, scripts y normaliza el texto
- 🏷️ **Clasificación inteligente**: Categoriza artículos por tipo (noticia, vulnerabilidad, herramienta, etc.)
- 🔄 **Deduplicación**: Evita artículos duplicados por hash de contenido y URL
- 💾 **Almacenamiento persistente**: Guarda en SQLite/PostgreSQL con SQLAlchemy
- 📤 **Exportación múltiple**: JSON, CSV y RSS feed
- 🐳 **Dockerizado**: Listo para ejecutar en contenedores
- 📊 **Reportes**: Genera reportes con estadísticas por fuente y categoría
- ⏰ **Ejecución programada**: Script para ejecución diaria automática
---
## Fuentes Soportadas
### Fuentes en Inglés (10)
| Fuente | Spider | Tipo de Contenido |
|--------|--------|-------------------|
| The Hacker News | hackernews | Noticias de seguridad |
| Bleeping Computer | bleepingcomputer | Noticias y análisis |
| Krebs on Security | krebsonsecurity | Investigación |
| Threatpost | threatpost | Noticias de seguridad |
| Dark Reading | darkreading | Noticias y análisis |
| SANS ISC | sans_isc | Threat intelligence |
| CVE Details | cvedetails | Base de datos CVE |
| Exploit Database | exploitdb | Exploits y PoCs |
| Reddit r/netsec | reddit_netsec | Comunidad |
| GitHub Security | github_sec | Repositorios y herramientas |
### Fuentes en Español (2)
| Fuente | Spider | Tipo de Contenido |
|--------|--------|-------------------|
| ElHacker.net | elhackernet | Noticias, tutoriales y cursos |
| ElHacker.info | elhackerinfo | Cursos y recursos educativos |
---
## Stack Tecnológico
| Componente | Tecnología |
|------------|------------|
| Lenguaje | Python 3.11+ |
| Framework de Crawling | Scrapy 2.11+ |
| Base de Datos | SQLite (desarrollo) / PostgreSQL (producción) |
| ORM | SQLAlchemy 2.0+ |
| Procesamiento HTML | BeautifulSoup4 + lxml |
| Exportación | CSV, JSON, RSS (feedgen) |
| Contenedores | Docker + Docker Compose |
| Tests | unittest + mock |
| Logging | logging estándar de Python |
---
## Estructura del Proyecto
```
cybersec-crawler/
config/ # Configuración centralizada
config.yaml # Configuración general
sources.yaml # Definición de fuentes
keywords.yaml # Palabras clave para clasificación
cybersec_crawler/ # Paquete principal
spiders/ # Spiders individuales
base_spider.py # Spider base con funcionalidad común
hackernews_spider.py # The Hacker News
bleeping_spider.py # Bleeping Computer
krebs_spider.py # Krebs on Security
threatpost_spider.py # Threatpost
darkreading_spider.py # Dark Reading
sans_spider.py # SANS ISC
cve_spider.py # CVE Details
exploitdb_spider.py # Exploit Database
reddit_spider.py # Reddit r/netsec
github_spider.py # GitHub Security
elhackernet_spider.py # ElHacker.net
elhackerinfo_spider.py # ElHacker.info
utils/ # Utilidades
text_cleaner.py # Limpieza de texto HTML
classifier.py # Clasificador de artículos
deduplicator.py # Deduplicación de contenido
url_manager.py # Gestión de URLs
exporter.py # Exportación a múltiples formatos
items.py # Modelos de datos (Items)
settings.py # Configuración de Scrapy
pipelines.py # Pipelines de procesamiento
middlewares.py # Middlewares personalizados
scripts/ # Scripts de automatización
menu.py # Menú interactivo (NUEVO)
run_all.py # Ejecuta todos los spiders
run_daily.py # Ejecución diaria (fuentes principales)
generate_report.py # Genera reportes
setup_db.py # Inicializa la base de datos
verify_db.py # Verifica la base de datos
tests/ # Tests unitarios
test_spiders.py # Tests de configuración de spiders
test_pipelines.py # Tests de pipelines
test_classifier.py # Tests del clasificador
test_deduplicator.py # Tests del deduplicador
data/ # Datos persistentes
exports/ # Archivos exportados
logs/ # Logs de ejecución
Dockerfile # Imagen Docker
docker-compose.yml # Orquestación de servicios
requirements.txt # Dependencias de Python
scrapy.cfg # Configuración de Scrapy
.env.example # Variables de entorno (ejemplo)
.gitignore # Archivos ignorados por git
README.md # Este archivo
GUIA_USO.md # Guía de uso detallada
ROADMAP.md # Plan de desarrollo
```
---
## Instalación
### Requisitos Previos
- Python 3.11 o superior
- pip (gestor de paquetes de Python)
- Git (opcional, para clonar el repositorio)
- Docker (opcional, para ejecución en contenedores)
### Instalación Local
```bash
# 1. Clonar el repositorio
git clone https://github.com/tu-usuario/cybersec-crawler.git
cd cybersec-crawler
# 2. Crear entorno virtual
python -m venv venv
# 3. Activar entorno virtual
# En Windows:
venv\Scripts\activate
# En Linux/Mac:
source venv/bin/activate
# 4. Instalar dependencias
pip install -r requirements.txt
# 5. Instalar el paquete en modo desarrollo
pip install -e .
# 6. Configurar variables de entorno
cp .env.example .env
# Editar .env con la configuración deseada
# 7. Inicializar la base de datos
python scripts/setup_db.py
```
### Instalación con Docker
```bash
# Construir y ejecutar con Docker Compose
docker-compose up --build
# O construir la imagen manualmente
docker build -t cybersec-crawler .
docker run -v $(pwd)/data:/app/data -v $(pwd)/logs:/app/logs cybersec-crawler
```
---
## Configuración
### Variables de Entorno (.env)
```env
# Base de datos (SQLite por defecto)
DATABASE_URL=sqlite:///data/cybersec.db
# Para PostgreSQL en producción:
# DATABASE_URL=postgresql://user:password@localhost:5432/cybersec
# Nivel de logging
LOG_LEVEL=INFO
# Configuración de proxies (opcional)
# PROXY_URL=http://proxy:8080
# User-Agent personalizado
# USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
```
### Archivos de Configuración YAML
- `config/config.yaml`: Configuración general (retry, timeouts, concurrent requests)
- `config/sources.yaml`: Definición de cada fuente (URLs, selectores CSS, tipo de contenido)
- `config/keywords.yaml`: Palabras clave para clasificación por categoría e idioma
---
## Uso
### Menú Interactivo (Recomendado)
La forma más sencilla de usar el proyecto es mediante el menú interactivo:
```bash
python scripts/menu.py
```
Desde el menú puedes acceder a todas las funcionalidades:
| Opción | Descripción |
|--------|-------------|
| **[1] 🕷️ Scraping** | Ejecutar spiders individuales o todos a la vez |
| **[2] 🔍 Búsqueda** | Buscar artículos por palabra clave, categoría, fuente, fechas, CVE o idioma |
| **[3] 📊 Estadísticas** | Ver resumen general, artículos por fuente/categoría/idioma/mes |
| **[4] 📤 Exportación** | Exportar datos a JSON, CSV o RSS |
| **[5] 🧹 Mantenimiento** | Verificar BD, ver tamaño, limpiar artículos |
| **[6] 📖 Ayuda** | Comandos rápidos y tips |
| **[0] ❌ Salir** | Cerrar el programa |
Para más detalles, consulta la [Guía de Uso](GUIA_USO.md).
### Comandos Directos
```bash
# Ejecutar todos los spiders
python scripts/run_all.py
# Ejecutar solo fuentes principales (ejecución diaria)
python scripts/run_daily.py
# Ejecutar un spider específico
scrapy crawl hackernews
scrapy crawl elhackernet
scrapy crawl cvedetails
# Generar reporte de los últimos 7 días
python scripts/generate_report.py
# Generar reporte de los últimos 30 días
python scripts/generate_report.py --days 30
# Inicializar base de datos
python scripts/setup_db.py
# Verificar base de datos
python scripts/verify_db.py
```
---
## Arquitectura y Flujo de Datos
El CyberSec Crawler sigue una arquitectura de pipelines secuenciales:
```
1. SPIDERS
|
2. TEXT CLEANING PIPELINE
- Limpieza de HTML
- Normalización de texto
- Generación de hash
- Detección de idioma
|
3. CLASSIFICATION PIPELINE
- Clasificación por categoría
- Extracción de tags
- Asignación de nivel de dificultad
|
4. DEDUPLICATION PIPELINE
- Verificación por hash de contenido
- Verificación por URL
|
5. STORAGE PIPELINE
- Almacenamiento en base de datos
- Exportación a JSON/CSV/RSS
```
### Flujo Detallado
1. **Inicio**: El spider base carga la configuración de la fuente desde sources.yaml
2. **Petición HTTP**: Cada spider realiza peticiones respetando robots.txt y DOWNLOAD_DELAY
3. **Parseo**: Extrae título, contenido, fecha, autor y URL usando selectores CSS/XPath
4. **Item**: Crea un ArticleItem con los datos extraídos
5. **Pipeline 1 - TextCleaning**: Limpia HTML, normaliza texto, genera hash y detecta idioma
6. **Pipeline 2 - Classification**: Clasifica el artículo y extrae tags relevantes
7. **Pipeline 3 - Deduplication**: Verifica si el artículo ya existe (por hash o URL)
8. **Pipeline 4 - Storage**: Guarda en BD y exporta a los formatos configurados
---
## Modelo de Datos
### ArticleItem
| Campo | Tipo | Descripción |
|-------|------|-------------|
| titulo | String | Título del artículo |
| url | String | URL original |
| fuente | String | Nombre de la fuente |
| categoria | String | Categoría clasificada |
| idioma | String | es / en |
| fecha_publicacion | DateTime | Fecha de publicación original |
| fecha_recoleccion | DateTime | Fecha de recolección |
| autor | String | Autor del artículo |
| contenido_texto | String | Contenido en texto plano |
| resumen | String | Resumen de 300 caracteres |
| tags | String | Tags separados por coma |
| nivel_dificultad | String | Principiante / Intermedio / Avanzado |
| hash_contenido | String | Hash SHA256 del contenido |
### Categorías
- `noticia`: Noticias generales de seguridad
- `analisis_ataque`: Análisis de ataques y malware
- `vulnerabilidad_cve`: Vulnerabilidades con identificador CVE
- `herramienta`: Herramientas de seguridad
- `curso_gratuito`: Cursos y tutoriales
- `investigacion`: Investigaciones académicas
- `reporte`: Reportes de amenazas
- `opinion`: Artículos de opinión
---
## Tests
El proyecto incluye tests unitarios para los componentes principales:
```bash
# Ejecutar todos los tests
python -m unittest discover tests -v
# Tests de spiders (configuración básica)
python -m unittest tests.test_spiders -v
# Tests del clasificador
python -m unittest tests.test_classifier -v
# Tests de pipelines
python -m unittest tests.test_pipelines -v
# Tests del deduplicador
python -m unittest tests.test_deduplicator -v
```
---
## Docker
### Servicios Disponibles
| Servicio | Comando | Descripción |
|----------|---------|-------------|
| Crawler completo | `docker-compose up crawler` | Ejecuta todos los spiders |
| Crawler diario | `docker-compose up crawler-daily` | Solo fuentes principales |
| Generar reporte | `docker-compose up report-generator` | Reporte de últimos 7 días |
| Menú interactivo | `docker-compose run menu` | Menú interactivo en terminal |
### Construir y Ejecutar
```bash
# Construir la imagen
docker-compose build
# Ejecutar todos los servicios
docker-compose up
# Ejecutar el menú interactivo
docker-compose run menu
```
### Volúmenes
- `./data`: Base de datos SQLite y archivos exportados
- `./logs`: Logs de ejecución
- `./.env`: Configuración de entorno
---
## Consideraciones Técnicas
### Rate Limiting y Respeto a los Servidores
- DOWNLOAD_DELAY configurado en 2-5 segundos entre peticiones
- CONCURRENT_REQUESTS_PER_DOMAIN limitado a 4
- Respeto automático de robots.txt
- Pausa de 5 segundos entre spiders en ejecución completa
### Manejo de Errores
- Retry automático (3 intentos) con backoff exponencial
- Timeout configurable por petición
- Logging detallado de errores
- Los fallos de un spider no afectan a los demás
### Anti-Detección
- Rotación de User-Agents
- Headers HTTP personalizados
- Proxies configurables (opcional)
- Cookies management
### Escalabilidad
- Arquitectura modular: fácil añadir nuevas fuentes
- Base de datos intercambiable (SQLite / PostgreSQL)
- Dockerizado para escalado horizontal
- Exportación desacoplada del almacenamiento
---
## Contribuir
1. Haz fork del repositorio
2. Crea una rama para tu feature (`git checkout -b feature/nueva-fuente`)
3. Haz commit de tus cambios (`git commit -m 'Añadir nueva fuente: X'`)
4. Haz push a la rama (`git push origin feature/nueva-fuente`)
5. Abre un Pull Request
### Guía para Añadir una Nueva Fuente
1. Crear un nuevo archivo en `cybersec_crawler/spiders/`
2. Heredar de `BaseSpider`
3. Definir `name`, `allowed_domains` y `start_urls`
4. Implementar el método `parse` con los selectores CSS/XPath
5. Añadir la fuente en `config/sources.yaml`
6. Añadir palabras clave en `config/keywords.yaml`
7. Registrar el spider en `scripts/run_all.py`
8. Añadir tests en `tests/test_spiders.py`
---
## Licencia
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
---
## Aviso Legal
Este crawler está diseñado exclusivamente para fines educativos y de investigación en ciberseguridad. Los usuarios son responsables de:
- Respetar los términos de servicio de cada sitio web
- Cumplir con las leyes locales de protección de datos
- No utilizar los datos recolectados para actividades ilegales
- Implementar rate limiting para no sobrecargar los servidores
---
CyberSec Crawler — Mantén tu conocimiento de ciberseguridad actualizado en inglés y español