Retour au blog
Guides
Raluca PenciucLast updated on May 12, 202615 min read

Comment gratter Walmart.com : Guide 2026 de bout en bout

Comment gratter Walmart.com : Guide 2026 de bout en bout
En bref : ce guide explique étape par étape comment extraire les données sur les produits Walmart sur le Web en Python, de l'analyse du format __NEXT_DATA__ JSON à la mise à l'échelle avec des proxys, des tentatives de reconnexion et des récupérations asynchrones. Il indique également clairement dans quels cas une API de scraping gérée est préférable au « fait maison ».

Introduction : scraper Walmart à grande échelle en 2026

Walmart est le genre de catalogue qui justifie la mise en place d’un pipeline complet de veille concurrentielle ou de tarification. Si vous n’avez besoin que d’un seul produit, un script de 10 lignes suffit. Si vous avez besoin de milliers de références actualisées quotidiennement, la donne change rapidement : JSON caché, limites de pagination, tarification en fonction du code postal et une pile anti-bot qui examine bien plus que votre User-Agent. Ce tutoriel de 2026 explique comment extraire les données produit de Walmart de la manière dont les équipes le font réellement en production, y compris le moment où il est judicieux d’arrêter de lutter contre la couche anti-bot et de passer plutôt à une API gérée.

Pourquoi extraire les données produit de Walmart

Avant d'aborder la manière de scraper Walmart en code, il est utile de clarifier pourquoi on le fait. Les cas d'utilisation se regroupent généralement autour d'une poignée de tâches : veille des prix et surveillance des prix minimums recommandés (MAP) chez les revendeurs, cartographie des catalogues et des catégories, alertes de réapprovisionnement, analyse du sentiment des avis, et couverture des références des concurrents. Les annonces de Walmart et celles des vendeurs tiers sur sa place de marché partagent le même schéma de page produit, ce qui rend l'ensemble de données particulièrement utile pour comprendre en temps réel comment une catégorie entière est tarifée et expédiée. Au-delà des titres et des prix, les pages produits affichent également les notes, le nombre d'avis, les matrices de variantes, les informations sur le vendeur et les données de traitement des commandes par code postal, autant de champs qui alimentent concrètement les modèles de tarification.

Le scraping de Walmart est-il légal ? Éthique et limites

Avertissement préalable : il s'agit de conseils généraux, et non de conseils juridiques. Les données publiques sur les produits disponibles sur walmart.com sont généralement considérées comme librement exploitables lorsqu'elles sont collectées à un rythme lent et respectueux qui ne nuit pas au service, mais le risque juridique dépend de la juridiction et du contrat (les conditions d'utilisation de Walmart s'appliquent). Lisez walmart.com/robots.txt et respectez ses Disallow directives. Évitez tout ce qui nécessite une connexion ou qui contient des données personnelles, y compris les adresses e-mail des évaluateurs, les numéros de commande et les détails de paiement. Le RGPD et le CCPA limitent la manière dont vous pouvez traiter les informations personnelles identifiables (PII), même si celles-ci sont techniquement accessibles. Une valeur sûre : limitez-vous aux champs relatifs aux produits, aux prix, aux avis et aux stocks, réglez le débit de manière stricte et consultez un avocat avant tout déploiement commercial. (Si vous souhaitez approfondir le sujet, notre guide complet sur la légalité du web scraping couvre la jurisprudence.)

Outils et configuration du projet

Vous avez besoin de Python 3.11+ et d'un environnement virtuel propre. Le kit minimum :

