Como Extrair Dados de Produtos do Walmart: JSON, Preços Geográficos, Bloqueios
O Walmart não possui uma API pública, personaliza cada página e bloqueia scrapers com um CAPTCHA de pressionar e segurar. Mas seu JSON do Next.js oferece dados estruturados limpos — se seu IP sobreviver à entrada. Aqui está o método completo.
O Walmart é o maior varejista do mundo, o que torna seus preços um sinal econômico ao vivo — e não há API pública do Walmart para lê-los. Então, as pessoas fazem scraping. A boa notícia: o Walmart é um site Next.js, e cada página de produto possui um único blob JSON com todos os dados limpos já analisados. A má notícia: um IP de datacenter enfrenta um CAPTCHA de pressionar e segurar antes de ver esse JSON. Este guia cobre o método confiável — leia o JSON de hidratação em vez do HTML estilizado, supere a defesa contra bots do HUMAN com o IP certo e obtenha preços geográficos a nível de loja.
Pare de analisar tags. Leia o JSON __NEXT_DATA__
A maioria dos tutoriais ensina a encontrar o h1 para o título e um span para o preço. Isso funciona até o Walmart reorganizar seus nomes de classe, o que acontece com frequência. A abordagem durável: o Walmart renderiza React a partir de uma tag de script com id="__NEXT_DATA__" contendo todo o modelo de produto como JSON. Pegue isso uma vez e cada campo está estruturado:
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"])
O caminho exato da chave muda com o tempo, então imprima as chaves de nível superior uma vez e navegue a partir daí. Mas o princípio se mantém: o JSON é a fonte da verdade e inclui preço, disponibilidade, vendedor, variantes e classificações em um só lugar — sem seletor por campo para quebrar.
A porta: "Robô ou humano?"
Execute a solicitação a partir de um IP de datacenter simples e você não obterá o JSON do produto — você receberá uma página que diz "Robô ou humano? Ative e segure o botão para confirmar que você é humano." Esse é o HUMAN (anteriormente PerimeterX), a camada de defesa contra bots que o Walmart utiliza. Ele avalia a reputação do IP, a impressão digital TLS e os cabeçalhos juntos, e um desafio de pressionar e segurar é o que ele serve quando a pontuação é baixa.
Você não resolve esse CAPTCHA; você evita acioná-lo. A maior alavanca única é o IP. Um proxy residencial se apresenta como a conexão de um comprador real do Walmart, o que mantém a pontuação alta o suficiente para servir a página real. Faixas de datacenter são pré-avaliadas como suspeitas e enfrentam o bloqueio na primeira solicitação. Nossa análise de como o HUMAN detecta automação cobre o que mais alimenta essa pontuação.

Preços geográficos: um produto, muitos preços
Os preços e estoques do Walmart são específicos da loja. O mesmo item mostra um preço e disponibilidade diferentes dependendo da localização de compra, então um scraper sem localização definida está lendo uma loja arbitrária. Defina a localização por CEP para controlar qual loja você está precificando — o Walmart a mantém em um cookie de localização, então envie-o em cada solicitação:
# 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
Para comparar um produto em diferentes mercados, percorra sua lista de CEPs e emparelhe cada um com uma saída residencial naquela região — um comprador de Nova York lendo preços de lojas de NYC é muito mais coerente do que uma solicitação que afirma uma localização mas sai em outro lugar. Essa consistência geográfica é exatamente o que o monitoramento de preços de concorrentes depende.
Páginas de busca e paginação
Para trabalho de catálogo, extraia resultados de busca, não apenas páginas de produtos. Duas coisas a saber: o Walmart personaliza a ordem de busca por usuário, então não espere uma classificação estável entre execuções, e os resultados abrangem várias páginas que você percorre com um parâmetro page. O mesmo padrão __NEXT_DATA__ se aplica — o JSON de busca carrega a lista completa de itens com preços e IDs, então raramente você precisa tocar na página do produto, a menos que queira detalhes a nível de variante:
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
Quando parar de fazer isso manualmente
Solicitações brutas mais IPs residenciais levam você longe no Walmart. O ponto em que isso deixa de valer a pena é a escala: girar saídas por solicitação, tentar novamente as que ainda enfrentam o bloqueio, e manter a lógica de cookies de loja coerente em milhares de CEPs é uma verdadeira carga de manutenção. Uma Scraper API que carrega a impressão digital do navegador, gira IPs residenciais e pode retornar JSON analisado colapsa isso em uma única chamada — você envia uma URL do Walmart e obtém o modelo de produto de volta, bloqueios tratados. Se sua página voltar como a casca do CAPTCHA em vez de dados, esse é o clássico sintoma de página vazia e é um problema de renderização e IP, não um bug de parser.

Obtenha IPs residenciais que alcancem o Walmart
Perguntas frequentes
O Walmart possui uma API de dados de produtos?
Não há uma API pública aberta para dados arbitrários de produtos e preços, por isso a extração é a rota comum. As APIs de afiliados e vendedores do marketplace do Walmart existem, mas são restritas e limitadas em escopo. Para coleta ampla de produtos, preços e disponibilidade, ler o JSON __NEXT_DATA__ da página através de IPs residenciais é o método prático.
Como faço para extrair preços do Walmart sem ser bloqueado?
Roteie solicitações através de proxies residenciais para que a defesa contra bots do HUMAN o classifique como um comprador real, envie um User-Agent de navegador coerente e Accept-Language, e leia o JSON de hidratação em vez de martelar muitas solicitações de seletor. Fixe a loja por cookie de CEP e mantenha a região de saída consistente com ele. Essa combinação evita o CAPTCHA de pressionar e segurar na maioria das solicitações.
Por que o Walmart mostra preços diferentes para o mesmo produto?
Os preços e estoques do Walmart são a nível de loja. O preço que você vê depende da localização definida para a sessão, então duas solicitações com diferentes localizações de CEP retornam legitimamente preços diferentes. Para coletar dados comparáveis, fixe o CEP explicitamente e combine sua saída de proxy com essa região em vez de deixar o Walmart adivinhar a partir do IP.
O JSON __NEXT_DATA__ é melhor do que analisar HTML?
Sim, para durabilidade. Os nomes de classe visíveis do Walmart mudam frequentemente, quebrando scrapers de seletores CSS, mas o JSON de hidratação do Next.js é um modelo estruturado estável do produto com preço, variantes, vendedor e disponibilidade em um único objeto. Analise o JSON uma vez e você evita uma pilha de seletores frágeis por campo.
O Walmart não é difícil porque os dados estão escondidos — eles estão bem ali no JSON da página. É difícil porque a porta verifica quem está batendo. Leia __NEXT_DATA__ em vez de tags, defina a loja por CEP, e bata com um IP residencial, e você obterá dados de produtos limpos e comparáveis em escala. Para trabalho de preços em grandes varejistas de forma mais ampla, o mesmo manual se estende para Best Buy e Target.