Skip to content

NeRo0128/ecommerce-scraper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

�️ E-Commerce Scraper

Python FastAPI Bootstrap License

Web Scraper inteligente con sistema de presets para sitios E-commerce
Interfaz web moderna • Exportación múltiple • Sin configuración compleja


📋 Descripción

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.

✨ Características Principales

  • 🎯 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

🛠️ Stack Tecnológico

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

📦 Instalación

Requisitos

  • Python 3.12 o superior
  • UV (recomendado) o pip

Instalación Rápida con UV

# 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

Instalación con pip

# 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

🚀 Uso

Interfaz Web

  1. Iniciar el servidor:

    uv run python -m uvicorn src.main:app --reload --port 8000
  2. Abrir el navegador:

    http://localhost:8000
    
  3. Seleccionar un preset:

    • Books to Scrape
    • ScrapeMe Live (Pokémon)
    • Web Scraper Test
    • Quotes to Scrape
    • Scraping Course Shop
  4. 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

API REST

# 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"}'

📁 Estructura del Proyecto

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

🎯 Sitios Preconfigurados

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

📊 Formato de Exportación

CSV

Columnas: title, price, url, image, rating, description

JSON

{
  "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"
  }
}

Excel

Hoja única con formato de tabla, colores y filtros automáticos.


🧪 Testing

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

Cobertura de Tests

  • ✅ 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)

🎨 Interfaz de Usuario

Características de la UI

  • 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

Controles

  • Selector de preset (botones inline)
  • Máximo de productos y páginas
  • URL personalizada (opcional)
  • Botones: Iniciar, Detener, Limpiar
  • Exportar: CSV, JSON, Excel

⚙️ Configuración de Presets

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
)

📈 Rendimiento

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

🛡️ Buenas Prácticas

  • ✅ 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

🤝 Casos de Uso

  • 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

⚠️ Disclaimer

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

🔮 Roadmap

  • 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

📄 Licencia

MIT License - Ver LICENSE para más detalles.


👨‍💻 Autor

NeRo
Full Stack Developer • Python & Web Scraping Specialist

🌐 Portfolio para Workana


⭐ Proyecto desarrollado para demostrar habilidades en web scraping y desarrollo full-stack ⭐

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors