Web Scraper inteligente con sistema de presets para sitios E-commerce
Interfaz web moderna • Exportación múltiple • Sin configuración compleja
E-Commerce Scraper es una aplicación web de scraping inteligente con presets preconfigurados para sitios de práctica populares. Diseñado para ser simple pero poderoso, permite extraer productos sin necesidad de configurar selectores CSS complejos.
- 🎯 Sistema de Presets: 5 sitios preconfigurados listos para usar
- 🌐 Interfaz Web Moderna: Dashboard intuitivo con Bootstrap 5
- 📊 Vista en Grid: Productos mostrados en mosaicos con imágenes
- ⚡ Scraping Asíncrono: Procesamiento rápido con aiohttp
- 📦 Exportación Múltiple: CSV, JSON y Excel con un clic
- 🎨 Tema Oscuro: Interfaz profesional y amigable
- ✅ Tests Completos: Suite de 52 tests automatizados
- 🔄 Actualizaciones en Tiempo Real: Progress bar y estados en vivo
| Componente | Tecnología | Descripción |
|---|---|---|
| Backend | FastAPI 2.0 | API REST moderna y rápida |
| HTTP Client | aiohttp | Requests asíncronos eficientes |
| Parsing | BeautifulSoup4 + lxml | Extracción de HTML |
| Frontend | Bootstrap 5 + Jinja2 | UI responsive y moderna |
| Validación | Pydantic | Modelos de datos tipados |
| Exportación | Pandas + openpyxl | CSV, JSON, Excel |
| Testing | pytest + pytest-asyncio | Tests automatizados |
| Logging | Loguru | Logging estructurado |
- Python 3.12 o superior
- UV (recomendado) o pip
# Clonar repositorio
git clone https://github.com/tu-usuario/ecommerce-scraper.git
cd ecommerce-scraper
# Instalar dependencias con UV
uv sync
# Ejecutar tests
uv run pytest tests/ -v
# Iniciar servidor
uv run python -m uvicorn src.main:app --reload --port 8000# Crear entorno virtual
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
# Instalar dependencias
pip install -e .
# Ejecutar aplicación
python -m uvicorn src.main:app --reload --port 8000-
Iniciar el servidor:
uv run python -m uvicorn src.main:app --reload --port 8000
-
Abrir el navegador:
http://localhost:8000 -
Seleccionar un preset:
- Books to Scrape
- ScrapeMe Live (Pokémon)
- Web Scraper Test
- Quotes to Scrape
- Scraping Course Shop
-
Configurar y ejecutar:
- Ajustar máximo de productos y páginas
- Hacer clic en "Iniciar"
- Ver productos en tiempo real
- Exportar a CSV/JSON/Excel
# Listar presets disponibles
curl http://localhost:8000/api/presets
# Iniciar scraping
curl -X POST http://localhost:8000/api/scrape/start \
-H "Content-Type: application/json" \
-d '{
"preset_id": "books_toscrape",
"max_products": 20,
"max_pages": 5
}'
# Ver estado
curl http://localhost:8000/api/status
# Obtener productos
curl http://localhost:8000/api/products?limit=100
# Exportar
curl -X POST http://localhost:8000/api/export \
-H "Content-Type: application/json" \
-d '{"format": "csv"}'ecommerce-scraper/
├── src/
│ ├── __init__.py
│ ├── main.py # FastAPI application
│ ├── presets.py # Site presets configuration
│ ├── config.py # Global configuration
│ ├── models.py # Pydantic data models
│ ├── exporters/
│ │ ├── __init__.py
│ │ └── woocommerce.py # CSV/JSON/Excel exporters
│ ├── static/
│ │ ├── css/
│ │ │ └── style.css # Dark theme styles
│ │ └── js/
│ │ └── app.js # Frontend JavaScript
│ └── templates/
│ └── index.html # Main web interface
├── tests/
│ ├── __init__.py
│ ├── test_presets.py # Preset validation tests
│ ├── test_scraper.py # Scraping logic tests
│ ├── test_exporters.py # Export functionality tests
│ └── test_api.py # API endpoint tests
├── exports/ # Generated export files
├── logs/ # Application logs
├── docs/ # Additional documentation
├── pyproject.toml # Project dependencies
└── README.md
| Preset | Sitio | Tipo | Descripción |
|---|---|---|---|
| books_toscrape | books.toscrape.com | Libros | Catálogo de libros de prueba |
| scrapeme_live | scrapeme.live | Pokémon | Tienda WooCommerce demo |
| webscraper_ecommerce | webscraper.io | Electrónica | Laptops y computadoras |
| quotes_toscrape | quotes.toscrape.com | Citas | Frases célebres (texto) |
| scraping_course | scrapingcourse.com | E-commerce | Productos electrónicos |
Cada preset incluye:
- URL base y ejemplo
- Selectores CSS preconfigurados
- Selector de paginación
- Campos de extracción específicos
Columnas: title, price, url, image, rating, description
{
"products": [
{
"title": "Product Name",
"price": "19.99",
"url": "https://...",
"image": "https://...",
"rating": "4.5",
"scraped_at": "2026-01-12T22:00:00"
}
],
"metadata": {
"preset_id": "books_toscrape",
"total_products": 20,
"export_date": "2026-01-12T22:00:00"
}
}Hoja única con formato de tabla, colores y filtros automáticos.
El proyecto incluye 52 tests automatizados:
# Ejecutar todos los tests
uv run pytest tests/ -v
# Tests específicos
uv run pytest tests/test_presets.py -v
uv run pytest tests/test_api.py -v
# Con cobertura
uv run pytest tests/ --cov=src --cov-report=html- ✅ Validación de presets (16 tests)
- ✅ Extracción de productos (6 tests)
- ✅ Exportadores CSV/JSON/Excel (7 tests)
- ✅ Endpoints API (13 tests)
- ✅ Selectores CSS (10 tests)
- Barra de Control Superior: Sitios, configuración y botones siempre visibles
- Grid de Productos: Mosaicos responsive con imágenes
- Progress Bar: Estado en tiempo real del scraping
- Stats Panel: Contador de productos y errores
- Tema Oscuro: Diseño moderno con gradientes
- Responsive: Funciona en desktop, tablet y móvil
- Selector de preset (botones inline)
- Máximo de productos y páginas
- URL personalizada (opcional)
- Botones: Iniciar, Detener, Limpiar
- Exportar: CSV, JSON, Excel
Para agregar un nuevo sitio, editar src/presets.py:
"mi_sitio": SitePreset(
id="mi_sitio",
name="Mi Sitio E-commerce",
domain="mitienda.com",
description="Descripción del sitio",
base_url="https://mitienda.com",
example_url="https://mitienda.com/productos",
product_card_selector="div.producto",
pagination_selector="a.siguiente",
selectors={
"title": "h2.nombre",
"price": "span.precio",
"image": "img.imagen-principal",
"product_link": "a.enlace"
},
requires_js=False
)| Métrica | Valor |
|---|---|
| Productos/minuto | 10-30 (según sitio) |
| Timeout por página | 30 segundos |
| Reintentos automáticos | 3 por error |
| Memoria típica | ~50-100 MB |
| Tests execution | < 2 segundos |
- ✅ Delays entre requests para no sobrecargar servidores
- ✅ User-Agent realista en headers
- ✅ Manejo de errores y timeouts
- ✅ Logs detallados de operaciones
- ✅ Validación de datos con Pydantic
- ✅ Tests automatizados completos
- Práctica de Scraping: Aprender técnicas con sitios seguros
- Análisis de Productos: Recopilar datos para análisis
- Testing de Selectores: Validar selectores CSS
- Demos y Portfolios: Mostrar habilidades de scraping
- Investigación: Recopilar datos públicos para estudios
Este proyecto es educativo y de demostración. Los sitios preconfigurados son específicamente diseñados para práctica de scraping. El usuario es responsable de:
- Usar la herramienta de forma ética
- Respetar robots.txt y términos de servicio
- No sobrecargar servidores
- Cumplir con leyes de protección de datos
- No usar para fines comerciales sin permiso
- Agregar más presets de sitios
- Exportación a base de datos
- Scheduler para scraping recurrente
- API de autenticación
- Dashboard de analíticas
- Soporte para sitios con JavaScript
MIT License - Ver LICENSE para más detalles.
NeRo
Full Stack Developer • Python & Web Scraping Specialist
🌐 Portfolio para Workana
⭐ Proyecto desarrollado para demostrar habilidades en web scraping y desarrollo full-stack ⭐