# Jak zeskrobać dane produktów Walmart: JSON, ceny geo, blokady

Walmart nie ma publicznego API, personalizuje każdą stronę i zabezpiecza skrobaki CAPTCHA z przyciskiem do przytrzymania. Ale jego JSON Next.js daje ci czyste, strukturalne dane — jeśli twój IP przetrwa wejście. Oto cała metoda.

Walmart jest największym detalistą na świecie, co czyni jego ceny żywym sygnałem ekonomicznym — i nie ma publicznego API Walmart, aby je odczytać. Więc ludzie skrobią. Dobra wiadomość: Walmart to strona Next.js, a każda strona produktu zawiera pojedynczy blob JSON z pełnymi, czystymi danymi już przeanalizowanymi. Zła wiadomość: IP centrum danych napotyka CAPTCHA z przyciskiem do przytrzymania, zanim zobaczy ten JSON. Ten przewodnik obejmuje niezawodną metodę — czytaj JSON hydratacyjny zamiast stylizowanego HTML, przejdź przez obronę botów HUMAN z odpowiednim IP i pobierz ceny geo na poziomie sklepu.

## Przestań analizować tagi. Czytaj JSON __NEXT_DATA__

Większość poradników uczy cię, jak znaleźć `h1` dla tytułu i `span` dla ceny. To działa, dopóki Walmart nie przetasuje nazw klas, co zdarza się często. Trwałe podejście: Walmart renderuje React z tagu skryptu z `id="__NEXT_DATA__"`, zawierającym cały model produktu jako JSON. Pobierz to raz, a każde pole jest strukturalne:

```python
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@residentialpremium.quantumproxies.io:8080",
           "https": "http://USER:PASS@residentialpremium.quantumproxies.io:8080"}

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"])
```

Dokładna ścieżka klucza zmienia się z czasem, więc wydrukuj klucze najwyższego poziomu raz i nawiguj stamtąd. Ale zasada pozostaje: JSON jest źródłem prawdy i zawiera cenę, dostępność, sprzedawcę, warianty i oceny w jednym miejscu — żadnego selektora na pole, który mógłby się zepsuć.

## Drzwi: "Robot czy człowiek?"

Uruchom żądanie z gołego IP centrum danych, a nie dostaniesz JSON produktu — dostaniesz stronę, która mówi *"Robot czy człowiek? Aktywuj i przytrzymaj przycisk, aby potwierdzić, że jesteś człowiekiem."* To jest HUMAN (dawniej PerimeterX), warstwa obrony botów, którą prowadzi Walmart. Waży reputację IP, odcisk TLS i nagłówki razem, a wyzwanie z przyciskiem do przytrzymania to, co serwuje, gdy wynik jest niski.