python -m venv .venv && source .venv/bin/activate
pip install requests httpx beautifulsoup4 pandas loguru
  • requests (ou httpx si vous souhaitez utiliser l'asynchronisme) : le client HTTP
  • beautifulsoup4: analyse HTML pour le DOM visible
  • pandas: exportation sous forme de tableau et pd.json_normalize pour le JSON imbriqué
  • loguru: des journaux structurés qui résistent à des exécutions de longue durée

Une structure de dossiers raisonnable :

walmart-scraper/
├── walmart/
│   ├── fetch.py        # request + retry layer
│   ├── parse.py        # __NEXT_DATA__ extractor
│   ├── discover.py     # sitemap + search crawler
│   └── scaler.py       # async runner
├── data/
└── main.py

Comment Walmart fournit les données produit : coque HTML + NEXT_DATA JSON

NEXT_DATA JSON

Walmart.com est une application Next.js. Lorsque vous demandez une page produit, le serveur renvoie une coque HTML minimale ainsi qu'un <script id="__NEXT_DATA__"> élément qui contient l'état pré-rendu complet de la page au format JSON. Le navigateur hydrate ensuite cet état dans l'arborescence React que vous voyez ; les sélecteurs CSS ne capturent que ce qui survit à l'hydratation, ce qui, sur Walmart, ne représente qu'un petit sous-ensemble de l'enregistrement sous-jacent.

C'est important car la plupart des tickets « mon scraper Walmart ne fonctionne plus » proviennent de scrapers utilisant uniquement du CSS qui traquent des noms de classes qui changent à chaque mise à jour. Le JSON structuré dans __NEXT_DATA__ est bien plus stable : il contient l’objet produit canonique, y compris les tranches de prix, les variantes, les évaluations, les vendeurs, les options de livraison et la disponibilité en fonction du code postal. Considérez-le comme la cible principale de l’analyse, et le DOM rendu comme une solution de secours pour les champs que vous ne trouvez pas dans le JSON.

Étape 1 : comment extraire les pages produits de Walmart avec Python

Commencez modestement. Choisissez une URL canonique de la forme https://www.walmart.com/ip/<slug>/<id> et apprenez à scraper Walmart avec une seule requête GET avant de vous lancer dans la concurrence ou les proxys.

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))

Deux réponses sont intéressantes ici : un 200 avec le code HTML du produit, ou un 200 avec une page intermédiaire « Robot ou humain ? ». La page intermédiaire est un blocage souple, pas un 4xx, donc vérifiez toujours le corps de la réponse, pas seulement le code d'état. Si la réponse contient la chaîne de la page intermédiaire ou est anormalement courte (quelques Ko), considérez la requête comme ayant échoué et abandonnez.

Envoyez des en-têtes réalistes, comme ceux d'un navigateur

Une requête Python minimaliste est immédiatement signalée. Envoyez au minimum un en-tête de type Chrome ou Firefox User-Agent, ainsi qu’ Accept, Accept-Language, Sec-Ch-Ua, ainsi qu’un Referer (un résultat de recherche Google ou la page de catégorie Walmart pertinente). Conservez un petit ensemble de chaînes UA et alternez-les par session, et non par requête. Sachez également que Walmart inspecte la poignée de main TLS (empreintes JA3/JA4) en plus des en-têtes ; ainsi, une pile d’en-têtes parfaite provenant de requests peut tout de même échouer car le profil TLS sous-jacent crie « Python ». Des outils comme curl_cffi permettent d’imiter une empreinte de navigateur réelle lorsque cela devient un goulot d’étranglement.

Étape 2 : analyser les champs principaux avec BeautifulSoup

Pour des vérifications rapides et pour les champs que le JSON intégré n'expose pas, BeautifulSoup suffit amplement.

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)

Cela fonctionne pour le titre et le prix affiché, mais c'est fragile. Walmart change fréquemment le itemprop le balisage par des classes utilitaires, et le prix affiché diffère souvent du prix canonique (tarif abonné, réduction, prix local en magasin). Utilisez cela comme une couche de validation. Si vous souhaitez approfondir les modèles de requête BeautifulSoup que nous utilisons, notre tutoriel dédié à BeautifulSoup est un excellent complément de lecture. Considérez le __NEXT_DATA__ JSON que nous extrayons ensuite comme la source de vérité.

Extrayez la charge utile riche de la balise script NEXT_DATA

NEXT_DATA

Quiconque souhaite sérieusement se lancer dans le web scraping de Walmart devrait en faire __NEXT_DATA__ s'y rendre en premier lieu. La fiche produit complète se trouve dans cette seule balise 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"])

Vous disposez désormais d’un dictionnaire contenant le nom, les tranches de prix, la marque, le modèle, la galerie d’images, les descriptions, la note moyenne, le nombre d’avis, le bloc vendeur et un nœud de traitement de la commande. Parcourez-le une fois avec pprint, puis écrivez les clés dont vous avez réellement besoin dans une petite fonction d'extraction. Encadrez l'accès indexé dans try/except KeyError, car Walmart restructure l'arborescence (initialData.data.product par rapport à initialData.data.contentLayout) sans avertissement.

Étape 3 : aller au-delà d'un seul produit

