Wie man Walmart-Produktdaten scrapt: JSON, Geo-Preise, Blockaden
Walmart hat keine öffentliche API, personalisiert jede Seite und schützt Scraper mit einem Drücken-und-Halten-CAPTCHA. Aber sein Next.js JSON liefert Ihnen saubere strukturierte Daten — wenn Ihre IP die Tür überlebt. Hier ist die gesamte Methode.
Walmart ist der größte Einzelhändler der Welt, was seine Preisgestaltung zu einem lebendigen wirtschaftlichen Signal macht — und es gibt keine öffentliche Walmart-API, um sie zu lesen. Deshalb scrapen die Leute. Die gute Nachricht: Walmart ist eine Next.js-Seite, und jede Produktseite enthält einen einzigen JSON-Blob mit den vollständigen, bereits analysierten Daten. Die schlechte Nachricht: Eine Rechenzentrums-IP trifft auf ein Drücken-und-Halten-CAPTCHA, bevor sie jemals dieses JSON sieht. Diese Anleitung behandelt die zuverlässige Methode — lesen Sie das Hydrations-JSON anstelle von gestyltem HTML, überwinden Sie HUMANS Bot-Abwehr mit der richtigen IP und ziehen Sie standortspezifische Geo-Preise.
Hören Sie auf, Tags zu analysieren. Lesen Sie das __NEXT_DATA__ JSON
Die meisten Tutorials lehren Sie, das h1 für den Titel und ein span für den Preis zu finden. Das funktioniert, bis Walmart seine Klassennamen umstellt, was oft der Fall ist. Der dauerhafte Ansatz: Walmart rendert React aus einem Skript-Tag mit id="__NEXT_DATA__", das das gesamte Produktmodell als JSON enthält. Greifen Sie einmal darauf zu und jedes Feld ist strukturiert:
import requests, json
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
proxies = {"http": "http://USER:PASS@gate.quantumproxies.io:8000",
"https": "http://USER:PASS@gate.quantumproxies.io:8000"}
url = "https://www.walmart.com/ip/1756765288"
r = requests.get(url, headers=headers, proxies=proxies, timeout=20)
soup = BeautifulSoup(r.text, "html.parser")
blob = soup.find("script", id="__NEXT_DATA__")
data = json.loads(blob.string)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
print(product["name"], product["priceInfo"]["currentPrice"]["price"])
Der genaue Schlüsselpfad ändert sich im Laufe der Zeit, also drucken Sie die obersten Schlüssel einmal aus und navigieren Sie von dort. Aber das Prinzip bleibt: Das JSON ist die Quelle der Wahrheit und enthält Preis, Verfügbarkeit, Verkäufer, Varianten und Bewertungen an einem Ort — kein feldspezifischer Selektor, der brechen könnte.
Die Tür: "Roboter oder Mensch?"
Führen Sie die Anfrage von einer nackten Rechenzentrums-IP aus und Sie erhalten kein Produkt-JSON — Sie erhalten eine Seite, die sagt "Roboter oder Mensch? Aktivieren und halten Sie die Taste, um zu bestätigen, dass Sie ein Mensch sind." Das ist HUMAN (ehemals PerimeterX), die Bot-Abwehrschicht, die Walmart betreibt. Sie bewertet IP-Reputation, TLS-Fingerabdruck und Header zusammen, und eine Drücken-und-Halten-Herausforderung ist das, was sie serviert, wenn die Punktzahl niedrig ist.
Sie lösen dieses CAPTCHA nicht; Sie vermeiden es, es auszulösen. Der größte Hebel ist die IP. Ein Residential Proxy präsentiert sich als Verbindung eines echten Walmart-Käufers, was die Punktzahl hoch genug hält, um die echte Seite zu servieren. Rechenzentrumsbereiche werden als verdächtig vorbewertet und treffen bei der ersten Anfrage auf die Mauer. Unsere Analyse von wie HUMAN Automatisierung erkennt deckt auf, was sonst noch diese Punktzahl beeinflusst.

