Walmart è il più grande rivenditore al mondo con oltre 10,000 negozi in 24 paesi. Dato il suo enorme inventario e i ricchi dati sui prodotti, Walmart è un obiettivo estremamente prezioso per il web scraping.
In questa guida completa, spiegheremo come creare un web scraper per estrarre i dati dei prodotti Walmart su larga scala.
Panoramica
Ecco una rapida panoramica dei passaggi chiave che tratteremo:
- Trovare prodotti da raschiare
- Utilizzando l'API di ricerca Walmart
- Analisi delle pagine delle categorie
- Gestire i limiti dei risultati
- Raschiare le pagine dei prodotti
- Analisi dei dati del prodotto
- Scraping di supporti, prezzi, specifiche, ecc.
- Evitare il blocco
- Ritardi randomizzati
- Utilizzo di proxy
- Imitare i browser reali
- Putting It All Together
- Cerca API → URL dei prodotti → scrape
- Gestire set di risultati di grandi dimensioni
Alla fine, avrai uno scraper Walmart perfettamente funzionante in Python pronto per estrarre migliaia di prodotti. Iniziamo!
Impostare
Useremo Python insieme a diversi pacchetti chiave:
- richieste – per effettuare richieste HTTP all'API e alle pagine Web di Walmart
- bellazuppa4 – Analisi HTML
- panda – per la manipolazione dei dati
Installali tramite pip:
pip install requests beautifulsoup4 pandas
Utilizzeremo anche proxy per evitare blocchi, che possono essere acquistati da diversi fornitori.
Trovare prodotti da raschiare
Il primo passo è scoprire gli URL o gli ID dei prodotti da inserire nel nostro raschietto. Esistono un paio di approcci che possiamo utilizzare:
Utilizzando l'API di ricerca
Walmart offre un'API di ricerca che restituisce dati JSON strutturati. Possiamo interrogare questa API per trovare prodotti che corrispondono a parole chiave.
Proviamolo per "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
Questa API restituisce risultati impaginati in un formato JSON strutturato contenente:
productId
– l'ID Walmart per quel prodottotitle
– nome del prodottodescription
– breve descrizione testualeprice
- prezzo attuale- E altre ancora...
Possiamo scorrere le pagine per raccogliere ID e dati.
Una limitazione è che l'API consente di recuperare solo fino a 1000 risultati. Per ottenere una maggiore copertura, dovremo utilizzare anche altri approcci.
Analisi delle pagine di categoria
Walmart fornisce anche pagine di categorie sfogliabili che possiamo analizzare:
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
Queste pagine contengono le griglie dei prodotti che vediamo sul sito Walmart.
Per estrarre i prodotti, utilizzeremo 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)
Questo analizza i prodotti della visualizzazione Griglia/Elenco, catturando il titolo e l'URL.
Possiamo quindi inserire gli URL nel nostro raschietto prodotto.
Le pagine di categoria possono contenere migliaia di prodotti su più pagine, quindi questo metodo ha un'ottima copertura.
Affrontare i limiti
Tra l'API di ricerca e le pagine delle categorie, possiamo scoprire decine di migliaia di prodotti. Ma ci sono alcuni limiti da considerare:
- L'API di ricerca consente di recuperare solo 1000 risultati
- Ogni pagina di categoria ha un massimo di 24 pagine, circa 50 prodotti per pagina
Quindi, per un resoconto completo, dovremo essere creativi:
- Utilizza più query di ricerca con filtri restrittivi
- Raschia su più pagine di categoria
- Ampliare il campo di applicazione, ad es. raschiando tutti i laptop attraverso l'elettronica
Con un po' di iterazione, possiamo creare un ampio corpus di oltre 10,000 URL di prodotti adatti ad essere inseriti nel nostro scraper.
Raschiare le pagine dei prodotti
Una volta che abbiamo gli URL o gli ID dei prodotti, possiamo estrarre i dati dalle pagine dei prodotti stesse.
Le pagine dei prodotti Walmart contengono una ricca serie di informazioni che possiamo estrarre:
- Descrizione del titolo
- Immagini
- Prezzo, dati di vendita
- Specifiche
- Informazioni sul venditore
- Recensioni
- Prodotti correlati
- Disponibilità in magazzino
E altro ancora.
Esaminiamo raschiando alcuni pezzi chiave.
Dettagli del prodotto raschiante
Le pagine dei prodotti contengono un oggetto JavaScript chiamato window.__WML_REDUX_INITIAL_STATE__
con gran parte dei dati strutturati:
<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>
Possiamo estrarlo e analizzare il JSON per ottenere campi come:
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"
Questo campo JSON contiene la maggior parte delle informazioni principali sul prodotto che vorremmo estrarre.
Raschiatura dei supporti
I media del prodotto come le immagini sono contenuti in un altro blocco di 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>
Possiamo scorrere e scorrere le risorse per trovare URL di diverse dimensioni:
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"
Questo ci consente di ottenere tutte le immagini dei prodotti con risoluzioni diverse.
Raschiatura del prezzo e dell'inventario
Per i dettagli chiave come prezzi e disponibilità, i dati sono contenuti in un altro tag script:
<script>
window.__WML_REDUX_INITIAL_STATE__.pdpData.item.priceInfo = {
"priceDisplayCodes": {
"rollback": true,
"reducedPrice": true
},
"currentPrice": {
"currencyUnit": "USD",
"price": 399
}
...
Possiamo analizzare i campi dei prezzi:
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 allo stesso modo per lo stato delle scorte, contenuto nel file availabilityStatus
:
in_stock = product_data["availabilityStatus"] == "IN_STOCK"
Mettendo insieme tutto questo, possiamo creare scraper per dettagli di prodotto, media, prezzi, inventario e altro ancora!
Evitare i blocchi
Quando eseguiamo lo scraping di Walmart su larga scala, probabilmente incontreremo blocchi dovuti a troppe richieste. Ecco alcuni suggerimenti per evitare questo:
Limita il tasso di richiesta – attenersi a 2-3 richieste al secondo max
Randomizza i ritardi – inserire ritardi casuali di 2-5 secondi tra le richieste
Ruota gli agenti utente – falsificare diversi agenti utente del browser desktop
Usa i proxy – instradare il traffico attraverso servizi proxy residenziali
Riprova sui blocchi – se bloccato, sospendere la raschiatura per più di 30 minuti
Con queste precauzioni, possiamo raschiare migliaia di prodotti Walmart in sicurezza.
Alcuni servizi proxy a pagamento offrono anche IP e intestazioni rotanti avanzati per evitare blocchi. Questi possono aiutare per la raschiatura su larga scala.
Putting It All Together
Infine, colleghiamo insieme i componenti chiave in un web scraper Walmart completo.
Il flusso generale sarà:
- Scopri i prodotti utilizzando l'API di ricerca e le pagine delle categorie
- Raccogli gli URL dei prodotti
- Scorri gli URL per analizzare la pagina di ogni prodotto
- Estrai dettagli, media, prezzi, inventario, ecc.
- Salva i dati del prodotto raschiati in CSV/JSON
Ecco il codice di esempio:
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))
Questo implementa i pezzi chiave che abbiamo trattato:
- Generazione di URL di prodotti da inserire nello scraper
- Analisi di ogni pagina di prodotto con BeautifulSoup
- Estrazione di dettagli, media, prezzi, inventario
- Aggiunta di proxy e ritardi casuali per evitare blocchi
- Salvataggio dei dati raschiati su file
Con questa struttura, possiamo raschiare ed estrarre migliaia di prodotti Walmart in modo affidabile.
Il codice completo conterrebbe una gestione degli errori più avanzata, multithreading ecc. Ma questo copre la logica principale e il flusso di lavoro.
Sommario
In questa guida abbiamo illustrato la creazione di un web scraper completo per i dati dei prodotti Walmart utilizzando Python.
Le tecniche chiave includevano:
- Utilizzo dell'API di ricerca e delle pagine delle categorie di Walmart per generare URL di prodotti
- Analisi delle pagine dei prodotti ed estrazione di dettagli, media, prezzi e inventario
- Evitare blocchi con proxy, ritardi e spoofing
- Combinando ricerca → scrap del prodotto → salvataggio del flusso di lavoro
Questi approcci possono estrarre in modo affidabile migliaia di prodotti Walmart. I dati possono quindi essere utilizzati per il monitoraggio dei prezzi, ricerche di mercato, dropshipping e altro ancora.
Con alcuni miglioramenti come il multithreading e l'archiviazione di database, avrai una potente soluzione di scraping Walmart pronta per l'implementazione su larga scala.