Una herramienta de línea de comandos para extraer y analizar datos de libros de http://books.toscrape.com
# Clonar el repositorio
git clone <repository-url>
cd book-scraper-cli
# Instalar dependencias
npm install
# Construir el proyecto
npm run build
# Extraer datos de libros
npm run dev -- scrape -u http://books.toscrape.com -o books-data.csv
# Opciones disponibles:
# -u, --url <url> URL del sitio a scrapear (requerido)
# -o, --output <archivo> Nombre del archivo de salida (default: scraped-data.csv)
# Analizar datos extraídos
npm run dev -- analyze -i ./data/books-data.csv -o analysis.json
# Opciones disponibles:
# -i, --input <archivo> Archivo CSV de entrada (requerido)
# -o, --output <archivo> Archivo de salida para resultados (default: analysis.json)
book-scraper-cli/
├── src/
│ ├── commands/ # Comandos CLI
│ ├── services/ # Lógica de negocio
│ ├── interfaces/ # Definiciones de tipos
│ ├── utils/ # Utilidades
│ └── index.ts # Punto de entrada
├── tests/ # Pruebas
├── data/ # Datos extraídos y análisis
└── dist/ # Código compilado
npm run build
: Compila el proyectonpm start
: Ejecuta la versión compiladanpm run dev
: Ejecuta en modo desarrollonpm test
: Ejecuta las pruebasnpm run test:watch
: Ejecuta las pruebas en modo watchnpm run test:coverage
: Genera reporte de cobertura
El análisis incluye:
- Estadísticas de precios (min, max, promedio, mediana)
- Distribución de ratings
- Disponibilidad de libros
- Rango de fechas de scraping
Ejemplo de resultado:
{
"totalItems": 100,
"priceStats": {
"min": 10.99,
"max": 59.99,
"average": 25.49,
"median": 23.99
},
"ratingStats": {
"average": 4.2,
"distribution": {
"5": 30,
"4": 45,
"3": 15,
"2": 7,
"1": 3
}
},
"availabilityDistribution": {
"In stock": 85,
"Out of stock": 15
}
}
La aplicación incluye:
- Reintentos automáticos en caso de fallos de red
- Logging detallado
- Validación de entrada
- Manejo de excepciones
- Clean Architecture
- SOLID Principles
- Error Handling
- Logging
- Testing
- Type Safety
docker build -t book-scraper .
docker run book-scraper scrape -u http://books.toscrape.com -o books.csv
docker run -v $(pwd)/data:/app/data book-scraper analyze -i data/books.csv -o data/analysis.json