Une seule URL vous permet d'apprendre le parseur ; la production en nécessite plusieurs. Le modèle léger consiste à httpx.AsyncClient avec un nombre limité asyncio.Semaphore (commencez par 5 à 10 connexions simultanées), un intervalle de 1 à 3 secondes entre les requêtes et la réutilisation des sessions par hôte pour que les cookies restent actifs. Restez prudent en matière de simultanéité : Walmart préfère les requêtes régulières et lentes aux pics de trafic. Placez la récupération et l'analyse dans des groupes de tâches distincts afin qu'une exception d'analyse ne bloque pas la boucle de récupération. Le même modèle apparaît dans notre guide de scraping d'Amazon si vous souhaitez une référence parallèle pour un autre catalogue volumineux.

Découvrez les URL des produits via les plans de site et le point de terminaison de recherche

Vous découvrez les URL de deux manières complémentaires. Tout d’abord, walmart.com/robots.txt répertoriez les index des plans de site ; le plan de site des catégories est le plus dense, avec des millions d’ /ip/ URLs regroupées par département. Récupérez l'index, récupérez chaque sitemap enfant et ajoutez les URL à votre file d'attente. Deuxièmement, le point de terminaison de recherche sur site accepte des paramètres de requête tels que q, page, sortet une longue liste de facettes. La réponse HTML contient une charge utile JSON avec la liste des produits ; analysez donc ce JSON plutôt que de scraper les fiches produits affichées. Combinez les deux : les plans de site pour l'étendue, la recherche pour une couverture tenant compte du classement d'une catégorie spécifique. (Notre guide ultime sur Walmart approfondit la topologie des plans de site si vous avez besoin d'une carte de référence.)

Gérer la pagination de Walmart et la limite de 25 pages

D'après des tests rendus publics, Walmart limite une requête de recherche unique à environ 25 pages de résultats, quel que soit le nombre de résultats réellement correspondants. Refaites des tests avant de vous fier à un chiffre précis, car cette limite a évolué au fil des ans. La solution consiste à segmenter : divisez une requête large par catégorie, facette de marque, fourchette de prix et état, puis interrogez chaque segment en respectant le plafond par requête. Triez dans l'ordre inverse (sort=price_high plus sort=price_low) et la combinaison de facettes peuvent environ doubler la couverture accessible pour atteindre environ 50 pages ou 2 000 produits par requête, toujours selon des tests effectués par des tiers. Planifiez votre exploration sous la forme d’un arbre de requêtes ciblées, et non d’une boucle plate de numéros de pages.

Capturez les avis, les variantes et les données de traitement des commandes

Une fois que vous pouvez analyser __NEXT_DATA__, les champs à forte valeur ajoutée sont à portée de main. Les avis et les notes agrégées se trouvent sous product.idmlInfo et product.reviews; le tableau par avis, lorsqu'il est présent, comprend le nombre d'étoiles, le titre, le corps et l'indicateur d'achat vérifié. Les variantes se trouvent sous product.variantsMap clasées par SKU, avec des attributs tels que la couleur et la capacité. Les informations d'exécution de la commande se trouvent sous product.fulfillmentOptions, avec les délais de livraison estimés, l'éligibilité au retrait en magasin et un storeId champ. Les prix et la disponibilité varient selon le code postal, donc définissez le assortmentStoreId et customer-zip cookies avant chaque requête pour garantir l'accès aux données localisées.

reviews = product.get("reviews", {}).get("customerReviews", [])
variants = product.get("variantsMap", {})
fulfillment = product.get("fulfillmentOptions", [])

Exportez les résultats au format CSV ou JSON avec pandas

Une fois que vous disposez d'une liste de dictionnaires de produits, pandas s'occupe du reste :

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 aplatit les clés imbriquées en colonnes comme priceInfo_currentPrice_price, ce qui est pratique pour SQL. Enregistrez les avis et les variantes dans des tables distinctes en utilisant l'ID du produit parent comme clé étrangère, car l'aplatissement de champs « un-à-plusieurs » en une seule ligne vous causera presque toujours des problèmes par la suite.

Contourner les blocages : proxys, rotation, tentatives de reconnexion et backoff

La plupart des équipes qui considèrent le web scraping de Walmart comme un problème récurrent utilisent une pile anti-blocage en couches composée de quatre éléments mobiles.

  • Proxys. Les adresses IP résidentielles sont pratiquement impossibles à distinguer de celles des acheteurs habituels de Walmart ; les adresses IP de centres de données sont signalées à grande échelle. Les taux de réussite publiés par les fournisseurs sont des chiffres marketing, alors effectuez des tests de performance sur vos propres URL avant de vous engager.
  • Cadence de rotation. Effectuez une rotation par session pour la découverte de type crawl, et par requête pour la surveillance à haut volume. Maintenez les sessions actives au moins pendant la durée d'un flux en plusieurs étapes (recherche, produit, avis) afin que les cookies restent cohérents.
  • Nouvelles tentatives avec délai d'attente exponentiel. Sur un 403 ou un 429 (code d'état HTTP défini dans la RFC 6585), attendez 2^n + jitter secondes pour un maximum de 5 tentatives avant de mettre l'URL en attente pour une exécution ultérieure.
  • Discipline des en-têtes et des cookies. Faites tourner les pools d'agents-utilisateurs (UA) parallèlement aux adresses IP et conservez les cookies au sein d'un requests.Session() , afin que Walmart ne voie qu’un seul visiteur cohérent.
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)

