Descarga automatizada de imágenes y datos de productos desde tiendas WooCommerce
Extrae todas las imágenes de la galería, datos del producto (nombre, SKU, descripción) y genera un resumen en Excel. Soporta descarga incremental: solo procesa productos nuevos.
- Características
- Requisitos
- Instalación
- Uso
- Estructura del Proyecto
- Configuración
- Salida
- Contribuir
- Licencia
| Característica | Descripción |
|---|---|
| Descarga completa de galería | Extrae todas las imágenes del producto, no solo la principal |
| Descarga incremental | Detecta productos ya descargados y los omite automáticamente |
| Redimensionado automático | Todas las imágenes se normalizan al tamaño configurado (default: 1000x1000) |
| Resumen en Excel | Genera un .xlsx con nombre, SKU, carpeta, cantidad de imágenes, descripción y link |
| Configuración externa | URLs en archivo de texto, parámetros en JSON; sin tocar código |
| Manejo robusto de errores | Logging estructurado, reintentos y fallbacks (ej. Excel abierto) |
- Python 3.12 o superior
- Conexión a internet
- Sistema operativo: Windows / macOS / Linux
1. Clonar el repositorio
git clone https://github.com/tu-usuario/product-scraper.git
cd product-scraper2. Crear entorno virtual
python -m venv venvActivar en Windows:
venv\Scripts\activateActivar en macOS/Linux:
source venv/bin/activate3. Instalar dependencias
pip install -r requirements.txtpython main.pypython main.py --config ruta/al/config.jsonEdita el archivo links.txt y agrega las URLs, una por línea:
# Bebidas
https://ejemplo.com/tienda/bebidas/termo-x/
# Morrales
https://ejemplo.com/tienda/morrales/bolsa-y/
https://ejemplo.com/tienda/morrales/morral-z/
Las líneas vacías y los comentarios (que empiezan con
#) se ignoran automáticamente.
Ejecuta de nuevo y solo se descargarán los productos nuevos.
product-scraper/
├── config/
│ └── productos.json # Parámetros de configuración
├── src/
│ ├── __init__.py
│ ├── scraper.py # Lógica de extracción de datos
│ └── utils.py # Utilidades (imágenes, archivos)
├── main.py # Punto de entrada
├── links.txt # URLs de productos (una por línea)
├── requirements.txt # Dependencias de Python
├── .gitignore
└── README.md
Descripción de módulos
| Módulo | Responsabilidad |
|---|---|
main.py |
Orquesta el flujo: carga config, itera productos, genera Excel |
src/scraper.py |
Extrae datos del HTML: nombre, SKU, descripción, URLs de la galería |
src/utils.py |
Funciones reutilizables: sanitizar nombres, descargar/redimensionar imágenes |
{
"medidas": [1000, 1000],
"carpeta_salida": "FOTOS_PRODUCTOS",
"calidad_jpeg": 90,
"archivo_links": "links.txt"
}Parámetros disponibles
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
medidas |
[ancho, alto] |
[1000, 1000] |
Tamaño final de cada imagen en píxeles |
carpeta_salida |
string |
"FOTOS_PRODUCTOS" |
Nombre de la carpeta donde se guardan los productos |
calidad_jpeg |
int (1-100) |
90 |
Calidad de compresión JPEG |
archivo_links |
string |
"links.txt" |
Ruta al archivo con las URLs de productos |
Al ejecutar el scraper, se genera la siguiente estructura:
FOTOS_PRODUCTOS/
├── PRODUCTO_A/
│ ├── SKU_PRODUCTO_A_01.jpg
│ ├── SKU_PRODUCTO_A_02.jpg
│ └── SKU_PRODUCTO_A_03.jpg
├── PRODUCTO_B/
│ ├── SKU_PRODUCTO_B_01.jpg
│ └── SKU_PRODUCTO_B_02.jpg
├── ...
└── Resumen_General.xlsx
Contenido del Excel
| Columna | Descripción |
|---|---|
| Producto | Nombre completo del producto |
| SKU | Código del producto |
| Carpeta | Nombre de la subcarpeta |
| Imágenes | Cantidad descargada (ej. 14/14 o 5 (ya existían)) |
| Descripción | Descripción corta del producto |
| Link | URL original del producto |
12:40:30 | INFO | [START] Iniciando scraper -- 20 producto(s)
12:40:33 | INFO | [OK] TERMO ICED -- 15/15 imagenes descargadas
12:40:35 | INFO | [SKIP] Ya descargado (9 fotos): BOLSA QUEEN
12:40:58 | INFO | [EXCEL] Resumen generado: FOTOS_PRODUCTOS\Resumen_General.xlsx
12:40:58 | INFO | [DONE] Proceso terminado -- 20/20 productos exitosos
Las contribuciones son bienvenidas. Algunas ideas:
- Soporte para otras plataformas (Shopify, PrestaShop)
- Descarga en paralelo con hilos/async
- Interfaz gráfica (GUI)
- Exportar a CSV además de Excel
- Filtro por categoría de producto
Pasos para contribuir
- Haz un fork del repositorio
- Crea una rama para tu feature:
git checkout -b feature/nueva-funcionalidad - Realiza tus cambios y haz commit:
git commit -m "Agrega nueva funcionalidad" - Sube los cambios:
git push origin feature/nueva-funcionalidad - Abre un Pull Request
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.
Desarrollado con Python