Tony Wang6 Min. LesezeitSo scrapst du H&M 2026 (API & Python)
H&M-Produktsuche, Kategorie-Listings und Preise/Bestand pro Farbe in 2026 scrapen — DIY Python, No-Code-Tools oder eine strukturierte API.
Der schnellste Weg, H&M 2026 zu scrapen, ist eine strukturierte API aufzurufen, die normalisiertes JSON für Keyword-Suche, Kategorie-Listings und vollständige Produktdetails liefert — statt H&Ms Storefront-Seiten selbst zu parsen. H&Ms App-Backend-Daten sind reichhaltig (Preise pro Farbe, Live-Bestand pro Größe, echte Kundenbewertungen), aber es gibt kein öffentliches Developer-Programm, um sie anzufragen, keinen Kategorie-Baum-Endpunkt, um herauszufinden, was durchsuchbar ist, und die Seite läuft hinter echter Anti-Bot-Infrastruktur. Dieser Guide behandelt den DIY-Ansatz und wo er scheitert, eine No-Code-Option und eine strukturierte H&M-API, sowie was rechtlich tatsächlich erlaubt ist zu sammeln.
Warum H&M scrapen?
- Preisbeobachtung — verfolgen, wie sich der Preis eines Kleidungsstücks über Farben und Zeit hinweg entwickelt, inklusive Preissenkungen.
- Sortiments- und Kategorierecherche — sehen, was eine Kategorie tatsächlich führt und wie sich die Anzahl saisonal verändert.
- Bestandsüberwachung auf Größenebene — Verfügbarkeit pro Größe und Farbe zeigt dir, welche Größen zuerst ausverkauft sind, nicht nur ob ein Produkt „auf Lager" ist.
- Bewertungs- und Sentiment-Analyse — Rating-Trends und Bewertungstexte für ein bestimmtes Produkt oder eine Produktlinie ziehen.
- Wettbewerbsvergleich im Fast-Fashion-Bereich — H&Ms Sortimentsbreite und Preise mit Zara, Zalando und anderen Fast-Fashion-Händlern vergleichen.
Ist es legal, H&M zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
H&Ms Produktseiten bieten keinen stabilen öffentlichen JSON-Endpunkt, also muss ein DIY-Scraper die gerenderte Seite abrufen und parsen:
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
Es demonstriert kurz etwas und scheitert dann:
- Die Nutzungsbedingungen verbieten Bots und Crawler ausdrücklich. H&Ms ToS nennt „spiders, bots, crawlers, avatars or intelligent agents" direkt — das ist keine vage Klausel, um die man herumargumentieren kann, und ein Verstoß riskiert eine sofortige Zugriffssperre.
- Echte Anti-Bot-Infrastruktur schützt die Seite. Ein naiver, unauthentifizierter
requests-Call wird schnell herausgefordert oder blockiert, und ein browserbasierter Scraper braucht laufende Wartung, während sich die Abwehr weiterentwickelt. - Kein Kategorie-Baum-Endpunkt, um herauszufinden, was durchsuchbar ist. H&M veröffentlicht keinen Nav-Tree- oder Kategorie-Lookup-Call — entweder kennst du den Kategorie-Slug schon (aus einer Storefront-URL wie
ladies_jeansodermen_newarrivals_all), oder du hast keinen Weg hinein. - Daten pro Farbe und Größe stehen nicht in einem flachen Feld. Die eigentlichen Details einer Produktseite — jede kaufbare Farbe mit ihrem eigenen Preis und Bestand pro Größe — sind strukturierte Daten, die clientseitig hydriert werden, kein Wert, den man mit einem Selektor greifen kann.
- Kein offizielles Developer-Programm. H&M hat keine Self-Service-öffentliche API für seinen Storefront-Katalog, also gibt es keinen sanktionierten Kanal, um als externer Entwickler programmatischen Zugriff anzufragen.
Option 2: No-Code-Tools
Browser-Extensions und Point-and-Click-Scraper können eine Seite H&M-Suchergebnisse für einen einmaligen Abzug exportieren, aber sie lösen keine Kategorie-Slugs für dich auf, normalisieren keine Struktur pro Farbe/Größe und erben dieselbe Anti-Bot-Anfälligkeit wie DIY — nichts, das du nach Zeitplan laufen lassen möchtest.
Option 3: Eine strukturierte H&M-API
Für eine wiederholbare Pipeline verwandelt Crawloras H&M-API H&Ms eigene App-Backend-Storefront-Daten in strukturiertes JSON — Keyword-Suche, Kategorie-Listings und vollständige Produktdetails — ohne Page-Parsing oder Anti-Bot-Wartung. Suche per Keyword:
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 }
]
}
]
}
}
Anders als beim Kategorie-Browsing ist die Suche ehrlich bei einer Sackgasse — gib ein obskures oder unsinniges Keyword ein und du bekommst ein echtes leeres Ergebnis, keinen Empfehlungs-Fallback.
Durchstöbere eine Kategorie per Slug (dafür gibt es keinen Discovery-Endpunkt — category_id-Werte stammen aus bekannten Storefront-Pfaden, nicht aus einem Lookup-Call):
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"]
Eine Produktdetail-Response ist, wo die eigentliche Struktur steckt — jede kaufbare Farbe gruppiert mit ihrem eigenen echten Preis pro Größe und Live-Verfügbarkeit, plus Bewertungen, sofern das Produkt welche hat (die genauen Felder findest du in den Docs):
{
"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"
}
]
}
}
Suche und Listing geben dir nur einen repräsentativen Preis und einen Bestandswert pro Farbe — rufe das Produktdetail für die id ab (oder die Ziffern aus einer productpage.<id>.html-URL), wann immer du den echten Preis und Bestand pro Größe brauchst. Speichere eine Zeile pro Farbe pro Abruf, mit product_id als Schlüssel, und lass es nach Zeitplan erneut laufen, um Preisänderungen und Größen-Ausverkäufe zu verfolgen.
Was du sammeln kannst
Öffentliche Storefront-Daten: Suchergebnisse (id, name, price, currency, image, Bestandswert pro Farbe) mit einem echten leeren Ergebnis bei einer schlechten Anfrage; Kategorie-Listings nach bekanntem category_id-Slug; und vollständige Produktdetails — der echte Preis pro Größe und Live-Verfügbarkeit jeder Farbe, plus aggregiertes Rating und Kundenbewertungen, sofern das Produkt welche hat. Nur öffentliche Produktseiten-Daten — keine Konto-, Warenkorb- oder Checkout-Informationen.
Einschränkungen und häufige Herausforderungen
- Kein Kategorie-Baum-Discovery-Endpunkt. H&M bietet keine Möglichkeit, Kategorien aufzulisten —
category_id-Slugs wieladies_jeansodermen_newarrivals_allmüssen aus bekannten Storefront-Pfaden stammen, also baue und pflege deine eigene Slug-Liste. - Echte Anti-Bot-Infrastruktur im Frontend. Erwarte Herausforderungen bei naiven oder hochvolumigen automatisierten Requests direkt gegen H&Ms Seite.
- Suche und Listing sind nicht das vollständige Bild. Sie führen einen repräsentativen Preis und einen Bestandswert pro Farbe — behandle sie als Discovery-Schicht und rufe das Produktdetail für genauen Preis und Verfügbarkeit pro Größe ab.
- Bewertungen sind nicht garantiert. Viele Produkte haben keine — prüfe
review_count, bevor du annimmst, dass Bewertungsdaten vorhanden sind. - Die ToS nennt Bots und Crawler ausdrücklich. Behandle das als echte Einschränkung, nicht als Standardtext — bleib bei öffentlichen Produktseiten-Fakten und halte Rate-Limits ein.
Wo das eingesetzt wird
- Preisbeobachtung —
pricepro Farbe und Preissenkungen einer Produktlinie über eine Saison verfolgen. - Bestandsüberwachung auf Größenebene —
sizes[].in_stockundstock_quantitybeobachten, um zu sehen, welche Größen zuerst ausverkauft sind. - Wettbewerbsvergleich im Fast-Fashion-Bereich — Sortiment und Preise pro Kategorie mit Zara und Zalando vergleichen.
Sources
Leg los mit dem Sammeln
Probier es zuerst kostenlos aus: jage eine beliebige öffentliche URL durch den Free Web Scraper, oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
H&M-Daten passen gut zu anderen Fashion-Retail-APIs für plattformübergreifende Recherche — sieh dir how to scrape Zalando für einen 25-Markt-Fashion-Marktplatz an, oder how to scrape Zara für den nächsten Fast-Fashion-Vergleich. Teste die Such-, Listing- und Produkt-Endpunkte im Playground, prüfe das Schema in den API-Docs und schau dir die Preise an. Siehe auch wie du eine Web Scraping API auswählst und ist Web Scraping legal.
Häufig gestellte Fragen
Wie durchstöbere ich H&M-Kategorien mit einer API?
Übergib einen bekannten Kategorie-Slug an Crawloras /hm/listing-Endpunkt — H&M bietet keinen Kategorie-/Nav-Tree-Discovery-Call, also stammen category_id-Werte (z. B. ladies_jeans, men_newarrivals_all) aus bekannten Storefront-Pfaden statt aus einem Lookup-Call.
Liefert die H&M-Suche bei einem obskuren Keyword leere Ergebnisse?
Ja — anders als beim Kategorie-Browsing liefert /hm/search bei einem obskuren oder unsinnigen Keyword ein echtes leeres Ergebnis (null Produkte), statt auf eine Empfehlungsliste auszuweichen.
Bekomme ich Bestand pro Größe und Kundenbewertungen für ein H&M-Produkt?
Ja — /hm/product/{product_id} liefert jede kaufbare Farbe gruppiert mit ihrem eigenen echten Preis pro Größe und Live-Verfügbarkeit, plus aggregiertem Rating und Kundenbewertungen, sofern das Produkt welche hat. /hm/listing und /hm/search führen nur einen repräsentativen Preis und einen Bestandswert pro Farbe.