Un pool de proxys géré avec des sessions persistantes permet de gagner plus de temps qu'une rotation DIY dès que l'on dépasse quelques centaines de pages par jour. Notre guide approfondi sur la rotation des proxys en Python couvre les modèles de rotation exacts qui ont résisté aux mises à jour anti-bot de Walmart.

Utilisez une API de scraping Walmart pour les charges de travail en production

À quelques milliers de pages par jour, le calcul s’inverse. Vous dépensez plus en heures d’ingénierie pour corriger les empreintes JA3, actualiser les pools d’UA et suivre les changements de mise en page que vous ne le feriez pour un point de terminaison géré. Une API de scraping Walmart comme la WebScrapingAPI Scraper API gère le réseau de proxys, la pile d’en-têtes, le rendu JavaScript et la résolution des CAPTCHA derrière une seule URL et ne vous facture que les réponses réussies. Vous conservez votre __NEXT_DATA__ code d'analyse ; vous ne changez que la couche de récupération. Si vous avez besoin de flux de connexion ou d'exploration interactive (cliquer sur les variantes de taille, développer les pages d'avis), une API de navigateur hébergée étend ce même modèle à un Chrome distant que vous contrôlez via Puppeteer ou Playwright.

Pièges courants et dépannage

Enregistrez le code HTML brut pour chaque analyse ayant échoué, puis comparez les chemins d'accès clés d'une semaine à l'autre, car Walmart modifie discrètement les clés JSON. Si les prix semblent erronés, vérifiez le cookie ZIP. Si les tableaux d'avis reviennent vides, vous êtes probablement bloqué, et non pas à la fin du processus. Enregistrez toujours la longueur de la réponse : une page « Robot ou humain ? » de 4 Ko est le premier signe indiquant que quelque chose a changé.

Conclusion et prochaines étapes

Vous disposez désormais d’un plan complet pour scraper le site de Walmart de bout en bout. Choisissez le plus petit élément qui vous manque encore (découverte du plan du site, tentatives de reconnexion, analyseur JSON) et mettez-le en œuvre ensuite.

Points clés

  • Considérez le __NEXT_DATA__ JSON, et non le DOM rendu, comme votre cible principale d'analyse sur les pages de produits et de recherche de Walmart.
  • La découverte repose sur la combinaison de deux systèmes : walmart.com/robots.txt les plans de site pour l'étendue du catalogue, et le point de terminaison de recherche pour une couverture tenant compte du classement.
  • La limite de recherche d'environ 25 pages signalée par Walmart est contournée en segmentant les requêtes par catégorie, facette, fourchette de prix et tri inversé.
  • Une véritable pile anti-blocage est structurée en couches : proxys résidentiels, cadence de rotation, délai d'attente exponentiel sur les codes 403/429 et cookies de session cohérents.
  • Une fois que votre volume quotidien dépasse quelques milliers de pages, une API de scraping gérée s'avère généralement plus avantageuse en termes de coût total qu'une maintenance anti-bot DIY.

FAQ

Est-il légal de scraper les données sur les produits de Walmart ?

En général, oui pour les données publiques sur les produits, les prix et les avis, avec certaines réserves. La jurisprudence américaine (notamment l'affaire hiQ c. LinkedIn) a indiqué que le scraping de données web publiques ne constitue pas automatiquement une violation de la CFAA, mais les conditions d'utilisation de Walmart, les droits d'auteur sur le texte des avis et les lois telles que le RGPD et le CCPA s'appliquent toujours. Évitez les pages nécessitant une connexion et les données personnelles, limitez poliment le débit et consultez un avocat avant toute utilisation commerciale.

Walmart propose-t-il une API de produits publique que je peux utiliser à la place du scraping ?

Walmart propose une API Affiliés et une API Vendeurs de la Place de marché, mais aucune n'est une API de données sur les produits à usage général destinée au public. L'API Affiliés est soumise à l'approbation du programme et limitée en termes de champs et de fréquence, tandis que l'API de la Place de marché n'expose que les données relatives aux articles que vous vendez vous-même sur Walmart. Pour une couverture étendue du catalogue, des prix et des avis, le scraping est l'option la plus pratique à l'heure où nous écrivons ces lignes.

Pourquoi mon scraper Walmart affiche-t-il une page de captcha « Robot ou humain ? »

Cette page est le test anti-bot de Walmart, déclenché lorsqu'un ou plusieurs signaux semblent indiquer la présence d'un bot : une adresse IP de centre de données, une empreinte TLS Python, un en-tête Sec-Ch-Ua , une cadence de requêtes inhabituelle ou l'absence de cookies propriétaires. Il s'agit d'un code 200 « soft », et non d'un 403, vérifiez donc le corps de la réponse. La solution est à plusieurs niveaux : adresse IP résidentielle, TLS de niveau navigateur, pile d'en-têtes complète et régulation des requêtes.

Ai-je besoin de Selenium ou de Playwright pour scraper Walmart, ou les requêtes et BeautifulSoup suffisent-ils ?

Pour la plupart des pages de produits, de recherche et d’avis, requests et BeautifulSoup suffisent, car les données se trouvent dans le JSON __NEXT_DATA__ . N'utilisez Playwright ou Puppeteer que lorsque vous devez cliquer sur des éléments interactifs (sélecteurs de taille, pages d'avis chargées par différé) ou lorsque le test anti-bot nécessite un véritable environnement JavaScript pour être réussi.

Comment extraire des données de milliers de produits Walmart sans atteindre la limite de 25 pages de recherche ?

Cessez de penser en termes de numéros de page et commencez à penser en termes de segments. Divisez la requête par catégorie, marque, fourchette de prix ($0 to 25, $25 to 50, etc.), département et état, afin que chaque requête individuelle respecte la limite par requête. Combinez les tris par ordre croissant et décroissant pour élargir chaque segment. Recoupez les résultats avec le plan du site par catégorie pour compléter tout ce que la segmentation a manqué.

Conclusion

Le scraping de Walmart en 2026 est un problème technique soluble si vous respectez la façon dont le site est construit. Analysez le __NEXT_DATA__ au lieu de vous battre contre les changements de noms de classes. Découvrez les URL à l'aide des plans du site et du point de terminaison de recherche, segmentez vos requêtes pour contourner la limite de pages, et renforcez la couche de récupération avec des proxys résidentiels, des sessions persistantes et un recul exponentiel sur les codes 403 et 429. Exportez via pd.json_normalize afin que la couche d'analyse en aval soit satisfaite, et conservez le HTML brut à portée de main pour pouvoir comparer les chemins clés après la prochaine modification discrète de Walmart.

Le véritable tournant se produit à grande échelle. Si vous dépensez plus en heures d'ingénierie pour corriger la logique anti-bot que la valeur des données, c'est le signe qu'il est temps d'agir. Notre API WebScrapingAPI prend en charge les couches de récupération, de proxy et de CAPTCHA derrière un seul point de terminaison, vous permettant ainsi de conserver l'analyseur que vous venez de créer et de ne payer que pour les réponses réussies. Quelle que soit la voie que vous choisissez, vous disposez désormais du guide pour déployer un pipeline Walmart opérationnel dès cette semaine.

À propos de l'auteur
Raluca Penciuc, Développeur full-stack @ WebScrapingAPI
Raluca PenciucDéveloppeur full-stack

Raluca Penciuc est développeuse Full Stack chez WebScrapingAPI ; elle conçoit des robots de collecte de données, améliore les techniques de contournement et recherche des moyens fiables de réduire le risque de détection sur les sites cibles.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.