Como Extrair Dados de Produtos do Walmart: Por Que Proxies Genéricos Falham e O Que Realmente Funciona
Advanced Bot Mitigation Engineer
Principais Conclusões:
- Um IP dos EUA não é o mesmo que uma resposta utilizável no Walmart. O Walmart avalia a reputação do IP, a consistência comportamental e a concentração de tráfego regional — não apenas o país para o qual um IP resolve. Um proxy genérico dos EUA pode retornar HTTP 200 e ainda assim entregar uma página de verificação de bot ou CAPTCHA no corpo.
- HTTP 200 ≠ dados de produto extraíveis. Proxies genéricos dos EUA frequentemente retornam um
200 OKcujo corpo é uma página de verificação de bot ou CAPTCHA, em vez da grade de produtos — e uma parte adicional nunca se conecta. Códigos de status por si só não dizem se uma resposta é real. - IPs de datacenter degradam mais rápido; residenciais sozinhos não são suficientes. A saída residencial eleva o nível mínimo, mas o Walmart também verifica se uma sessão se comporta como um navegador — executando JavaScript, mantendo cookies e apresentando uma impressão digital consistente. Um proxy cru entrega bytes; ele não renderiza uma página.
- Um navegador anti-detecção renderizado fecha a lacuna. O Scrapeless Scraping Browser combina proxies residenciais em mais de 195 países com renderização de JavaScript do lado da nuvem e impressão digital anti-detecção, de modo que a página retornada é a grade de produtos real, em vez de uma shell de desafio.
- A renderização é observável. O Scrapeless Scraping Browser renderiza a URL de busca do Walmart para o título da página
laptop - Walmart.com, gerando mais de 160 âncoras de produtos (a[link-identifier]) e dezenas de nós[data-item-id]— uma grade de produtos real e paginada, em vez de uma shell de desafio. - Gratuito para começar. Novas contas da Scrapeless incluem tempo de execução gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.
Introdução: um status 200 não é um sinal verde
O catálogo público do Walmart é um dos conjuntos de dados mais observados no varejo dos EUA. As equipes de precificação acompanham os SKUs dos concorrentes, os proprietários de marcas monitoram a conformidade com MAP, os vendedores de marketplaces observam o movimento da buy-box e os agentes de IA puxam atributos de produtos para pipelines de downstream. Os dados são visíveis publicamente em um navegador — que é exatamente por que tantas equipes assumem que um proxy e um cliente HTTP são suficientes para coletá-los.
Não são. O modo de falha mais comum no Walmart é silencioso: um pedido sai por meio de um proxy dos EUA, retorna com um 200 OK, e o pipeline registra um sucesso — mas o corpo é uma página de verificação de bot, uma shell React vazia ou um prompt de CAPTCHA. A linha de status diz que tudo funcionou; a carga útil não contém dados de produto. Um scraper que confia no código de status registra uma vitória e não armazena nada utilizável.
Este post explica por que proxies genéricos falham no Walmart, apoia a taxa de falha com um benchmark público atribuído e passa por um fluxo de trabalho em Python sobre o Scrapeless Scraping Browser — um navegador em nuvem anti-detecção que renderiza a página, mantém o estado da sessão e roteia através da saída residencial, de modo que a resposta que volta é a grade de produtos que você realmente queria. O fluxo de trabalho extrai registros de resultados de busca (título, preço, link, id do item) e navega de um resultado para sua página de detalhes do produto.
O Que Você Pode Fazer Com Isso
- Monitoramento de preços competitivos. Coletar preço, preço de lista e bandeiras de desconto em SKUs concorrentes do Walmart em uma cadência contínua.
- Monitoramento de conformidade com MAP. Os proprietários de marcas observam os preços dos vendedores de terceiros e sinalizam listagens abaixo do MAP.
- Ingestão de catálogo. Alimentar pesquisas e listagens de categorias em pipelines de downstream com um esquema de produto normalizado (título, preço, link, id do item).
- Inteligência sobre buy-box e vendedores. Acompanhar qual vendedor detém uma listagem específica e como as ofertas mudam ao longo do tempo.
- Disponibilidade e sortimento. Monitorar quais produtos aparecem para uma consulta e como o conjunto de resultados muda entre regiões.
- Enriquecimento de agentes de IA. Passar uma grade de produtos renderizada para um agente que classifica, deduplica ou resume o catálogo.
Na Scrapeless, acessamos apenas dados publicamente disponíveis enquanto cumprimos rigorosamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste post é apenas para fins de demonstração.
Por Que Proxies Genéricos Falham no Walmart
Um proxy genérico faz uma única função: ele encaminha seu pedido HTTP de um IP diferente e retorna os bytes que o Walmart envia de volta. Ele não executa JavaScript, mantém uma impressão digital de navegador ou mantém o estado da sessão entre os pedidos. As proteções do Walmart foram construídas precisamente para detectar o que um proxy cru não pode falsificar.
O Walmart verifica mais do que o país do IP
A camada anti-bot do Walmart avalia vários sinais em conjunto:
- Reputação do IP — faixas de datacenter e pools de proxies conhecidos têm baixa confiabilidade e atraem desafios rapidamente.
- Consistência comportamental — se o cliente executa scripts de página, reproduz cookies e apresenta cabeçalhos e temporização que correspondem a um navegador real.
- Concentração de tráfego regional — não apenas o país para o qual um IP resolve, mas se o tráfego de uma região ou sub-rede parece naturalmente distribuído ou concentrado de uma maneira que sinaliza automação.
Um proxy de nível de país dos EUA satisfaz exatamente uma dessas verificações. Não diz nada sobre se a solicitação executa JavaScript ou se comporta como um navegador, e um pool de IPs de datacenters dos EUA contra os mesmos pontos finais concentra o tráfego de uma forma que as verificações regionais do Walmart foram projetadas para pegar.
O código de status mente
O sintoma mais caro é aquele que parece sucesso. Execute proxies genéricos dos EUA contra o Walmart em volume e as respostas se dividem em três categorias: uma minoria que retorna dados de produtos utilizáveis, uma grande parcela que retorna uma página de verificação de bot ou CAPTCHA apesar de um status 200 OK, e um restante que nunca se conecta. A categoria intermediária é a armadilha — um pipeline que trata 200 OK como sucesso absorverá silenciosamente páginas de desafio em seu conjunto de dados. A extração válida permanece baixa precisamente porque o código de status e o payload discordam tão frequentemente.
Datacenter degrada rápido; residencial sozinho não é suficiente
Roteamento através de IPs residenciais eleva o nível — a saída residencial carrega mais confiança do que faixas de datacenters. Mas proxies residenciais por conta própria deixam as lacunas comportamentais e de renderização abertas. Um IP residencial anexado a um cliente HTTP simples ainda não executa os scripts da página do Walmart, apresenta uma impressão digital fina e retorna a estrutura não hidratada. O IP é mais confiável; a solicitação ainda é reconhecivelmente automatizada.
O que realmente fecha a lacuna
O caminho confiável contra o Walmart combina três coisas que um proxy bruto não pode fornecer por conta própria:
- Um verdadeiro navegador renderizado que executa o JavaScript do Walmart, para que a grade de produtos se hidrate no DOM.
- Saída residencial para que o IP carregue a confiança que uma faixa de datacenter carece.
- Consistência comportamental e de impressão digital — cookies mantidos entre as solicitações, uma impressão digital que corresponde ao tráfego orgânico e um estado de sessão que persiste.
Essa combinação é o que o Scrapeless Scraping Browser fornece como uma única superfície gerenciada.
Proxy genérico vs navegador em nuvem renderizado
| Capacidade | Proxy genérico dos EUA | Scrapeless Scraping Browser |
|---|---|---|
| Encaminha solicitação de um IP dos EUA | Sim | Sim |
| Executa o JavaScript do Walmart (renderiza a grade de produtos) | Não | Sim — renderização do lado da nuvem |
| Captura um CAPTCHA-em-200 (retorna a página real, não um desafio) | Não | Sim — a grade renderizada se hidrata ou o desafio é visível |
| Saída residencial | Apenas se explicitamente residencial | Proxies residenciais em mais de 195 países |
| Consistência comportamental / de sessão (cookies, tempos) | Não | Sim — estado de sessão persistente |
| Impressão digital de navegador anti-detecção | Não | Sim — em cada sessão |
| Consistência de tráfego regional | Concentra o tráfego de um pool | Distribui através de uma rede residencial |
Um proxy genérico responde à pergunta "posso enviar esta solicitação de um IP dos EUA?" O Scrapeless Scraping Browser responde à pergunta que realmente importa: "posso obter a grade de produtos renderizada de volta?"
Por que Scrapeless Scraping Browser
Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-detecção, projetado para crawlers web e agentes de IA. Para o Walmart especificamente, ele traz:
- Proxies residenciais em mais de 195 países, fixados na saída dos EUA na criação da sessão, para que o IP carregue confiança residencial em vez de uma assinatura de datacenter.
- Renderização de JavaScript do lado da nuvem, para que a grade React do Walmart se hidrate e os nós de produtos estejam presentes no DOM antes da extração.
- Persistência de sessão, para que cookies e estado do navegador permaneçam consistentes ao longo do fluxo de pesquisa → detalhes, em vez de redefinir a cada solicitação.
- Impressão digital anti-detecção em cada sessão, para que a página renderize da mesma forma que para o tráfego orgânico.
- Uma única superfície programática — crie um URL de CDP com sua chave de API, conecte-se com o Playwright e controle um navegador real sem precisar levantar infraestrutura.
A renderização é um comportamento observável. O Scrapeless Scraping Browser renderiza https://www.walmart.com/search?q=laptop para o título da página laptop - Walmart.com, gerando mais de 160 âncoras de produtos (a[link-identifier]) e dezenas de nós [data-item-id] — uma grade de produtos real e paginada, em vez de uma estrutura de desafio. URLs de produtos do Walmart têm a forma https://www.walmart.com/ip/<slug>/<id>, e cada âncora de resultado se resolve em uma.
Obtenha sua chave de API no plano gratuito em app.scrapeless.com. A página do produto Scraping Browser e a página Soluções de Proxy cobrem a rede residencial que apoia o navegador em nuvem.
Pré-requisitos
- Python 3.10 ou mais recente.
- Uma conta Scrapeless e chave de API — inscreva-se em app.scrapeless.com. O SDK lê a chave da variável de ambiente
SCRAPELESS_API_KEY. - Familiaridade básica com o terminal e com Python.
Instalar
O fluxo de trabalho usa um pacote: Playwright para Python, o cliente oficialmente suportado que se conecta ao Scrapeless Scraping Browser via CDP e lê o DOM renderizado.
bash
pip install playwright
O connect_over_cdp do Playwright controla o navegador remoto na nuvem, então você não precisa de playwright install ou de quaisquer binários de navegador locais — a renderização acontece do lado da nuvem. Em seguida, exporte sua chave de API para que possa ser usada na URL de conexão:
bash
export SCRAPELESS_API_KEY=your_api_token_here
O formato da conexão e os guias da biblioteca estão documentados em docs.scrapeless.com.
Etapa 1 — Crie uma URL de conexão de egressos dos EUA
O Scrapeless Scraping Browser é um endpoint CDP. Crie a URL WebSocket com sua chave de API como token e egressos dos EUA como proxyCountry — Walmart é um site de varejo dos EUA, e uma sessão residencial nos EUA é a base para uma resposta utilizável.
python
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
def scraping_browser_url(proxy_country="US", session_ttl=240):
# A chave da API aparece na URL como `token`; egressos e duração da sessão são parâmetros de consulta.
params = urlencode({
"token": os.environ["SCRAPELESS_API_KEY"],
"sessionTTL": session_ttl,
"proxyCountry": proxy_country,
})
return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
proxyCountry=US roteia a sessão através de um IP residencial dos EUA. sessionTTL=240 mantém a sessão ativa por tempo suficiente para manter cookies entre a página de busca e as páginas de detalhes dos produtos que você acessa a seguir.
Etapa 2 — Conecte-se via CDP e abra a página de busca
Conecte-se ao endpoint do Scraping Browser com o connect_over_cdp do Playwright, em seguida, abra a URL de busca do Walmart. Como este é um navegador renderizado real, o JavaScript do Walmart é executado e a grade de produtos é hidratada no DOM.
python
SEARCH_URL = "https://www.walmart.com/search?q=laptop"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(scraping_browser_url("US"))
page = browser.new_page()
# Aqueça a homepage primeiro, e depois abra a busca na mesma sessão.
page.goto("https://www.walmart.com/", wait_until="domcontentloaded")
page.wait_for_timeout(2500)
page.goto(SEARCH_URL, wait_until="domcontentloaded")
page.wait_for_timeout(4000) # deixe a grade React se hidratar
# Confirme se a resposta é a verdadeira grade de produtos, não uma página de desafio.
title = page.title() # "laptop - Walmart.com" em uma renderização real
cards = page.query_selector_all("a[link-identifier]") # ~160+ âncoras de produtos quando hidratadas
print(title, len(cards))
A breve espera após a navegação permite que a grade React termine de se hidratar antes da extração. As duas verificações acima — o título da página e a contagem de âncoras a[link-identifier] — são como você confirma se uma resposta é real antes de confiar nela. Uma página de desafio não contém o título do produto ou renderiza a grade; uma página real faz ambas.
Etapa 3 — Extraia a grade de produtos
Cada cartão de resultado de busca está ancorado em a[link-identifier], com nós [data-item-id] carregando o id do item do Walmart. Percorra as âncoras e extraia um registro normalizado por produto: título, preço, link e id do item.
python
import re
def extract_products(page):
products = []
for card in page.query_selector_all("[data-item-id]"):
link_el = card.query_selector("a[link-identifier]")
if not link_el:
continue
href = link_el.get_attribute("href")
item_id = card.get_attribute("data-item-id")
# O título está no texto do link / nome acessível no cartão de resultado.
span = link_el.query_selector("span")
title = span.inner_text() if span else link_el.get_attribute("link-identifier")
# O preço é renderizado no cartão após a hidratação; leia o texto visível do preço.
price_el = card.query_selector('[data-automation-id="product-price"]')
price = None
if price_el:
m = re.search(r"\d[\d,]*\.?\d*", price_el.inner_text().replace(",", ""))
price = float(m.group()) if m else None
link = href if not href or href.startswith("http") else f"https://www.walmart.com{href}"
products.append({
"itemId": item_id,
"title": (title or "").strip() or None,
"price": price,
"currency": "USD",
"link": link,
})
return products
Os seletores acima (a[link-identifier], [data-item-id], [data-automation-id="product-price"]) são as âncoras estáveis na grade de busca. Inspecione o DOM ao vivo primeiro quando um layout mudar: leia o HTML renderizado, confirme os nomes das âncoras atuais e aperfeiçoe os seletores em relação ao que a página realmente exibe. Nomes de classes utilitárias com hash giram entre implantações; as âncoras semânticas data-* são a superfície durável.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Etapa 4 — Navegue de um resultado para sua página de detalhes do produto
Cada link de resultado leva a uma página de detalhes do produto na forma https://www.walmart.com/ip/<slug>/<id>. Abra um na mesma sessão — os cookies e a impressão digital da sessão persistem, então a página de detalhes é renderizada da mesma forma que a página de busca.
python
def text_of(page, selector):
el = page.query_selector(selector)
return el.inner_text().strip() if el else None
def fetch_detail(page, product_url):
page.goto(product_url, wait_until="domcontentloaded")
page.wait_for_timeout(3000)
price_el = page.query_selector('[itemprop="price"]')
return {
"url": product_url,
"title": text_of(page, "h1"),
"price": (price_el.get_attribute("content") if price_el else None)
or text_of(page, '[data-automation-id="product-price"]'),
"brand": text_of(page, '[itemprop="brand"]'),
"availability": text_of(page, '[data-automation-id="fulfillment-section"]'),
}
# Dentro da mesma sessão `with sync_playwright() as p:` da Etapa 2:
products = extract_products(page)
if products and products[0]["link"]:
detail = fetch_detail(page, products[0]["link"])
print(detail)
Manter a passagem de busca e a passagem de detalhes dentro de uma sessão é o que preserva a consistência comportamental: a página de detalhes vê os mesmos cookies confiáveis e a impressão digital que renderizaram a grade de busca, então ela se hidrata da mesma forma. A página de detalhes também expõe campos mais ricos — marca, especificações completas, vendedor, opções de cumprimento — que a card de busca não possui.
O que você recebe de volta
O Scraping Browser retorna um DOM renderizado ao vivo; o esquema é o que o extrator lê dele. Para o extrator da grade de busca da Etapa 3, um registro se parece com isto:
json
// O esquema reflete exatamente o que o extrator da Etapa 3 emite.
// Os valores dos campos são amostras ilustrativas, não um instantâneo de qualquer produto hoje.
{
"query": "https://www.walmart.com/search?q=laptop",
"resultCount": 60,
"products": [
{
"itemId": "5689219329",
"title": "Exemplo de Laptop de 15,6 pol., 16GB RAM, 512GB SSD",
"price": 499.0,
"currency": "USD",
"link": "https://www.walmart.com/ip/Example-Laptop-15-6-in/5689219329"
},
{
"itemId": "7741203355",
"title": "Exemplo de Laptop 2 em 1 com Tela Sensível ao Toque, 8GB RAM, 256GB SSD",
"price": 379.0,
"currency": "USD",
"link": "https://www.walmart.com/ip/Example-2-in-1-Laptop/7741203355"
}
]
}
Algumas observações honestas sobre essa saída, que vale a pena conhecer antes de executar em grande escala:
- Tempo de hidratação. A grade de busca do Walmart monta primeiro um esqueleto, depois preenche os cards. Uma curta espera após a navegação antes da extração é o que garante uma grade completa em vez de uma parcial. Se uma passagem retorna muito poucos cards, a grade não tinha terminado de se hidratar — leia o HTML renderizado novamente antes de apertar os seletores.
- Confirme se um 200 é real. A presença do título do produto (
laptop - Walmart.com) e uma contagem preenchida de âncorasa[link-identifier]é o sinal de que a resposta é a página real. Uma grade vazia ou um título ausente significam que o corpo é um desafio ou uma casca, independentemente da linha de status. - Campos condicionais. Nem todo card possui um preço visível (itens fora de estoque ou colocações patrocinadas variam), e a página de detalhes expõe campos que o card de busca não possui. Trate campos ausentes como
nullem vez de descartar a chave, para que consumidores a jusante permaneçam estáveis. - Estabilidade do seletor.
a[link-identifier],[data-item-id]e[data-automation-id="product-price"]são âncoras duráveis. Nomes de classe hashed mudam entre as versões; confie nos atributos semânticosdata-*. - Variação regional. Os preços, a disponibilidade e o próprio conjunto de resultados variam por região. Fixe
proxyCountryconsistentemente para que uma série de histórico de preços compare iguais com iguais.
Conclusão: amplie seu pipeline de produtos Walmart
Raspar o Walmart de forma confiável se resume a um princípio: um código de status não é um sinal de sucesso — uma grade de produtos renderizada é. Proxies genéricos encaminham bytes de um IP dos EUA e param por aí, razão pela qual um benchmark público colocou a extração válida de proxy genérico abaixo de 40%, sendo o maior bucket de falhas as páginas de bot servidas sob um status 200. A solução não é um proxy melhor; é um navegador renderizado real com egressos residenciais e comportamento de sessão consistente.
O Scrapeless Scraping Browser fornece isso como uma única superfície: crie uma sessão residencial dos EUA, conecte-se via CDP, renderize a URL de busca, confirme que a grade de produtos está presente, extraia os registros e navegue até páginas de detalhes dos produtos dentro da mesma sessão. Fixe egressos dos EUA, mantenha as passagens de busca e detalhes dentro de uma mesma sessão, confirme que uma resposta contém o título do produto e âncoras da grade antes de confiar nela, e trate campos ausentes como nulos.
Para a mesma abordagem em outros sites de varejo e listagem, veja os guias irmãos Melhores Scrapers do Zillow em 2026 e Melhores Scrapers da Amazon em 2026.
Pronto para Construir Seu Pipeline de Dados Potencializado por IA?
Junte-se à nossa comunidade para garantir um plano gratuito e conectar-se com desenvolvedores que estão construindo pipelines de dados de varejo: Discord · Telegram.
Inscreva-se em app.scrapeless.com para obter tempo de execução gratuito do Scraping Browser e adaptar os padrões acima para as consultas, categorias e regiões que o pipeline necessita. Veja os planos atuais na página de preços.
FAQ
Q1: Por que um proxy dos EUA ainda é bloqueado no Walmart?
Porque o Walmart avalia mais do que o país para o qual um IP resolve. Ele verifica a reputação do IP, a consistência de comportamento e a concentração de tráfego regional. Um proxy residencial dos EUA satisfaz apenas a verificação do país; ele não executa JavaScript nem mantém estado de sessão. Na prática, a maioria das respostas de proxies genéricos no Walmart não são dados de produtos utilizáveis.
Q2: Proxies residenciais sozinhos são suficientes?
Não. A saída residencial aumenta a confiança em relação a intervalos de data center, mas um IP residencial ligado a um cliente HTTP simples ainda não renderiza a página nem mantém uma impressão digital de navegador consistente. O caminho confiável combina a saída residencial com um navegador renderizado real e estado de sessão persistente — que é o que o Scraping Browser da Scrapeless combina em uma sessão.
Q3: Como confirmo que uma resposta 200 é real e não uma página de CAPTCHA?
Verifique o payload, não a linha de status. Em uma renderização real da busca no Walmart, o título da página é laptop - Walmart.com e o DOM contém âncoras de produtos (a[link-identifier]) e nós [data-item-id]. Se o título estiver ausente e a grade estiver vazia, o corpo é um desafio ou uma shell não hidratada, independentemente do status 200.
Q4: Quantas requisições posso executar em paralelo?
Mantenha a concorrência modesta — cerca de três trabalhadores por host — e fixe a saída dos EUA em cada sessão. Para uma distribuição maior, divida entre hosts em vez de aumentar a concorrência contra um único, para que o tráfego permaneça naturalmente distribuído.
Q5: O Walmart mudou seu DOM e meus seletores foram quebrados. E agora?
Leia o HTML renderizado ao vivo novamente, identifique os âncoras estáveis atuais (a[link-identifier], [data-item-id], atributos data-automation-id) e aperte o extrator contra o que a página está enviando agora. Ancore em atributos semânticos data-* em vez de nomes de classe codificados, que mudam entre implementações.
Q6: Isso pode ser executado sem um agente de IA?
Sim. O Python nas Etapas 1–4 roda de forma independente — cria a sessão, conecta-se via CDP, renderiza e extrai. Dirigir a partir de um agente de IA é uma camada de conveniência adicional, não um requisito.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



