Walmart est une source de données essentielle pour l'intelligence des prix, l'analyse concurrentielle et l'arbitrage de détail. Le scraping direct de Walmart est bloqué de manière agressive avec la détection de robots, des défis JavaScript et des bannissements IP. L'API Scavio fournit un endpoint stable de recherche de produits Walmart qui renvoie un JSON structuré comprenant le titre, le prix, la note, le nombre d'avis, le nom du vendeur, la disponibilité et l'URL du produit. Ce didacticiel montre comment rechercher des produits, gérer la pagination, filtrer par vendeur et exporter les données pour analyse.
Prérequis
- Python 3.8 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Catégories de produits ou requêtes spécifiques à rechercher
Parcours
Étape 1: Rechercher des produits Walmart
Envoyez une requête POST à l'endpoint Scavio avec platform=walmart et votre requête de recherche. Le tableau products contient des fiches structurées.
def search_walmart(query: str) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "walmart", "query": query}
)
r.raise_for_status()
return r.json().get("products", [])Étape 2: Extraire et normaliser les données produit
Analysez chaque résultat produit en un dictionnaire propre avec des types cohérents pour le traitement en aval.
def normalize_product(product: dict) -> dict:
price_str = product.get("price", "")
return {
"title": product.get("title", ""),
"price": float(price_str.replace("$", "").replace(",", "")) if price_str else None,
"rating": float(product.get("rating", 0) or 0),
"reviews": int(product.get("reviews_count", 0) or 0),
"seller": product.get("seller", ""),
"availability": product.get("availability", ""),
"url": product.get("url", ""),
}Étape 3: Filtrer par vendeur ou par gamme de prix
Appliquez des filtres pour réduire les résultats à des vendeurs ou des fourchettes de prix spécifiques.
def filter_products(products: list[dict], max_price: float = None, seller: str = None) -> list[dict]:
filtered = products
if max_price:
filtered = [p for p in filtered if p["price"] and p["price"] <= max_price]
if seller:
filtered = [p for p in filtered if seller.lower() in p["seller"].lower()]
return filteredÉtape 4: Exporter au format JSON pour analyse
Écrivez les données produit normalisées dans un fichier JSON avec des statistiques récapitulatives.
import json
def export_products(query: str, products: list[dict]) -> None:
prices = [p["price"] for p in products if p["price"]]
output = {
"query": query,
"total": len(products),
"price_range": {"min": min(prices), "max": max(prices)} if prices else {},
"products": products,
}
with open("walmart_products.json", "w") as f:
json.dump(output, f, indent=2)Exemple Python
import os
import json
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_walmart(query: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "walmart", "query": query})
r.raise_for_status()
return r.json().get("products", [])
def normalize(p: dict) -> dict:
price = p.get("price", "")
return {
"title": p.get("title"), "price": float(price.replace("$", "").replace(",", "")) if price else None,
"rating": p.get("rating"), "seller": p.get("seller"), "url": p.get("url")
}
if __name__ == "__main__":
raw = search_walmart("robot vacuum")
products = [normalize(p) for p in raw]
products.sort(key=lambda x: x["price"] or float("inf"))
for p in products[:5]:
print(f"${p['price']:.2f} | {p['rating']} stars | {p['title'][:50]}")
print(f"\nTotal: {len(products)} products")Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function searchWalmart(query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "walmart", query })
});
const data = await res.json();
return (data.products || []).map(p => ({
title: p.title, price: p.price ? parseFloat(p.price.replace(/[$,]/g, "")) : null,
rating: p.rating, seller: p.seller, url: p.url
}));
}
async function main() {
const products = await searchWalmart("robot vacuum");
products.sort((a, b) => (a.price || Infinity) - (b.price || Infinity))
.slice(0, 5).forEach(p => console.log(`$${p.price} | ${p.rating} stars | ${p.title?.slice(0, 50)}`));
}
main().catch(console.error);Sortie attendue
{
"products": [
{
"title": "Shark ION Robot Vacuum RV720",
"price": "$149.00",
"rating": "4.3",
"reviews_count": 8742,
"seller": "Walmart.com",
"availability": "In Stock",
"url": "https://walmart.com/ip/shark-ion-robot/..."
}
]
}
$149.00 | 4.3 stars | Shark ION Robot Vacuum RV720
$179.00 | 4.5 stars | iRobot Roomba 694 Robot Vacuum
$199.99 | 4.6 stars | Roborock Q5 Robot Vacuum