Tony Wang6 Min. LesezeitOld Navy scrapen 2026 (API & Python)
Scrape Old Navy, Gap, Banana Republic und Athleta 2026 — Suche, Kategorien, Preise und Filialstandorte als JSON — DIY, No-Code oder API.
Der schnellste Weg, Old Navy 2026 zu scrapen, ist eine strukturierte API aufzurufen, die normalisiertes JSON für Produktsuche, Kategorie-Browsing, Produktdetails und Store-Standorte liefert — statt Old Navys Seiten selbst zu parsen. Der größere Vorteil: Dieselbe API deckt auch den Rest der Gap-Inc.-Storefront-Familie ab — Gap, Banana Republic und Athleta teilen sich dieselben Endpunkte, umgeschaltet mit einem einzigen brand-Parameter. Dieser Guide behandelt alle drei Ansätze, was jeder zurückgibt, wo DIY scheitert, sowie die rechtlichen und Zugangsgrundlagen.
Warum Old Navy scrapen?
- Multi-Marken-Retail-Intelligence in einer Pipeline — Old Navy, Gap, Banana Republic und Athleta verkaufen alle über denselben Konzernmutter Gap Inc., und diese API spiegelt das mit einem einheitlichen Schema über alle vier Marken hinweg — ein einzelner Such- oder Produktdetail-Call deckt das gesamte Portfolio ab.
- Markenübergreifender Preisvergleich — dieselbe Silhouette (ein Basic-T-Shirt, eine Jogginghose) taucht oft bei Old Navy, Gap und Athleta zu unterschiedlichen Preispunkten auf; ein Vergleich bedeutet, jede Marke mit demselben Keyword abzufragen.
- Preis- und Rabatt-Tracking — Old Navy fährt häufige Promotions; regelmäßiges erneutes Ausführen von Suche oder Produktdetail verfolgt Preis- und Rabattbewegungen pro Farbe und Größe.
- Sortiments- und Kategorierecherche — sehen, was eine Kategorie führt und wie sich die Anzahl pro Marke verändert.
- Store-Coverage-Mapping — nahegelegene physische Filialen einer Marke per PLZ, Stadt oder Koordinaten finden, nützlich für Recherchen zu lokaler Verfügbarkeit oder Filialdichte.
Ist es legal, Old Navy zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
Ein naiver Ansatz ruft eine Produktseite ab und parst das gerenderte HTML:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://oldnavy.gap.com/browse/product.do?pid=123456002",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, color, and size availability are embedded in page data,
# not consistently exposed as stable, selectable markup
Es funktioniert als Demo, dann scheitert es:
- Vier separate Marken-Domains, eine zugrunde liegende Plattform. Old Navy, Gap, Banana Republic und Athleta betreiben jeweils eine eigene Storefront-Domain unter dem gemeinsamen Gap-Inc.-Dach — ein gegen
oldnavy.gap.comgebauter Scraper überträgt sich nicht sauber aufgap.com,bananarepublic.gap.comoderathleta.gap.com, ohne umgebaut zu werden. - Anti-Bot-Abwehr sitzt vor den Seiten. Routinemäßige, unauthentifizierte Requests werden schnell herausgefordert oder blockiert, und ein browserbasierter Scraper braucht laufende Pflege, während sich die Abwehr weiterentwickelt.
- Farbe und Größe fragmentieren ein einzelnes „Produkt". Ein Suchtreffer ist nicht das vollständige Produkt — jede Farbvariante trägt eine eigene Produkt-ID, und jede Größe innerhalb einer Farbe trägt einen eigenen Preis und eine eigene Verfügbarkeit, sodass ein einzelner Seiten-Fetch nie das vollständige Bild liefert.
- Kategorie-Navigation ist keine statische Liste. Es gibt keine veröffentlichte Liste von Kategorie-IDs zum Durchiterieren — du musst sie zuerst von der Live-Seite auflösen, und bei Gap, Banana Republic und Athleta rendert diese Navigation als rein clientseitiges JavaScript, sodass ein einfacher HTML-Fetch sie nicht einmal zeigt.
Option 2: No-Code-Tools
Point-and-Click-Scraper und Browser-Extensions können eine einzelne Suchergebnisseite für eine Marke exportieren, aber Preis- und Sortiments-Tracking über vier verwandte Marken hinweg nach Zeitplan ist ein wiederkehrender Pipeline-Job — dem eine API, die du aus einem Skript oder Cron-Job aufrufst, besser dient als ein manuelles Export-Tool.
Option 3: Eine strukturierte Old-Navy-API
Crawloras Old-Navy-API gibt normalisiertes JSON für Suche, Kategorie-Browsing, Produktdetails und Store-Standorte zurück — über Old Navy, Gap, Banana Republic und Athleta hinweg, ausgewählt mit einem einzigen brand-Parameter (on, gap, br oder at, standardmäßig on). Suche per Keyword:
curl "https://api.crawlora.net/api/v1/oldnavy/search?query=joggers&brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"
Wechsle mit demselben Call die Marke, indem du brand änderst:
curl "https://api.crawlora.net/api/v1/oldnavy/search?query=joggers&brand=gap" \
-H "x-api-key: $CRAWLORA_API_KEY"
Löse dann eine farbspezifische Produkt-ID aus einem Suchergebnis auf und ziehe das vollständige Detail in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/oldnavy"
hits = requests.get(f"{base}/search", headers=h, params={"query": "joggers", "brand": "on"}).json()["data"]["products"]
first_color = hits[0]["colors"][0]
pid = first_color["pid"]
detail = requests.get(f"{base}/product", headers=h, params={"pid": pid, "brand": "on"}).json()["data"]
Kategorie-Browsing braucht eine Kategorie-ID — löse zuerst aktuelle IDs auf (bisher nur Old Navy), dann ziehe das Listing dieser Kategorie samt Live-Facetten:
categories = requests.get(f"{base}/categories", headers=h).json()["data"]["categories"]
cid = categories[0]["cid"]
listing = requests.get(f"{base}/category", headers=h, params={"cid": cid, "brand": "on"}).json()["data"]
Store-Standorte nehmen eine PLZ, Stadt oder Koordinaten, pro Marke:
curl "https://api.crawlora.net/api/v1/oldnavy/stores?zip=94103&brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"
Prüfe die exakten Feldnamen in den Docs, bevor du eine Pipeline verdrahtest. Speichere eine Zeile pro Produkt pro Farbe pro Abruf, mit pid als Schlüssel, und führe Suche oder Produktdetail regelmäßig erneut aus, um Preis- und Verfügbarkeitsänderungen zu verfolgen.
Was du sammeln kannst
Öffentliche Produkt- und Store-Daten über alle vier Gap-Inc.-Marken hinweg, mit brand ausgewählt: Suchergebnisse (Produktübersichten mit Preisen und jeder Farbvariante); vollständige Produktdetails pro farbspezifischer pid, inklusive Preisen pro Größe; Kategorie-Listings mit Live-Suchfacetten, sobald eine cid aufgelöst ist (/oldnavy/categories löst derzeit nur IDs für Old Navy auf, da Gap, Banana Republic und Athleta ihre Navigation als rein clientseitiges JavaScript rendern); und nahegelegene physische Filialen per PLZ, Stadt oder Koordinaten, inklusive Adresse, Telefonnummer und Entfernung. Ausschließlich öffentliche Storefront-Daten — keine Konto-, Bestell- oder Zahlungsinformationen, und Store-Abfragen melden keine Lagerbestände pro Artikel.
Einschränkungen und häufige Herausforderungen
- Anti-Bot-Abwehr auf der Frontend-Seite. Erwarte Herausforderungen bei naiven oder hochvolumigen automatisierten Requests direkt gegen die Storefronts.
- Kategorie-IDs für drei der vier Marken sind noch nicht auflösbar.
/oldnavy/categoriesdeckt heute nur Old Navy ab — die Navigation von Gap, Banana Republic und Athleta rendert als rein clientseitiges JavaScript, es gibt also noch keine entsprechende ID-Liste für diese Marken. - Produkt-IDs sind farbspezifisch. Ein Suchtreffer ist keine einzelne Produkt-ID — zieh die
pidaus demcolors[]-Array eines Ergebnisses, bevor du das Detail anfragst, sonst bekommst du die falsche Variante. - Keine Lagerbestände pro Artikel bei Store-Abfragen.
/oldnavy/storesgibt nahegelegene physische Filialen und Kontaktdaten zurück, nicht ob ein bestimmter Artikel an diesem Standort auf Lager ist. - Nur öffentliche Daten. Das ist, was eine Produkt-, Kategorie- und Store-Locator-Seite bereits öffentlich zeigt — kein Weg um einen Login herum oder in kontogebundene Daten hinein.
Wo das eingesetzt wird
- Markenübergreifende Preis-Intelligence — verfolgen, wie derselbe Stil (ein Basic-T-Shirt, eine Jogginghose, eine Steppjacke) bei Old Navy, Gap, Banana Republic und Athleta bepreist wird.
- Sortimentsrecherche — Kategorieanzahl und Abdeckung nach Keyword messen, pro Marke.
- Mapping von lokaler Verfügbarkeit und Filialdichte — Store-Abfragen per PLZ mit Produktsuche kombinieren, um regionale Abdeckung zu modellieren.
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.
Teste die Such-, Produkt-, Kategorie- und Store-Endpunkte im Playground, prüfe das Schema in den API-Docs und sieh dir die Preise an. Für dieselbe Such-zu-Detail-Struktur bei einem Fashion-Marktplatz mit länderspezifischen Storefronts siehe how to scrape Zalando; für einen Vergleich mit einer einzelnen Sportbekleidungsmarke siehe how to scrape Nike; und für eine weitere Fast-Fashion-Kette siehe how to scrape Zara. Siehe auch how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Deckt die Old-Navy-API auch Gap, Banana Republic und Athleta ab?
Ja — /oldnavy/search, /oldnavy/category, /oldnavy/product und /oldnavy/stores nehmen alle einen brand-Parameter (on, gap, br oder at, standardmäßig on) entgegen, um die Storefront auszuwählen. /oldnavy/categories löst derzeit nur IDs für Old Navy auf, da die anderen drei Marken ihre Navigation als rein clientseitiges JavaScript rendern.
Wie durchsuche ich Old-Navy-Kategorien mit einer API?
Old Navys Storefront-Navigation ist nicht als statische ID-Liste veröffentlicht — rufe /oldnavy/categories auf, um die aktuellen Kategorie-IDs als Name/cid-Paare aufzulösen, und übergib dann eine cid an /oldnavy/category für das Produktlisting dieser Kategorie.
Kann ich nahegelegene Old-Navy-Filialen finden?
Ja — /oldnavy/stores gibt nahegelegene physische Filialen nach PLZ, Stadt oder Koordinaten zurück, inklusive Adresse, Telefonnummer und Entfernung. Es meldet keine Lagerbestände pro Artikel.