Cómo construir un scraper de Zalando con Python: paso a paso
TL;DR
Construya un scraper de Zalando solo para páginas públicas que tenga permiso para recopilar, y verifique los términos actuales del sitio y la política de robots antes de ejecutarlo.
Comience con una URL de producto y extraiga datos estructurados incrustados antes de agregar automatización del navegador.
Utilice Playwright solo cuando los campos requeridos aparezcan después de la ejecución de JavaScript; HTTP simple es más rápido cuando la respuesta inicial ya los contiene.
Almacene identificadores de productos estables, URLs canónicas, moneda, disponibilidad, tiempo de recuperación y un hash de contenido para que las actualizaciones sean idempotentes.
Trate las páginas de consentimiento, redirecciones locales, variantes faltantes y respuestas de acceso denegado como estados terminales explícitos.
¿Qué es un scraper de Zalando y por qué lo necesitaría?
Un scraper de Zalando es un programa controlado que lee páginas de producto públicas permitidas y convierte campos seleccionados en un registro consistente. Nstdata Crawl puede servir como una opción de adquisición gestionada cuando un equipo no desea operar navegadores y enrutamiento por sí mismo, mientras que las bibliotecas de Python proporcionan un control más directo. Los usos apropiados incluyen control de calidad interno, investigación de catálogos aprobados y monitoreo de productos que su organización está autorizada a observar.
El objetivo no es copiar toda la tienda. Un trabajo confiable comienza con un inventario de URL aprobado y un esquema estrecho. La guía de datos de productos ecommerce explica por qué los registros de origen y los registros comerciales aceptados deben permanecer separados.
¿Qué necesita antes de comenzar?
Necesita Python 3.11 o superior, un entorno aislado, httpx, beautifulsoup4 y Playwright para las páginas que realmente requieren un navegador. También necesita permiso por escrito o una base legal documentada, un pequeño conjunto de URL de prueba, una política de localidad y moneda, y un esquema de destino.
Defina estos campos antes de escribir selectores: product_id, canonical_url, name, brand, currency, price_text, availability, color, size_options, retrieved_at, y source_hash. No recopile datos de clientes, cuentas o checkout. Lea los términos actuales de Zalando y el archivo robots del sitio para el host y la localidad exactos a los que planea acceder.
¿Cómo funciona realmente una página de producto de Zalando?
Una página de producto puede combinar HTML renderizado en el servidor, JSON incrustado y solicitudes del lado del cliente. El DOM visible no siempre es la mejor fuente. Inspeccione la respuesta inicial y los bloques <script type="application/ld+json"> primero porque los datos de productos estructurados son generalmente más estables que las clases de presentación. Si los datos requeridos aparecen solo después del renderizado, use un navegador y espere a un elemento de producto significativo en lugar de dormir por un período arbitrario.
Conéctate al Proxy Correcto
Elige la ubicación y el modo de sesión que se ajusten a tu flujo de trabajo, luego conéctate a través de Nstdata.
Método 1: Extraer JSON-LD de una página de producto permitida
Paso 1: Obtener una URL con un cliente limitado
Usa un agente de usuario descriptivo, un tiempo de espera, límites de redirección y una baja tasa de solicitud. La URL de destino debe provenir de tu inventario aprobado.
import os
import httpx
url = os.environ["TARGET_URL"]with httpx.Client(timeout=20, follow_redirects=True)as client: response = client.get(url, headers={"User-Agent":"CatalogQA/1.0 contact@example.com"}) response.raise_for_status() html = response.text
Paso 2: Analizar JSON-LD del producto
import json
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"html.parser")products =[]for node in soup.select('script[type="application/ld+json"]'):try: value = json.loads(node.string or"")except json.JSONDecodeError:continue values = value ifisinstance(value,list)else[value] products.extend(x for x in values ifisinstance(x,dict)and x.get("@type")=="Product")ifnot products:raise RuntimeError("No se encontró JSON-LD del producto; inspecciona la respuesta antes de cambiar los selectores")
Paso 3: Normalizar sin inventar valores
Mapea solo los campos presentes. Preserva la cadena de precio original y la moneda, y usa None para datos no disponibles. Nunca infieras un tamaño o estado de stock a partir de un botón ausente.
Método 2: Renderizar la página con Playwright
Paso 1: Lanzar un contexto de navegador limitado
import os
from playwright.sync_api import sync_playwright
with sync_playwright()as p: browser = p.chromium.launch(headless=True) page = browser.new_page(locale="es-ES", viewport={"width":1440,"height":1000}) page.goto(os.environ["TARGET_URL"], wait_until="domcontentloaded", timeout=30000) page.locator('script[type="application/ld+json"]').first.wait_for(timeout=10000) rendered_html = page.content() browser.close()
Paso 2: Detectar el estado incorrecto de la página
Verifica la URL final, el título de la página, el identificador de producto esperado, la localidad y la presencia de evidencia del producto. Rechaza páginas que solo requieran consentimiento, inicio de sesión, desafíos y error genérico. La documentación oficial de Playwright Python es la fuente para la instalación actual y las APIs de espera.
Paso 3: Guardar un artefacto de revisión
Guarda una captura de pantalla o un hash HTML para fallos, pero aplica límites de retención. Los artefactos de revisión deben ayudar a diagnosticar un cambio en el selector o la renderización sin convertirse en una copia no controlada de la página.
Método 3: Utilizar una API de rastreo gestionada para adquisición
Paso 1: Mantener la adquisición separada de la análisis
Usa Nstdata Crawl cuando la renderización gestionada, el estado de tarea y la entrega de artefactos son más útiles que poseer trabajadores de navegador. Envía solo URLs públicas aprobadas, solicita el conjunto más pequeño de formatos y revisa el éxito a nivel de cuerpo en lugar de asumir que una respuesta HTTP exitosa significa que el producto se cargó.
Paso 2: Validar el artefacto devuelto
Confirma la URL canónica, la evidencia del producto, la localidad, la moneda y la completitud del contenido antes de analizar. Consulta el modelo de precios actual de Crawl al estimar el costo por producto aceptado en lugar del costo por URL enviada.
Paso 3: Alimentar la misma capa de normalización
Los métodos HTTP, Playwright y gestionados deberían producir el mismo registro de fuente interna. Los campos específicos del proveedor pertenecen al adaptador de adquisición, no a las tablas de catálogo posteriores.
¿Por qué el scraper de Zalando devuelve datos vacíos o inconsistentes?
Los datos vacíos generalmente significan que la respuesta es un estado de página diferente, que el campo se movió a JSON embebido, que la localidad fue redirigida, o que el contenido requiere renderización. Compara response.url, estado, título, longitud del cuerpo y un hash guardado. Si Playwright encuentra el campo pero HTTP no, inspecciona las solicitudes de red autorizadas antes de añadir más interacciones del navegador.
Los precios inconsistentes a menudo provienen del contexto de localidad, moneda, promoción, membresía o variante. Almacena esas dimensiones con cada observación. La guía de la tubería de monitoreo de precios de Nstdata muestra por qué las ofertas normalizadas necesitan reglas de procedencia y aceptación.
¿Cómo puedes hacer que el scraper sea seguro y mantenible?
Utiliza una cola limitada, baja concurrencia, reintenta solo fallos transitorios y detente ante negaciones persistentes. Versiona el parser, mantén fixtures para cada estado de página soportado y alerta sobre la tasa de campos faltantes en lugar de escribir nulos en silencio. El Protocolo de Exclusión de Robots describe reglas estandarizadas para robots, pero el cumplimiento también requiere términos, privacidad, derechos de autor y revisión interna.
Conclusión
Comienza con una página de producto permitida y JSON-LD, agrega Playwright solo cuando la evidencia muestre que el campo requerido se renderiza en el cliente, y mantén la adquisición separada de la normalización. Valida la localidad, la URL canónica y la identidad del producto antes de aceptar un registro. Para un trabajo de catálogo más amplio, utiliza descubrimiento de URL limitado y la lista de verificación de mejores prácticas de web scraping. Si la routificación a través de múltiples regiones aprobadas se convierte en una preocupación operativa separada, considera el Administrador de Proxy de Nstdata sin acoplar la lógica de proxy al esquema del producto.
Experimenta Nstdata — Comienza Tu Prueba Gratuita Hoy
La legalidad depende del objetivo, método, jurisdicción, términos y uso de datos. Solo recopila páginas públicas o de otro modo autorizadas y obtén orientación legal para el proyecto específico.
P: ¿Debería un scraper de Zalando usar Beautiful Soup o Playwright?
Usa Beautiful Soup cuando la respuesta inicial o el JSON incrustado contenga los datos requeridos; usa Playwright solo cuando la representación de JavaScript sea necesaria. Esto reduce el costo y la superficie de fallos.
P: ¿Por qué el scraper ve un idioma o precio diferente?
Las redirecciones de localidad, configuraciones de moneda, geografía, promociones y contexto de variante pueden cambiar la página. Almacena esas dimensiones y rechaza registros que no coincidan con el mercado solicitado.
P: ¿Con qué frecuencia deben actualizarse las páginas de productos?
La frecuencia de actualización debe seguir la necesidad del negocio, la volatilidad de la página, los permisos y la carga del sitio. Usa el historial de cambios para desacelerar productos estables y priorizar los volátiles.
P: ¿Cómo previenes productos duplicados?
Utiliza un identificador de producto estable más dimensiones de mercado y variante, canónica URLs de manera conservadora y haz escrituras idempotentes con hashes de contenido.
Las páginas renderizadas con JavaScript requieren el método que coincida con su ruta de datos. Esta guía cubre la extracción de red, tres enfoques de navegador y renderizado gestionado.
Ivy Lin
Sep. 28th 2026
Rastrea sitios web completos con una sola solicitud API
99,8% de éxito con renderizado JavaScript
Obtén datos limpios, listos para LLM, en múltiples formatos
Convierte cualquier sitio web en Markdown, HTML, JSON, enlaces, PDF y más, sin gestionar infraestructura de rastreo.