Nie rozwiązujesz tej CAPTCHA; unikasz jej wywołania. Największą dźwignią jest IP. [Proxy rezydencyjne](https://quantumproxies.io/residential-proxies) prezentuje się jako połączenie prawdziwego klienta Walmart, co utrzymuje wynik wystarczająco wysoki, aby serwować prawdziwą stronę. Zakresy centrów danych są wstępnie oceniane jako podejrzane i dostają ścianę na pierwsze żądanie. Nasza analiza [jak HUMAN wykrywa automatyzację](https://quantumproxies.io/blog/how-perimeterx-human-detects-automation-in-2026) obejmuje, co jeszcze wpływa na ten wynik.

![Ścieżka scrapingu Walmart w czterech krokach: URL produktu, wyjście rezydencyjne, które wygląda jak prawdziwy kupujący, tag script __NEXT_DATA__ z pełnym modelem produktu, a potem ustrukturyzowane wiersze; karta zestawia to z selektorami HTML dla poszczególnych pól, które psują się za każdym razem, gdy Walmart przetasuje nazwy klas.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335161/blog/generated/qp-b9-024-diag1.png)
*Przeprowadź przez wyjście rezydencyjne, a następnie odczytaj JSON hydratacyjny — żadnych kruchych selektorów HTML na ścieżce.*

## Ceny geo: jeden produkt, wiele cen

Ceny i zapasy Walmart są specyficzne dla sklepu. Ten sam przedmiot pokazuje inną cenę i dostępność w zależności od lokalizacji zakupów, więc skrobak bez ustawionej lokalizacji czyta jeden arbitralny sklep. Ustaw lokalizację według kodu ZIP, aby kontrolować, który sklep wyceniasz — Walmart przechowuje to w ciasteczku lokalizacji, więc wysyłaj je przy każdym żądaniu:

```python
# 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
```

Aby porównać produkt na różnych rynkach, przejdź przez swoją listę ZIP i sparuj każdy z wyjściem rezydencyjnym w tym regionie — klient z Nowego Jorku czytający ceny sklepu NYC jest znacznie bardziej spójny niż żądanie, które twierdzi, że jest z jednej lokalizacji, ale wychodzi gdzie indziej. Ta spójność geo to dokładnie to, na czym opiera się [monitorowanie cen konkurencji](https://quantumproxies.io/blog/competitor-price-monitoring-with-proxies).

## Strony wyszukiwania i paginacja

Do pracy katalogowej, zeskrob wyniki wyszukiwania, a nie tylko strony produktów. Dwie rzeczy do zapamiętania: Walmart personalizuje kolejność wyszukiwania dla każdego użytkownika, więc nie oczekuj stabilnej pozycji w różnych uruchomieniach, a wyniki obejmują wiele stron, które przeglądasz za pomocą parametru `page`. Ten sam wzorzec `__NEXT_DATA__` ma zastosowanie — JSON wyszukiwania zawiera pełną listę pozycji z cenami i identyfikatorami, więc rzadko musisz dotykać strony produktu, chyba że chcesz szczegóły na poziomie wariantu:

```python
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
```

## Kiedy przestać robić to ręcznie

Surowe żądania plus IP rezydencyjne dają ci długą drogę na Walmart. Punkt, w którym przestaje to się opłacać, to skala: rotacja wyjść na żądanie, ponowne próby tych, które nadal trafiają na ścianę, i utrzymanie spójności logiki ciasteczek sklepu w tysiącach ZIP to prawdziwe obciążenie konserwacyjne. [Scraper API](https://quantumproxies.io/scraper-api), które przenosi odcisk palca przeglądarki, rotuje IP rezydencyjne i może zwrócić przeanalizowany JSON, redukuje to do jednego wywołania — wysyłasz URL Walmart i otrzymujesz model produktu z powrotem, bloki obsługiwane. Jeśli twoja strona wraca jako powłoka CAPTCHA zamiast danych, to klasyczny [objaw pustej strony](https://quantumproxies.io/blog/scraper-returns-empty-page-javascript) i to problem z renderowaniem i IP, a nie błąd parsera.

![To samo żądanie produktu Walmart z dwóch IP: IP z centrum danych dostaje stronę HUMAN „Robot or human?” z przyciskiem do przytrzymania, a IP rezydencyjne dostaje prawdziwą stronę z JSON produktu w __NEXT_DATA__; karta wymienia, co wpływa na ocenę zaufania: reputacja IP, odcisk palca TLS i nagłówki.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335161/blog/generated/qp-b9-024-diag2.png)
*Nie rozwiązujesz bramy z przyciskiem do przytrzymania — utrzymujesz swój wynik zaufania wystarczająco wysoki, aby nigdy się nie pojawiła.*

[Zdobądź IP rezydencyjne, które docierają do Walmart](https://quantumproxies.io/residential-proxies)

## Często zadawane pytania

### Czy Walmart ma API danych produktów?

Nie ma otwartego publicznego API dla dowolnych danych produktów i cen, dlatego skrobanie jest powszechną drogą. Istnieją API dla afiliantów i sprzedawców na rynku Walmart, ale są one ograniczone i mają ograniczony zakres. Do szerokiego zbierania danych o produktach, cenach i dostępności, odczytywanie JSON `__NEXT_DATA__` strony przez IP rezydencyjne jest praktyczną metodą.

### Jak zeskrobać ceny Walmart bez blokady?

Przekieruj żądania przez proxy rezydencyjne, aby obrona botów HUMAN oceniła cię jako prawdziwego klienta, wyślij spójny User-Agent przeglądarki i Accept-Language, i czytaj JSON hydratacyjny zamiast uderzać w wiele żądań selektorów. Przypnij sklep przez ciasteczko ZIP i utrzymuj spójność regionu wyjścia z nim. Ta kombinacja unika CAPTCHA z przyciskiem do przytrzymania w większości żądań.

### Dlaczego Walmart pokazuje różne ceny dla tego samego produktu?

Ceny i zapasy Walmart są na poziomie sklepu. Cena, którą widzisz, zależy od lokalizacji ustawionej dla sesji, więc dwa żądania z różnymi lokalizacjami ZIP rzeczywiście zwracają różne ceny. Aby zebrać porównywalne dane, ustaw ZIP explicite i dopasuj swoje wyjście proxy do tego regionu, zamiast pozwalać Walmartowi zgadywać na podstawie IP.

### Czy JSON __NEXT_DATA__ jest lepszy niż analizowanie HTML?

Tak, dla trwałości. Widoczne nazwy klas Walmart zmieniają się często, łamiąc skrobaki CSS-selektorów, ale JSON hydratacyjny Next.js jest stabilnym, strukturalnym modelem produktu z ceną, wariantami, sprzedawcą i dostępnością w jednym obiekcie. Przeanalizuj JSON raz i unikniesz stosu kruchych selektorów na pole.

Walmart nie jest trudny, ponieważ dane są ukryte — są tam w JSON strony. Jest trudny, ponieważ drzwi sprawdzają, kto puka. Czytaj `__NEXT_DATA__` zamiast tagów, ustaw sklep przez ZIP i pukaj z IP rezydencyjnym, a uzyskasz czyste, porównywalne dane produktów na dużą skalę. Dla pracy z cenami w dużych sklepach bardziej ogólnie, ten sam podręcznik rozszerza się na [Best Buy i Target](https://quantumproxies.io/blog/scrape-bestbuy-target-stock-prices).

[Zeskrobać Walmart jednym wywołaniem API](https://quantumproxies.io/scraper-api)
