Descargador de imágenes de catálogoDesarrollo y personalización

Un parser de Python que guarda en una carpeta las imágenes de un catálogo abierto, con el código de producto como nombre, y una tabla

Suele estar listo en 15 minutosCambios incluidosControl de calidad
Paquetes
Protección de pagoDetalles
  • Los cambios dentro del paquete son gratuitos.
  • Si no responde en los 3 días siguientes a la entrega, el trabajo se acepta automáticamente.

El dinero queda reservado al pagar y solo se libera cuando usted acepta el trabajo.

Un parser de Python que guarda en una carpeta las imágenes de un catálogo abierto, con el código de producto como nombre, y una tabla

Ejemplo de resultado

Ejemplo del paquete Estándar

Parser del catálogo de un proveedor de herramientas de jardín a Excel

Cómo queda el resultado

ReferenciaNombrePrecioDisponiblePesoFoto
GT-1042Tijeras de podar, 20 mm18,90Sí0,24 kg…/gt-1042.jpg
GT-1187Sierra plegable, 210 mm24,50Sí0,31 kg…/gt-1187.jpg
GT-2210Tijeras para setos, hoja ondulada39,00No1,10 kg…/gt-2210.jpg
GT-3305Pala de mano, acero inoxidable9,80Sí0,18 kg…/gt-3305.jpg
GT-4120Manguera de jardín 25 m, 1/2"42,00Sí2,90 kg…/gt-4120.jpg

El archivo del ejemplo tiene 1.236 productos de 52 páginas de lista.

Una parte del código

def product_links(list_url: str) -> Iterator[str]:
    """Enlaces a las páginas de producto de todas las páginas de la lista, siguiendo 'Siguiente'."""
    url: str | None = list_url
    while url:
        page = fetch(url)
        for card in page.select("div.product-card a.title"):
            yield urljoin(url, card["href"])
        next_link = page.select_one("a.pagination-next")
        url = urljoin(url, next_link["href"]) if next_link else None


def fetch(url: str) -> BeautifulSoup:
    """Una página abierta, a un ritmo prudente: una pausa entre peticiones y algunos reintentos si hay errores."""
    for attempt in range(3):
        time.sleep(settings.delay_seconds)
        response = session.get(url, timeout=30)
        if response.status_code == 200:
            return BeautifulSoup(response.text, "html.parser")
        log.warning("%s respondió %s, intento %d de 3", url, response.status_code, attempt + 1)
    raise ScraperError(f"{url} no se abrió tras 3 intentos")

Archivos: un archivo ZIP con scraper.py, settings.ini (la página inicial, la pausa entre peticiones, el nombre del archivo), requirements.txt y un README sobre cómo instalarlo y ejecutarlo. Solo lee páginas abiertas, una cada 2 segundos, y antes consulta el robots.txt de la web. El cliente lo ejecuta en su propio ordenador.

Cliente: una tienda de jardinería en línea que revende las herramientas de un proveedor; el proveedor tiene un catálogo abierto en su web, pero ningún archivo con la lista de precios. Tarea: recorrer las páginas de lista del catálogo, abrir cada página de producto y guardar en Excel la referencia, el nombre, el precio, la disponibilidad, el peso y el enlace de la foto principal, para comparar precios una vez por semana.

El cliente y todos los datos son ficticios.

Acerca de este servicio

Cuando traslada su propio catálogo a una tienda nueva, o un proveedor le permite usar sus fotos de producto, este parser guarda en una carpeta las imágenes de las páginas abiertas del catálogo y nombra cada archivo con el código de producto, con una tabla que relaciona código, nombre del producto, enlace de la imagen y nombre de archivo. Envíenos la web, una categoría y una página de producto, una o dos páginas guardadas desde su navegador y cómo nombrar los archivos. Recibe código Python, un archivo de configuración y un README y lo ejecuta en su ordenador, así que los archivos le llegan directamente a usted. Guarde solo imágenes que pueda usar: las suyas o las que el propietario le permita. Los archivos se guardan tal como los da la web. Lee páginas abiertas a un ritmo prudente y nunca inicia sesión ni se salta captchas o protecciones. Usted decide si las condiciones de la web lo permiten; un cambio posterior de estructura requiere una actualización.

