Tony Wang6 min de lecturaCómo hacer scraping de H&M en 2026 (API y Python)
Extrae la búsqueda de productos, listados de categoría y precios/stock por color de H&M en 2026 — Python DIY, herramientas sin código o una API estructurada.
La forma más rápida de hacer scraping de H&M en 2026 es llamar a una API estructurada que devuelve JSON normalizado para búsqueda por palabra clave, listados de categoría y detalle completo de producto — en lugar de analizar las páginas de la tienda de H&M por tu cuenta. Los datos del backend de la app de H&M son ricos (precios por color, stock en vivo por talla, reseñas reales de clientes) pero no hay un programa público de desarrolladores para solicitarlos, no hay un endpoint de árbol de categorías para descubrir qué se puede navegar, y el sitio corre infraestructura anti-bot real por delante. Esta guía cubre el enfoque DIY y dónde se rompe, una opción sin código, y una API estructurada de H&M, además de lo que es legal recolectar.
¿Por qué hacer scraping de H&M?
- Inteligencia de precios — rastrea cómo se mueve el precio de una prenda entre colores y a lo largo del tiempo, incluyendo rebajas.
- Investigación de surtido y categorías — mira qué contiene realmente una categoría y cómo cambian los conteos por temporada.
- Monitoreo de stock por talla — la disponibilidad por talla y por color te dice qué tallas se agotan primero, no solo si un producto está "en stock".
- Análisis de reseñas y sentimiento — extrae tendencias de calificación y texto de reseñas para un producto o línea de productos específica.
- Benchmarking competitivo en retail de moda — compara la amplitud de catálogo y los precios de H&M contra Zara, Zalando y otros minoristas de moda rápida.
¿Es legal hacer scraping de H&M?
Opción 1: Hacerlo tú mismo en Python (y por qué se rompe)
Las páginas de producto de H&M no exponen un endpoint JSON público estable, así que un scraper DIY tiene que obtener y analizar la página renderizada:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www2.hm.com/en_us/productpage.1227171001.html",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Per-color price, per-size stock, and reviews are hydrated from
# app-backend calls, not consistently exposed as selectable markup
Funciona una vez como demo, y luego se rompe:
- Los Términos prohíben explícitamente bots y crawlers. Los ToS de H&M nombran directamente "spiders, bots, crawlers, avatares o agentes inteligentes" — no es una cláusula vaga que puedas argumentar, y violarla arriesga un bloqueo de acceso inmediato.
- Infraestructura anti-bot real protege el sitio. Una llamada
requestsingenua y sin autenticar recibe un desafío o bloqueo rápidamente, y un scraper basado en navegador necesita mantenimiento constante a medida que la defensa se actualiza. - No hay endpoint de árbol de categorías para descubrir qué se puede navegar. H&M no publica una llamada de navegación o búsqueda de categorías — o ya conoces el slug de la categoría (a partir de una URL de la tienda como
ladies_jeansomen_newarrivals_all) o no tienes forma de entrar. - Los datos por color y por talla no están en un campo plano. El detalle real de una página de producto — cada color comprable con su propio precio y stock por talla — es un dato estructurado hidratado del lado del cliente, no un valor que puedas capturar con un solo selector.
- No hay programa oficial de desarrolladores. H&M no tiene una API pública de autoservicio para su catálogo de tienda, así que no hay un canal autorizado para solicitar acceso programático como desarrollador externo.
Opción 2: Herramientas sin código
Las extensiones de navegador y los scrapers de apuntar y hacer clic pueden exportar una página de resultados de búsqueda de H&M para una extracción puntual, pero no resuelven los slugs de categoría por ti, no normalizan la estructura por color/talla, y heredan la misma fragilidad anti-bot que el DIY — no algo que quieras ejecutar en un cronograma.
Opción 3: Una API estructurada de H&M
Para un pipeline repetible, la API de H&M de Crawlora convierte los propios datos del backend de la app de H&M en JSON estructurado — búsqueda por palabra clave, listados de categoría y detalle completo de producto — sin analizar páginas ni mantener defensas anti-bot. Busca por palabra clave:
curl "https://api.crawlora.net/api/v1/hm/search?query=denim%20jacket" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "denim jacket",
"count": 24,
"total_count": 187,
"products": [
{
"id": "1227171001",
"name": "Relaxed Fit Denim Jacket",
"price": 44.99,
"currency": "USD",
"url": "https://www2.hm.com/en_us/productpage.1227171001.html",
"image": "https://lp2.hm.com/hmgoepprod?set=source[/33/44/example.jpg]",
"colors": [
{ "color": "Denim blue", "product_id": "1227171001", "in_stock": true },
{ "color": "Black", "product_id": "1227171002", "in_stock": true }
]
}
]
}
}
A diferencia de la navegación por categoría, la búsqueda es honesta sobre un callejón sin salida — pasa una palabra clave rara o sin sentido y obtienes un resultado genuinamente vacío, no un respaldo de productos recomendados.
Navega por una categoría según su slug (no hay endpoint de descubrimiento para esto — los valores de category_id provienen de rutas conocidas de la tienda, no de una llamada de búsqueda):
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/hm"
listing = requests.get(f"{base}/listing", headers=h, params={"category_id": "ladies_jeans"}).json()["data"]
product_id = listing["products"][0]["id"]
detail = requests.get(f"{base}/product/{product_id}", headers=h).json()["data"]
Una respuesta de detalle de producto es donde vive la estructura real — cada color comprable agrupado con su propio precio real por talla y disponibilidad en vivo, más reseñas cuando el producto las tiene (confirma los campos exactos en la documentación):
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "1227171001",
"name": "Relaxed Fit Denim Jacket",
"colors": [
{
"color": "Denim blue",
"product_id": "1227171001",
"price": 44.99,
"currency": "USD",
"sizes": [
{ "size": "XS", "in_stock": true, "stock_quantity": 12 },
{ "size": "S", "in_stock": true, "stock_quantity": 4 },
{ "size": "M", "in_stock": false, "stock_quantity": 0 }
]
},
{
"color": "Black",
"product_id": "1227171002",
"price": 44.99,
"currency": "USD",
"sizes": [
{ "size": "XS", "in_stock": true, "stock_quantity": 7 }
]
}
],
"rating": 4.2,
"review_count": 38,
"reviews": [
{
"author": "J.",
"rating": 5,
"text": "True to size, good quality denim for the price.",
"date": "2026-06-02"
}
]
}
}
Búsqueda y listado solo te dan un precio representativo y un conteo de stock por color — llama a detalle de producto sobre el id (o los dígitos de una URL productpage.<id>.html) cada vez que necesites el precio y stock reales por talla. Guarda una fila por color en cada extracción, indexada por product_id, y vuelve a ejecutar en un cronograma para rastrear cambios de precio y agotamientos de talla.
Qué puedes recolectar
Datos públicos de la tienda: resultados de búsqueda (id, nombre, precio, moneda, imagen, conteo de stock por color) con un resultado genuinamente vacío ante una consulta mala; listados de categoría por slug conocido de category_id; y detalle completo de producto — el precio real por talla y la disponibilidad en vivo de cada color, más calificación agregada y reseñas de clientes cuando el producto las tiene. Solo datos públicos de la página de producto — no información de cuenta, carrito o checkout.
Limitaciones y desafíos comunes
- No hay endpoint de descubrimiento de árbol de categorías. H&M no expone una forma de enumerar categorías — los slugs de
category_idcomoladies_jeansomen_newarrivals_allhay que obtenerlos de rutas conocidas de la tienda, así que arma y mantén tu propia lista de slugs. - Infraestructura anti-bot real en el frontend. Espera desafíos ante solicitudes automatizadas ingenuas o de alto volumen directamente contra el sitio de H&M.
- Búsqueda y listado no son el panorama completo. Llevan un precio representativo y un conteo de stock por color — trátalos como una capa de descubrimiento y extrae el detalle de producto para precio y disponibilidad exactos por talla.
- Las reseñas no están garantizadas. Muchos productos no tienen ninguna; revisa
review_countantes de asumir que habrá datos de reseñas. - Los ToS nombran explícitamente bots y crawlers. Trata eso como una restricción real, no como texto genérico — mantente dentro de los hechos públicos de la página de producto y respeta los límites de tasa.
Dónde se usa esto
- Inteligencia de precios — rastrea el
pricepor color y las rebajas en una línea de producto durante una temporada. - Monitoreo de stock por talla — observa
sizes[].in_stockystock_quantitypara ver qué tallas se agotan primero. - Benchmarking competitivo de moda rápida — compara el surtido de categoría y los precios contra Zara y Zalando.
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: ejecuta cualquier URL pública con el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin necesidad de registro.
Los datos de H&M combinan bien con otras APIs de retail de moda para investigación entre plataformas — mira cómo hacer scraping de Zalando para un marketplace de moda con 25 mercados, o cómo hacer scraping de Zara para la comparación de moda rápida más cercana. Prueba los endpoints de búsqueda, listado y producto en el Playground, revisa el esquema en la documentación de la API, y consulta los precios. Mira también cómo elegir una API de web scraping y ¿es legal el web scraping?.
Preguntas frecuentes
¿Cómo navego las categorías de H&M con una API?
Pasa un slug de categoría conocido al endpoint /hm/listing de Crawlora — H&M no expone una llamada de descubrimiento de árbol de categorías/navegación, así que los valores de category_id (por ejemplo, ladies_jeans, men_newarrivals_all) provienen de rutas conocidas de la tienda y no de una llamada de búsqueda.
¿La búsqueda de H&M devuelve resultados vacíos para una palabra clave rara?
Sí — a diferencia de la navegación por categoría, /hm/search devuelve un resultado genuinamente vacío (cero productos) para una palabra clave rara o sin sentido, en lugar de caer en un conjunto recomendado.
¿Puedo obtener stock por talla y reseñas de clientes para un producto de H&M?
Sí — /hm/product/{product_id} devuelve cada color comprable agrupado con su propio precio real por talla y disponibilidad en vivo, más una calificación agregada y reseñas de clientes cuando el producto las tiene. /hm/listing y /hm/search solo llevan un precio representativo y un conteo de stock por color.