O Walmart é o maior varejista do mundo, com mais de 10,000 lojas em 24 países. Dado seu enorme estoque e ricos dados de produtos, o Walmart é um alvo extremamente valioso para web scraping.
Neste guia abrangente, veremos como construir um web scraper para extrair dados de produtos do Walmart em grande escala.
Visão geral
Aqui está uma rápida visão geral das principais etapas que abordaremos:
- Encontrando produtos para raspar
- Usando a API de pesquisa do Walmart
- Analisando páginas de categoria
- Lidando com limites de resultados
- Raspar páginas de produtos
- Analisando dados do produto
- Raspar mídia, preços, especificações, etc.
- Evitando Bloqueio
- Randomizando atrasos
- Como usar proxies
- Imitando navegadores reais
- Juntando tudo
- API de pesquisa → URLs de produtos → raspagem
- Lidando com grandes conjuntos de resultados
No final, você terá um raspador Walmart totalmente funcional em Python, pronto para extrair milhares de produtos. Vamos começar!
instalação
Estaremos usando Python junto com vários pacotes principais:
- pedidos – para fazer solicitações HTTP para API e páginas da web do Walmart
- bela sopa 4 – Análise de HTML
- pandas – para manipulação de dados
Instale-os via pip:
pip install requests beautifulsoup4 pandas
Também usaremos proxies para evitar bloqueios, que podem ser adquiridos em diversos fornecedores.
Encontrando produtos para raspar
A primeira etapa é descobrir URLs ou IDs de produtos para alimentar nosso scraper. Existem algumas abordagens que podemos usar:
Usando a API de pesquisa
O Walmart oferece uma API de pesquisa que retorna dados JSON estruturados. Podemos consultar esta API para encontrar produtos que correspondam a palavras-chave.
Vamos experimentar para "laptop":
import requests
api_url = "https://www.walmart.com/terra-firma/api/search"
params = {
"query": "laptop",
"sort": "price_low",
"page": 1,
" affiliateId": "test",
}
response = requests.get(api_url, params=params)
data = response.json()
print(data["items"][0]["productId"])
# prints a product ID, e.g. 1GY23EA#ABA
Esta API retorna resultados paginados em um formato JSON estruturado contendo:
productId
– o ID do Walmart para esse produtotitle
– nome do produtodescription
– breve descrição em textoprice
- preço atual- E mais…
Podemos percorrer páginas para coletar IDs e dados.
Uma limitação é que a API só permite buscar até 1000 resultados. Para obter mais cobertura, teremos que usar outras abordagens também.
Analisando páginas de categoria
O Walmart também oferece páginas de categorias navegáveis que podemos analisar:
https://www.walmart.com/browse/electronics/laptops/3944_3951_132959?povid=113750++2019-11-04+15%3A05%3A24.517-06%3A00&povid=113750++2019-11-04+15%3A05%3A24.517-06%3A00&affinityOverride=default
Essas páginas contêm as grades de produtos que vemos no site do Walmart.
Para extrair produtos, usaremos Beautiful Soup:
from bs4 import BeautifulSoup
import requests
url = "https://www.walmart.com/browse/electronics/laptops/3944_3951_132959"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
products = soup.select(".search-result-gridview-item")
for product in products:
title = product.select_one(".search-result-product-title").text
link = product.select_one(".search-result-product-title")["href"]
print(title, link)
Isso analisa os produtos de visualização em grade/lista, obtendo o título e o URL.
Podemos então alimentar os URLs em nosso raspador de produto.
As páginas de categoria podem conter milhares de produtos em muitas páginas, portanto, esse método tem grande cobertura.
Lidando com Limites
Entre a API de pesquisa e as páginas de categoria, podemos descobrir milhares de produtos. Mas existem alguns limites a serem considerados:
- A API de pesquisa permite obter apenas 1000 resultados
- Cada página de categoria tem no máximo 24 páginas, aproximadamente 50 produtos por página
Portanto, para uma análise abrangente, teremos que ser criativos:
- Use várias consultas de pesquisa com filtros restritivos
- Raspe em várias páginas de categoria
- Expanda o escopo, por exemplo. raspando todos os laptops em eletrônicos
Com um pouco de iteração, podemos construir um grande corpus de mais de 10,000 URLs de produtos adequados para alimentar nosso scraper.
Raspar páginas de produtos
Assim que tivermos URLs ou IDs dos produtos, podemos extrair os dados das próprias páginas dos produtos.
As páginas de produtos do Walmart possuem um rico conjunto de informações que podemos extrair:
- Descrição do título
- Imagens
- Preço, dados de vendas
- Especificações
- Informação do vendedor
- Opinões
- Produtos relacionados
- Disponibilidade de estoque
E mais.
Vamos analisar algumas peças-chave.
Raspar detalhes do produto
As páginas de produtos contêm um objeto JavaScript chamado window.__WML_REDUX_INITIAL_STATE__
com muitos dos dados estruturados:
<script>
window.__WML_REDUX_INITIAL_STATE__ = {
"product": {
"id": "1GY23EA#ABA",
"usItemId": "497219257",
"name": "HP 14-inch Laptop, Intel Core i3-1005G1, 4GB SDRAM, 128GB SSD, Pale Gold, Windows 10 Home",
"description": "A laptop with the performance you need and..."
...
}
...
}
</script>
Podemos extrair isso e analisar o JSON para obter campos como:
import json
import requests
from bs4 import BeautifulSoup
product_url = "https://www.walmart.com/ip/497219257"
response = requests.get(product_url)
soup = BeautifulSoup(response.text, ‘html.parser‘)
data = soup.find("script", {"id": "__WML_REDUX_INITIAL_STATE__"})
product_data = json.loads(data.contents[0])["product"]
title = product_data["name"]
walmart_id = product_data["usItemId"]
description = product_data["description"]
print(title)
# "HP 14-inch Laptop, Intel Core i3-1005G1, 4GB SDRAM, 128GB SSD, Pale Gold, Windows 10 Home"
Este campo JSON contém a maioria das informações principais do produto que gostaríamos de extrair.
Raspagem de mídia
A mídia do produto, como imagens, está contida em outro bloco de script, imageAssets
:
<script>
window.__WML_REDUX_INITIAL_STATE__.pdpData.item.imageAssets = [
{
"assetSize": "medium",
"assetUrl": "https://i5.walmartimages.com/...",
"baseAsset": {...},
"thumbnailUrl": "https://i5.walmartimages.com/..."
},
{...}
];
</script>
Podemos vasculhar e iterar pelos ativos para encontrar URLs de tamanhos diferentes:
images = []
for asset in product_data["imageAssets"]:
img_url = asset["assetUrl"]
images.append(img_url)
print(images[0])
# "https://i5.walmartimages.com/asr/e95444a3-2e8b-41d2-a585-4f3ea9fc51b6.345fba144e9df8a6d290b2ed3857e90b.jpeg"
Isso nos permite obter todas as imagens do produto em diferentes resoluções.
Preço de raspagem e estoque
Para detalhes importantes como preço e disponibilidade, os dados estão contidos em outra tag de script:
<script>
window.__WML_REDUX_INITIAL_STATE__.pdpData.item.priceInfo = {
"priceDisplayCodes": {
"rollback": true,
"reducedPrice": true
},
"currentPrice": {
"currencyUnit": "USD",
"price": 399
}
...
Podemos analisar os campos de preços:
price_data = product_data["priceInfo"]
regular_price = price_data["wasPrice"]["price"] # 499
sale_price = price_data["currentPrice"]["price"] # 399
on_sale = "rollback" in price_data["priceDisplayCodes"] # True
print(f"On sale for {sale_price}, regular {regular_price}")
E da mesma forma para o status do estoque, contido no availabilityStatus
:
in_stock = product_data["availabilityStatus"] == "IN_STOCK"
Juntando tudo isso, podemos construir scrapers para detalhes de produtos, mídia, preços, estoque e muito mais!
Evitando Bloqueios
Ao explorar o Walmart em grande escala, provavelmente encontraremos bloqueios devido a muitas solicitações. Aqui estão algumas dicas para evitar isso:
Limitar taxa de solicitação – atenha-se a 2 a 3 solicitações por segundo no máximo
Randomizar atrasos – insira atrasos aleatórios de 2 a 5 segundos entre solicitações
Alternar agentes de usuário – falsificar diferentes agentes de usuário do navegador de desktop
Usar proxies – rotear o tráfego através de serviços de proxy residencial
Tentar novamente em blocos – se bloqueado, pause a raspagem por mais de 30 minutos
Com essas precauções, podemos raspar milhares de produtos do Walmart com segurança.
Alguns serviços de proxy pagos também oferecem IPs e cabeçalhos rotativos avançados para evitar bloqueios. Isso pode ajudar na raspagem em maior escala.
Juntando tudo
Finalmente, vamos reunir os principais componentes em um web scraper completo do Walmart.
O fluxo geral será:
- Descubra produtos usando API de pesquisa e páginas de categoria
- Colete URLs de produtos
- Iterar por URLs para extrair cada página de produto
- Extraia detalhes, mídia, preços, inventário, etc.
- Salve os dados do produto copiados em CSV/JSON
Aqui está um exemplo de código:
from bs4 import BeautifulSoup
import requests, json, time, random
# Product URL extraction functions...
def scrape_search_api(query):
# Search API logic...
def scrape_category_pages(url):
# Category parsing logic...
product_urls = []
product_urls.extend(scrape_search_api("laptops"))
product_urls.extend(scrape_category_pages("https://www..."))
# Add proxies here...
for url in product_urls:
response = requests.get(url)
soup = BeautifulSoup(response.text, ‘html.parser‘)
# Extract product data...
product = {
"name": name,
"description": description,
"price": price,
"images": images,
"in_stock": in_stock
}
# Save product to CSV, database, etc...
# Random delay
time.sleep(random.uniform(2, 5))
Isso implementa as principais peças que abordamos:
- Gerando URLs de produtos para alimentar o scraper
- Analisando cada página de produto com BeautifulSoup
- Extraindo detalhes, mídia, preços, inventário
- Adicionando proxies e atrasos aleatórios para evitar bloqueios
- Salvando dados copiados em arquivo
Com essa estrutura, podemos raspar e extrair milhares de produtos do Walmart de forma robusta.
O código completo conteria tratamento de erros mais avançado, multithreading, etc. Mas isso cobre a lógica central e o fluxo de trabalho.
Resumo
Neste guia, percorremos a construção de um web scraper abrangente para dados de produtos do Walmart usando Python.
As principais técnicas incluíram:
- Usando a API de pesquisa e páginas de categoria do Walmart para gerar URLs de produtos
- Analisar páginas de produtos e extrair detalhes, mídia, preços e inventário
- Evitando bloqueios com proxies, atrasos e falsificações
- Unindo pesquisa → raspagem de produto → salvar fluxo de trabalho
Essas abordagens podem extrair milhares de produtos do Walmart de forma robusta. Os dados podem então ser usados para monitoramento de preços, pesquisa de mercado, dropshipping e muito mais.
Com algumas melhorias, como multithreading e armazenamento de banco de dados, você terá uma poderosa solução de raspagem do Walmart pronta para implantação em larga escala.