Geo-Preise: ein Produkt, viele Preise
Walmart-Preise und Lagerbestände sind standortspezifisch. Dasselbe Produkt zeigt je nach Einkaufsort einen anderen Preis und Verfügbarkeit, sodass ein Scraper ohne eingestellten Standort einen willkürlichen Laden liest. Stellen Sie den Standort per Postleitzahl ein, um zu kontrollieren, welchen Laden Sie bepreisen — Walmart speichert ihn in einem Standort-Cookie, also senden Sie ihn bei jeder Anfrage mit:
# pin the store location by US ZIP before reading price/stock
cookies = {"assortmentStoreId": "3081", "locationData": '{"postalCode":"10001"}'}
r = requests.get(url, headers=headers, cookies=cookies,
proxies=proxies, timeout=20)
# now priceInfo + availabilityStatus reflect that store
Um ein Produkt über Märkte hinweg zu vergleichen, durchlaufen Sie Ihre Postleitzahlliste und paaren Sie jede mit einem Residential-Exit in dieser Region — ein New Yorker Käufer, der Preise eines NYC-Ladens liest, ist viel kohärenter als eine Anfrage, die einen Standort behauptet, aber woanders endet. Diese geographische Konsistenz ist genau das, worauf Wettbewerber-Preisüberwachung angewiesen ist.
Suchseiten und Paginierung
Für Katalogarbeiten scrapen Sie Suchergebnisse, nicht nur Produktseiten. Zwei Dinge zu wissen: Walmart personalisiert die Suchreihenfolge pro Benutzer, erwarten Sie also keine stabile Rangfolge über mehrere Läufe hinweg, und die Ergebnisse erstrecken sich über mehrere Seiten, die Sie mit einem page-Parameter durchblättern. Das gleiche __NEXT_DATA__-Muster gilt — das Such-JSON enthält die vollständige Liste der Artikel mit Preisen und IDs, sodass Sie selten die Produktseite berühren müssen, es sei denn, Sie möchten Details auf Variantenebene:
def search(query, pages=5):
items = []
for page in range(1, pages + 1):
url = f"https://www.walmart.com/search?q={query}&page={page}"
html = requests.get(url, headers=headers, cookies=cookies,
proxies=proxies, timeout=20).text
blob = BeautifulSoup(html, "html.parser").find("script", id="__NEXT_DATA__")
data = json.loads(blob.string)
stacks = data["props"]["pageProps"]["initialData"]["searchResult"]["itemStacks"]
for stack in stacks:
items += stack["items"]
return items
Wann es sich nicht mehr lohnt, es selbst zu machen
Roh-Anfragen plus Residential-IPs bringen Sie bei Walmart weit. Der Punkt, an dem es sich nicht mehr lohnt, ist der Maßstab: rotierende Exits pro Anfrage, erneutes Versuchen derjenigen, die immer noch auf die Mauer treffen, und die Konsistenz der Laden-Cookie-Logik über Tausende von Postleitzahlen hinweg aufrechtzuerhalten, ist eine echte Wartungsbelastung. Eine Scraper API, die den Browser-Fingerabdruck trägt, Residential-IPs rotiert und geparstes JSON zurückgeben kann, reduziert dies auf einen einzigen Aufruf — Sie senden eine Walmart-URL und erhalten das Produktmodell zurück, Blockaden behandelt. Wenn Ihre Seite als CAPTCHA-Hülle statt als Daten zurückkommt, ist das das klassische leere-Seiten-Symptom und es ist ein Rendering- und IP-Problem, kein Parser-Fehler.

Erhalten Sie Residential-IPs, die Walmart erreichen
Häufig gestellte Fragen
Hat Walmart eine Produktdaten-API?
Es gibt keine offene öffentliche API für beliebige Produkt- und Preisdaten, weshalb Scraping der übliche Weg ist. Walmarts Affiliate- und Marketplace-Verkäufer-APIs existieren, sind aber eingeschränkt und begrenzt im Umfang. Für die breite Sammlung von Produkt-, Preis- und Verfügbarkeitsdaten ist das Lesen des __NEXT_DATA__ JSON der Seite über Residential-IPs die praktische Methode.
Wie scrape ich Walmart-Preise, ohne blockiert zu werden?
Leiten Sie Anfragen über Residential-Proxies, damit HUMANS Bot-Abwehr Sie als echten Käufer bewertet, senden Sie einen kohärenten Browser User-Agent und Accept-Language und lesen Sie das Hydrations-JSON, anstatt viele Selektor-Anfragen zu stellen. Fixieren Sie den Laden per Postleitzahl-Cookie und halten Sie die Exit-Region damit konsistent. Diese Kombination vermeidet das Drücken-und-Halten-CAPTCHA bei den meisten Anfragen.
Warum zeigt Walmart unterschiedliche Preise für dasselbe Produkt?
Walmart-Preise und Lagerbestände sind auf Ladenebene. Der Preis, den Sie sehen, hängt vom für die Sitzung eingestellten Standort ab, sodass zwei Anfragen mit unterschiedlichen Postleitzahl-Standorten legitimerweise unterschiedliche Preise zurückgeben. Um vergleichbare Daten zu sammeln, fixieren Sie die Postleitzahl explizit und stimmen Sie Ihren Proxy-Exit auf diese Region ab, anstatt Walmart von der IP raten zu lassen.
Ist das __NEXT_DATA__ JSON besser als das Parsen von HTML?
Ja, für die Haltbarkeit. Walmarts sichtbare Klassennamen ändern sich häufig, was CSS-Selektor-Scraper bricht, aber das Next.js Hydrations-JSON ist ein stabiles strukturiertes Modell des Produkts mit Preis, Varianten, Verkäufer und Verfügbarkeit in einem Objekt. Parsen Sie das JSON einmal und Sie vermeiden einen Stapel fragiler feldspezifischer Selektoren.
Walmart ist nicht schwer, weil die Daten versteckt sind — sie sind direkt im Seiten-JSON. Es ist schwer, weil die Tür prüft, wer klopft. Lesen Sie __NEXT_DATA__ anstelle von Tags, setzen Sie den Laden per Postleitzahl und klopfen Sie mit einer Residential-IP, und Sie erhalten saubere, vergleichbare Produktdaten im großen Maßstab. Für Big-Box-Preisarbeiten im weiteren Sinne erstreckt sich das gleiche Playbook auf Best Buy und Target.