Qué incluye

  • Qué recibeUn archivo ZIP con el código Python, un archivo de configuración y un README con instrucciones paso a paso; el código también se muestra en la página del pedido.
  • Archivos con el nombre que quieraPor código de producto, con _1, _2, _3 para las fotos extra
  • Una tabla que los acompañaCódigo, nombre del producto, enlace de la imagen y nombre de archivo
  • La versión más grandeCuando la página enlaza a una imagen mayor, toma esa
  • Ritmo prudenteUna pausa entre páginas, fijada en la configuración
  • Se ejecuta en su ordenadorWindows, macOS o Linux, con Python

Cómo funciona

  1. 1
    PáginasUsted da el catálogo, una página de producto guardada y los nombres de archivo
  2. 2
    ParserEscribimos el código y la guía para ejecutarlo
  3. 3
    EjecuciónLo ejecuta y revisa la primera carpeta de imágenes
  4. 4
    CambiosPide cambios dentro de su paquete y nos envía cualquier mensaje de error

Qué necesitamos de usted

La web y las páginas exactas: un enlace a una categoría y a una página de producto, y cuántos productos e imágenes hay aproximadamente. Cómo nombrar los archivos, p. ej., por código de producto con _1, _2. Los campos de la tabla que necesita además del nombre de archivo. Una o dos de esas páginas guardadas desde su navegador (Archivo > Guardar página como). Y su confirmación de que las imágenes son suyas o de que el propietario le permite usarlas.

Le preguntaremos:

  • ¿Qué web y qué páginas?
  • Cómo nombrar los archivos
  • ¿Cuántas imágenes aproximadamente?
  • ¿De quién son las imágenes?

Comparar paquetes

PaquetesBásicoImágenes desde sus enlaces de productos22 US$EstándarUna categoría completa43 US$PremiumHasta 3 webs o secciones75 US$
Plazo1 día2 días3 días
Cambios123
Webs11hasta 3
Tipos de página12 (categoría y producto)hasta 3
Camposhasta 10hasta 25hasta 25 en cada una
Recorre las páginas de una listaNoSíSí
Archivo de resultadosCSVExcel o CSVExcel, CSV o JSON
Duplicados eliminados, reanuda donde se detuvoNoNoSí
Resultadoarchivos de imagen + tablaarchivos de imagen + tablaarchivos de imagen + tabla
Hacer pedido BásicoHacer pedido EstándarHacer pedido Premium

Protección de pago

Usted paga al hacer el pedido, pero el dinero solo se libera por un trabajo aceptado.

  • Precio fijoEl precio del paquete no cambia después del pago.
  • El dinero queda reservadoAl pagar, el importe solo queda reservado. Pasa a Dleex cuando usted acepta el trabajo.
  • Revisado antes de la entregaCada resultado pasa un control de calidad antes de llegar a usted, y lo ve en la página del pedido antes de aceptarlo.
  • Cambios gratuitosSolicite cambios dentro de su brief tantas veces como permita el paquete.
  • Aceptación a los 3 díasSi en los 3 días siguientes a la entrega no acepta el trabajo ni solicita cambios, se acepta automáticamente. Si escribe en el chat del pedido después de la entrega, el pedido queda en espera; cuando le respondamos, podremos reiniciar el plazo de 3 días y se lo indicaremos en el chat.
  • Rehacer el trabajo o reembolso totalSi el resultado no se ajusta a su brief y los cambios no lo resolvieron, o el trabajo tarda más del doble de su plazo, escriba en el chat del pedido: rehacemos el trabajo o le reembolsamos el pago íntegro.
Cómo funciona →

Preguntas y respuestas

¿Puedo descargar cualquier imagen que encuentre?

No. Las imágenes pertenecen a sus propietarios, así que el parser es para imágenes que pueda usar: su propio catálogo, o el de un proveedor con su permiso. Conseguir ese permiso le corresponde a usted.

¿Redimensionará las imágenes o quitará marcas de agua?

No. Los archivos se guardan tal como los da la web, sin redimensionar, cambiar de formato ni editar, y nunca quitamos marcas de agua.

¿Puede descargar de Google Imágenes, Amazon o redes sociales?

No. Google, Amazon, LinkedIn y las redes sociales quedan fuera: sus condiciones lo prohíben y las imágenes de esos sitios pertenecen a muchas personas distintas.

¿Cuánto espacio en disco necesitará?

Depende de la web: las fotos de producto suelen pesar de 200 KB a 1 MB cada una. Ejecútelo primero con una categoría y multiplique.

¿Y si la web cambia?

El parser sigue las páginas tal como son ahora. Un cambio posterior de estructura requiere una actualización, que es un pedido nuevo.

¿No encontró su respuesta?

Paquetes