Resumo: Este guia explica passo a passo como extrair dados de produtos do Walmart na Web de ponta a ponta em Python, desde a análise do JSON oculto __NEXT_DATA__ até ao escalonamento com proxies, tentativas de repetição e recuperações assíncronas. Também estabelece uma linha clara sobre quando uma API de scraper gerida é melhor do que uma solução DIY.Introdução: extrair dados do Walmart em grande escala em 2026
O Walmart é o tipo de catálogo que justifica um pipeline completo de preços ou de inteligência competitiva. Se precisar apenas de um produto, um script de 10 linhas resolve o problema. Se precisar de milhares de SKUs atualizados diariamente, o panorama muda rapidamente: JSON oculto, limites de paginação, preços sensíveis ao código postal e uma pilha anti-bot que analisa muito mais do que o seu User-Agent. Este tutorial de 2026 aborda como extrair dados de produtos do Walmart da forma como as equipas realmente o fazem em produção, incluindo o ponto em que faz sentido parar de lutar contra a camada anti-bot e mudar para uma API gerida.
Porquê extrair dados de produtos do Walmart
Antes de entrarmos em como fazer web scraping do Walmart em código, é útil esclarecer por que razão as pessoas o fazem. Os casos de utilização tendem a agrupar-se em torno de um conjunto de tarefas: inteligência de preços e monitorização de MAP entre revendedores, mapeamento de catálogos e categorias, alertas de reabastecimento, análise de sentimentos nas avaliações e cobertura de SKUs da concorrência. As listagens próprias do Walmart e os vendedores de terceiros no mercado partilham o mesmo esquema de página de produto, o que torna o conjunto de dados excepcionalmente útil para compreender como toda uma categoria define preços e efetua envios em tempo real. Para além de títulos e preços, as páginas de produtos também apresentam classificações, contagem de avaliações, matrizes de variantes, informações do vendedor e dados de processamento por código postal, os campos que realmente alimentam os modelos de preços.
É legal fazer scraping do Walmart? Ética e limites
Primeiro, uma breve advertência: isto é uma orientação geral, não um conselho jurídico. Os dados públicos de produtos no walmart.com são geralmente considerados lícitos quando recolhidos a um ritmo lento e respeitoso que não prejudique o serviço, mas o risco jurídico é específico de cada jurisdição e de cada contrato (os Termos de Utilização do Walmart são importantes). Leia walmart.com/robots.txt e respeite as suas Disallow diretrizes. Evite tudo o que exija um login ou que contenha dados pessoais, incluindo endereços de e-mail de avaliadores, números de encomenda e detalhes de pagamento. O RGPD e a CCPA restringem a forma como lida com PII, mesmo que seja tecnicamente acessível. Uma opção segura por defeito: limite-se aos campos de produto, preço, avaliação e stock, regule a frequência de forma rigorosa e consulte um advogado antes de qualquer implementação comercial. (Se quiser uma leitura mais aprofundada, o nosso guia mais abrangente sobre a legalidade do web scraping aborda a jurisprudência.)
Ferramentas e configuração do projeto
Precisa do Python 3.11+ e de um ambiente virtual limpo. O kit mínimo:
python -m venv .venv && source .venv/bin/activate
pip install requests httpx beautifulsoup4 pandas logururequests(ouhttpxse quiser async): o cliente HTTPbeautifulsoup4: análise de HTML para o DOM visívelpandas: exportação tabular epd.json_normalizepara JSON aninhadologuru: registos estruturados que resistem a execuções prolongadas
Uma estrutura de pastas razoável:
walmart-scraper/
├── walmart/
│ ├── fetch.py # request + retry layer
│ ├── parse.py # __NEXT_DATA__ extractor
│ ├── discover.py # sitemap + search crawler
│ └── scaler.py # async runner
├── data/
└── main.pyComo o Walmart apresenta os dados dos produtos: estrutura HTML + NEXT_DATA JSON
O Walmart.com é uma aplicação Next.js. Quando solicita uma página de produto, o servidor devolve um shell HTML mínimo, juntamente com um <script id="__NEXT_DATA__"> elemento que transporta todo o estado pré-renderizado da página como JSON. O navegador hidrata então esse estado na árvore React que vê; os seletores CSS captam apenas o que sobrevive à hidratação, o que no Walmart é um pequeno subconjunto do registo subjacente.
Isso é importante porque a maioria dos tickets do tipo «o meu scraper do Walmart avariou-se» provém de scrapers que utilizam apenas CSS e que perseguem nomes de classes que mudam a cada lançamento. O JSON estruturado em __NEXT_DATA__ é muito mais estável: contém o objeto de produto canónico, incluindo faixas de preço, variantes, avaliações, vendedores, opções de entrega e disponibilidade com reconhecimento de CEP. Trate-o como o alvo principal de análise e o DOM renderizado como um recurso alternativo para campos que não consegue encontrar no JSON.
Passo 1: como fazer web scraping das páginas de produtos do Walmart com Python
Comece por algo simples. Escolha um URL canónico do tipo https://www.walmart.com/ip/<slug>/<id> e aprenda a fazer web scraping no Walmart com um único GET antes de se aventurar na concorrência ou em proxies.
import requests
URL = "https://www.walmart.com/ip/AT-T-iPhone-14-128GB-Midnight/1756765288"
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0.0.0 Safari/537.36"
),
"Accept-Language": "en-US,en;q=0.9",
}
resp = requests.get(URL, headers=HEADERS, timeout=20)
print(resp.status_code, len(resp.text))Duas respostas são interessantes aqui: um 200 com o HTML do produto ou um 200 com um intersticial «Robô ou humano?». O intersticial é um bloqueio suave, não um 4xx, por isso verifique sempre o corpo, não apenas o código de estado. Se a resposta contiver a string do intersticial ou for invulgarmente curta (alguns KB), trate o pedido como falhado e recue.
Envie cabeçalhos realistas, semelhantes aos de um navegador
Uma solicitação Python básica é sinalizada imediatamente. No mínimo, envie um cabeçalho do Chrome ou Firefox atual User-Agent, além de Accept, Accept-Language, Sec-Ch-Ua, e um Referer (um resultado de pesquisa do Google ou a página de categoria relevante do Walmart). Mantenha um pequeno conjunto de strings de UA e alterne por sessão, não por pedido. Esteja também ciente de que o Walmart inspeciona o handshake TLS (impressões digitais JA3/JA4) além dos cabeçalhos, por isso uma pilha de cabeçalhos perfeita de requests pode ainda assim falhar porque o perfil TLS subjacente grita «Python». Ferramentas como curl_cffi ajudam a imitar uma impressão digital de navegador real quando isto se torna o gargalo.
Passo 2: analise os campos principais com o BeautifulSoup
Para verificações rápidas e para campos que o JSON incorporado não expõe, o BeautifulSoup é suficiente.
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, "html.parser")
title = soup.find("h1", attrs={"itemprop": "name"})
price = soup.find("span", attrs={"itemprop": "price"})
images = [
img.get("src")
for img in soup.select("img[loading='lazy']")
if img.get("src")
]
print(title.get_text(strip=True) if title else None)
print(price.get_text(strip=True) if price else None)Isto funciona para o título e o preço visível, mas é frágil. O Walmart troca frequentemente itemprop a marcação por classes utilitárias, e o preço visível difere frequentemente do preço canónico (preços para assinantes, descontos, preços locais da loja). Use isto como uma camada de verificação. Se quiser uma compreensão mais profunda dos padrões de consulta do BeautifulSoup que estamos a usar, o nosso tutorial dedicado ao BeautifulSoup é uma leitura complementar sólida. Trate o __NEXT_DATA__ JSON que extraímos a seguir como a fonte de verdade.
Recupere a carga útil rica da tag de script NEXT_DATA
Qualquer pessoa que leve a sério a forma de fazer web scraping no Walmart deve fazer __NEXT_DATA__ a sua primeira paragem. O registo completo do produto encontra-se dentro dessa única tag de script.
import json
raw = soup.find("script", id="__NEXT_DATA__")
payload = json.loads(raw.string)
product = (
payload["props"]["pageProps"]
["initialData"]["data"]["product"]
)
print(product["name"])
print(product["priceInfo"]["currentPrice"]["price"])
print(product["averageRating"], product["numberOfReviews"])Agora tem um dicionário com nome, faixas de preço, marca, modelo, galeria de imagens, descrições, classificação média, número de avaliações, bloco do vendedor e um nó de processamento. Percorra-o uma vez com pprint, depois escreve as chaves de que realmente precisas numa pequena função extratora. Envolve o acesso indexado em try/except KeyError, porque o Walmart reestrutura a árvore (initialData.data.product em vez de initialData.data.contentLayout) sem aviso prévio.
Passo 3: expandir para além de um único produto
Uma URL ensina-lhe o analisador; a produção precisa de muitas. O padrão leve é httpx.AsyncClient com um limite asyncio.Semaphore (comece com 5 a 10 simultâneas), um intervalo de 1 a 3 segundos entre pedidos e reutilização de sessão por host para que os cookies permaneçam. Mantenha a simultaneidade conservadora: o Walmart prefere chamadas constantes e lentas em vez de picos. Coloque a recuperação e a análise em grupos de tarefas separados para que uma exceção de análise não interrompa o ciclo de recuperação. O mesmo padrão aparece no nosso guia de scraping da Amazon, caso queira uma referência lado a lado para outro grande catálogo.
Descubra URLs de produtos através de mapas do site e do ponto de extremidade de pesquisa
Descobre-se URLs de duas formas complementares. Primeiro, walmart.com/robots.txt lista os índices dos mapas do site; o mapa do site por categoria é o mais denso, com milhões de /ip/ URLs agrupadas por departamento. Obtenha o índice, recupere cada sitemap secundário e insira as URLs na sua fila. Em segundo lugar, o endpoint de pesquisa no site aceita parâmetros de consulta como q, page, sorte uma longa lista de facetas. A resposta HTML contém uma carga JSON com a lista de produtos, por isso analise esse JSON em vez de extrair cartões renderizados. Combine as duas abordagens: mapas do site para abrangência e pesquisa para uma cobertura orientada para a classificação de uma categoria específica. (O nosso guia definitivo do Walmart aprofunda a topologia dos mapas do site, caso necessite de um mapa de referência.)
Lide com a paginação do Walmart e o limite de 25 páginas
De acordo com testes divulgados publicamente, o Walmart limita uma única consulta de pesquisa a cerca de 25 páginas de resultados, independentemente de quantos resultados correspondem realmente. Volte a testar antes de confiar em qualquer número específico, uma vez que o limite tem variado ao longo dos anos. A solução alternativa é a segmentação: divida uma consulta ampla por categoria, faceta de marca, faixa de preço e condição, e depois aceda a cada segmento dentro do limite por consulta. Ordenação inversa (sort=price_high além de sort=price_low) e a combinação de facetas podem praticamente duplicar a cobertura alcançável para cerca de 50 páginas ou 2.000 produtos por consulta, novamente de acordo com testes de terceiros. Planeie a sua descoberta como uma árvore de consultas restritas, e não como um ciclo plano de números de páginas.
Recolha avaliações, variantes e dados de processamento de encomendas
Assim que conseguir analisar __NEXT_DATA__, os campos de alto valor estão mesmo ali. As avaliações e classificações agregadas encontram-se em product.idmlInfo e product.reviews; a matriz por avaliação, quando presente, inclui contagem de estrelas, título, corpo e sinalizador de compra verificada. As variantes encontram-se em product.variantsMap identificadas pelo SKU, com atributos como cor e capacidade. O processamento de encomendas encontra-se em product.fulfillmentOptions, com estimativas de entrega, elegibilidade para levantamento na loja e um storeId campo. Os preços e a disponibilidade variam por código postal, por isso defina o assortmentStoreId e customer-zip cookies antes de cada solicitação para garantir dados localizados.
reviews = product.get("reviews", {}).get("customerReviews", [])
variants = product.get("variantsMap", {})
fulfillment = product.get("fulfillmentOptions", [])Exporte os resultados para CSV ou JSON com o pandas
Assim que tiver uma lista de dicionários de produtos, o pandas trata do resto:
import pandas as pd
df = pd.json_normalize(records, sep="_")
df.to_csv("walmart_products.csv", index=False)
df.to_parquet("walmart_products.parquet", index=False)json_normalize transforma chaves aninhadas em colunas como priceInfo_currentPrice_price, o que é compatível com SQL. Escreva avaliações e variantes em tabelas separadas com o ID do produto pai como chave estrangeira, uma vez que achatar campos de um-para-muitos numa única linha quase sempre acaba por se virar contra si mais tarde.
Contornar bloqueios: proxies, rotação, tentativas e backoff
A maioria das equipas que encara a extração de dados da Web do Walmart como um problema recorrente utiliza uma pilha anti-bloqueio em camadas com quatro componentes móveis.
- Proxies. Os IPs residenciais são quase indistinguíveis dos compradores regulares do Walmart; os IPs de centros de dados são sinalizados em grande escala. As taxas de sucesso publicadas pelos fornecedores são números de marketing, por isso, faça uma avaliação comparativa com os seus próprios URLs antes de se comprometer.
- Cadência de rotação. Roteie por sessão para descoberta do tipo rastreamento, por solicitação para monitorização de alto volume. Mantenha as sessões ativas pelo menos durante a duração de um fluxo de várias etapas (pesquisa, produto, avaliações) para que os cookies permaneçam coerentes.
- Repetidas tentativas com recuo exponencial. Em um
403ou um429(o código de estado HTTP definido na RFC 6585), aguarde2^n + jittersegundos por até 5 tentativas antes de deixar a URL de lado para uma execução posterior. - Disciplina de cabeçalhos e cookies. Faça a rotação de conjuntos de UA juntamente com IPs e mantenha os cookies dentro de um
requests.Session()para que o Walmart veja um visitante coerente.
proxies = {
"http": "http://USER:PASS@gate.example.com:7777",
"https": "http://USER:PASS@gate.example.com:7777",
}
resp = requests.get(URL, headers=HEADERS, proxies=proxies, timeout=20)Um conjunto de proxies gerido com sessões persistentes poupa mais tempo do que a rotação «faça você mesmo» assim que ultrapassar algumas centenas de páginas por dia. O nosso guia mais aprofundado sobre a rotação de proxies em Python aborda os padrões de rotação exatos que vimos sobreviver às atualizações anti-bot do Walmart.
Use uma API de scraper do Walmart para cargas de trabalho de produção
Com alguns milhares de páginas por dia, a equação inverte-se. Gasta mais em horas de engenharia a corrigir impressões digitais JA3, a atualizar conjuntos de UA e a acompanhar alterações de layout do que gastaria num endpoint gerido. Uma API de scraper do Walmart, como a WebScrapingAPI Scraper API, gere a rede de proxies, a pilha de cabeçalhos, a renderização de JavaScript e a resolução de CAPTCHA por trás de um único URL e cobra-lhe apenas pelas respostas bem-sucedidas. Mantém o seu __NEXT_DATA__ código de análise; apenas troca a camada de obtenção. Se precisar de fluxos de login ou rastreamento interativo (clicar em variantes de tamanho, expandir páginas de avaliações), uma API de navegador hospedada estende o mesmo modelo a um Chrome remoto que programa com o Puppeteer ou o Playwright.
Armadilhas comuns e resolução de problemas
Guarde o HTML bruto de cada análise falhada e, em seguida, compare os caminhos das chaves semana a semana, porque o Walmart altera as chaves JSON discretamente. Se os preços parecerem errados, verifique o cookie ZIP. Se os conjuntos de avaliações voltarem vazios, provavelmente está bloqueado, não terminou. Registe sempre o comprimento da resposta: uma página de 4 KB com «Robô ou humano?» é o seu primeiro sinal de que algo mudou.
Conclusão e próximos passos
Agora tem um plano completo de como fazer web scraping do Walmart de ponta a ponta. Escolha a parte mais pequena que ainda não tenha (descoberta do mapa do site, novas tentativas, o analisador JSON) e implemente-a a seguir.
Pontos-chave
- Trate o
__NEXT_DATA__JSON, e não o DOM renderizado, como o seu principal alvo de análise nas páginas de produtos e de pesquisa do Walmart. - A descoberta é composta por dois sistemas:
walmart.com/robots.txtmapas do site para a amplitude do catálogo e o endpoint de pesquisa para uma cobertura que tenha em conta a classificação. - O limite de pesquisa de ~25 páginas relatado pelo Walmart é resolvido através da segmentação das consultas por categoria, faceta, faixa de preço e ordenação inversa.
- Uma verdadeira pilha anti-bloqueio é em camadas: proxies residenciais, cadência de rotação, recuo exponencial em 403/429 e cookies de sessão coerentes.
- Assim que o seu volume diário ultrapassar algumas milhares de páginas, uma API de scraper gerida costuma ser mais vantajosa em termos de custo total do que a manutenção anti-bot DIY.
Perguntas frequentes
É legal fazer scraping de dados de produtos do Walmart?
Geralmente sim, no que diz respeito a dados públicos de produtos, preços e avaliações, com algumas ressalvas. A jurisprudência dos EUA (nomeadamente hiQ v. LinkedIn) indicou que a extração de dados públicos da web não constitui automaticamente uma violação da CFAA, mas os Termos de Utilização do Walmart, os direitos de autor sobre o texto das avaliações e leis como o RGPD e a CCPA continuam a aplicar-se. Evite páginas que exijam login e dados pessoais, modere a frequência de forma educada e consulte um advogado antes de qualquer utilização comercial.
O Walmart oferece uma API de produtos pública que eu possa usar em vez de fazer scraping?
O Walmart opera uma API de Afiliados e uma API de Vendedores do Marketplace, mas nenhuma delas é uma API de dados de produtos de uso geral para o público. A API de Afiliados está sujeita a aprovação do programa e é limitada em termos de campos e taxa, e a API do Marketplace apenas expõe dados de artigos que o próprio utilizador vende no Walmart. Para uma cobertura abrangente do catálogo, preços e avaliações, o scraping é a opção prática no momento da redação deste artigo.
Por que razão o meu scraper do Walmart apresenta uma página de captcha com a pergunta «Robô ou humano?»
Essa página é o desafio anti-bot do Walmart, acionado quando um ou mais sinais parecem indicar a presença de um bot: um IP de centro de dados, uma impressão digital TLS de Python, um cabeçalho Sec-Ch-Ua , uma cadência de pedidos invulgar ou a ausência de cookies próprios. Trata-se de um 200 suave, não de um 403, por isso verifique o corpo da resposta. A solução é em camadas: IP residencial, TLS de nível de navegador, pilha de cabeçalhos completa e cadência de pedidos.
Preciso do Selenium ou do Playwright para fazer scraping no Walmart, ou bastam as solicitações e o BeautifulSoup?
Para a maioria das páginas de produtos, pesquisa e avaliações, basta o requests mais o BeautifulSoup são suficientes, porque os dados residem no JSON renderizado pelo servidor __NEXT_DATA__ . Recorra ao Playwright ou ao Puppeteer apenas quando precisar de clicar em elementos interativos (seletores de tamanho, páginas de avaliações carregadas de forma diferida) ou quando o desafio anti-bot exigir um ambiente JavaScript real para ser ultrapassado.
Como faço para extrair milhares de produtos do Walmart sem atingir o limite de pesquisa de 25 páginas?
Deixe de pensar em números de páginas e comece a pensar em segmentos. Divida a consulta por categoria, marca, faixa de preço ($0 to 25, $25 to 50, etc.), departamento e estado, para que cada consulta individual se encaixe no limite por consulta. Combina ordenações ascendentes e descendentes para alargar cada segmento. Cruza os resultados com o mapa do site da categoria para preencher qualquer lacuna da segmentação.
Conclusão
Extrair dados do Walmart em 2026 é um problema de engenharia solucionável se respeitar a forma como o site está construído. Analise o __NEXT_DATA__ em vez de lutar contra a rotatividade de nomes de classes. Descubra URLs através de mapas do site e do endpoint de pesquisa em conjunto, segmente as suas consultas para contornar o limite de páginas e fortaleça a camada de obtenção com proxies residenciais, sessões persistentes e recuo exponencial nos erros 403 e 429. Exporte através de pd.json_normalize para que a camada de análise a jusante fique satisfeita e mantenha o HTML bruto por perto para que possa comparar caminhos-chave após a próxima alteração silenciosa do Walmart.
A transição honesta surge à medida que a escala aumenta. Se estiver a gastar mais em horas de engenharia a corrigir a lógica anti-bot do que o valor dos dados, esse é o seu sinal. A nossa API WebScrapingAPI Scraper assume a camada de obtenção, proxy e CAPTCHA por trás de um único ponto de extremidade, para que mantenha o analisador que acabou de construir e pague apenas pelas respostas bem-sucedidas. Seja qual for o caminho que escolher, agora tem o manual para lançar um pipeline do Walmart funcional esta semana.




