Les pages Meilleures ventes de Walmart classent les produits qui se vendent le plus vite dans chaque rayon, de l'électronique aux articles pour la maison, et ce classement public constitue l'un des signaux de demande les plus fiables disponibles sur le web ouvert. Les détaillants le consultent pour repérer les tendances, les analystes l'utilisent pour étudier les évolutions de catégorie, et les outils de suivi des prix ancrent leurs comparaisons sur ce qui se trouve actuellement en tête des ventes. Les données sont directement accessibles sur la page : un ordre de classement, des titres de produits, des prix, des évaluations et un lien vers chaque article.
Ce guide vous explique comment scraper les Meilleures ventes Walmart avec JavaScript et Node.js en utilisant cheerio. Vous construisez un petit script opérationnel qui récupère une liste de Meilleures ventes Walmart via la Crawling API, analyse le rang, le titre, le prix, l'évaluation et le lien pour chaque produit, puis exporte le résultat en JSON et CSV. L'ensemble du tutoriel se limite aux données publiques des listes de produits, et la section juridique en fin d'article n'est pas un simple formulaire, lisez-la avant de pointer ce script sur un volume réel.
Ce que vous allez construire
Un script Node.js qui prend l'URL publique d'une catégorie de Meilleures ventes Walmart, récupère le HTML rendu via la Crawling API et extrait un enregistrement structuré pour chaque produit de la liste. Nous utilisons la page Meilleures ventes de la catégorie électronique comme exemple fil directeur et extrayons ces champs par article :
- Rang la position dans le classement des Meilleures ventes, en commençant à 1.
- Titre le nom du produit, par exemple "Apple AirPods with Charging Case (2nd Generation)".
- Prix le prix affiché sur la fiche, comme "$69.00".
- Évaluation le texte de la note en étoiles, par exemple "4.6 out of 5 Stars".
- Avis le nombre d'avis sous forme de nombre quand il est présent.
- Lien l'URL vers la page individuelle du produit.
Pourquoi une requête ordinaire échoue sur Walmart
Si vous demandez l'URL d'une page Meilleures ventes Walmart avec un client HTTP basique, vous obtenez rarement la grille de produits en retour. Deux facteurs jouent contre vous. D'abord, Walmart rend les fiches de la liste dans le navigateur avec JavaScript, de sorte que le HTML initial est une coquille presque vide tant que les scripts de la page ne s'exécutent pas. Ensuite, Walmart signale agressivement le trafic automatisé : les adresses IP de datacenter et les schémas de requêtes qui ne ressemblent pas à un vrai navigateur sont confrontés à un CAPTCHA, limités en débit ou bloqués avant d'atteindre les données produits rendues.
Un scraper Walmart fonctionnel a donc besoin de deux choses en une seule requête : un navigateur qui rend réellement la page, et une IP que la plateforme interprète comme un vrai visiteur. Vous pouvez assembler cela vous-même avec un navigateur headless et un pool de proxies résidentiels rotatifs, mais connecter ces briques et les maintenir en bonne santé représente la majeure partie du travail. La Crawling API regroupe les deux en un seul appel : vous lui envoyez l'URL, elle rend la page derrière une IP de confiance, et elle vous retourne le HTML complet que vous pouvez analyser avec cheerio.
La Crawling API peut retourner du HTML brut à analyser avec cheerio, ou vous pouvez passer autoparse: 'true' et obtenir directement du JSON structuré. Ce guide écrit le parseur cheerio à la main pour que vous contrôliez chaque champ et sélecteur, mais l'option autoparse est disponible quand vous souhaitez que Crawlbase effectue l'extraction pour vous.
Prérequis
Quelques éléments doivent être en place avant d'écrire le moindre code. Rien de long à mettre en oeuvre.
Bases de JavaScript et Node.js. Vous devez être à l'aise pour écrire et exécuter un script Node et installer des paquets avec npm. Si vous débutez avec Node, la documentation officielle et n'importe quel cours pour débutants vous amèneront au niveau qu'assume ce tutoriel.
Node.js 16 ou supérieur. Vérifiez votre version avec node --version. Si vous ne l'avez pas, installez-le depuis le site Node.js ou via un gestionnaire de versions comme nvm.
Un compte et un token Crawlbase. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token depuis la page de documentation du compte. L'offre gratuite vous donne 1 000 requêtes sans carte bancaire. Traitez le token comme un mot de passe : il authentifie vos requêtes, gardez-le hors du contrôle de version.
Configurer le projet
Créez un dossier de projet, initialisez-le et installez les deux bibliothèques dont le scraper a besoin.
node --version mkdir walmart-best-sellers && cd walmart-best-sellers npm init -y npm install crawlbase cheerio
Deux dépendances font le travail : crawlbase est le client Node officiel pour la Crawling API, et cheerio analyse le HTML retourné avec une API de style jQuery qui vous permet d'extraire des champs individuels par sélecteur CSS. Créez un fichier nommé walmart-scraper.js dans ce dossier et ajoutez le code des étapes ci-dessous.
Étape 1 : Récupérer la page Meilleures ventes rendue
Commencez par obtenir la page complète. Importez la classe CrawlingAPI, initialisez-la avec votre token et demandez l'URL des Meilleures ventes. Vérifier le code de statut avant d'analyser permet de rendre les échecs visibles plutôt que silencieux.
const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); const walmartPageURL = 'https://www.walmart.com/shop/best-sellers/electronics'; api .get(walmartPageURL) .then((response) => { if (response.statusCode === 200) { console.log(response.body.slice(0, 500)); } }) .catch((error) => console.error('API request error:', error));
Exécutez le script avec node walmart-scraper.js et vous devriez voir un vrai balisage produit Walmart en haut du corps, pas une coquille simplifiée. Cela confirme que le rendu fonctionne avant d'écrire un seul sélecteur. Pour obtenir du JSON analysé plutôt que du HTML, passez l'option autoparse, qui est la voie la plus rapide quand vous n'avez pas besoin de sélecteurs personnalisés.
// Ask the API to parse the page and return JSON const options = { autoparse: 'true' }; api .get(walmartPageURL, options) .then((response) => { if (response.statusCode === 200) { console.log(JSON.parse(response.body)); } }) .catch((error) => console.error('API request error:', error));
Cette première requête vient de retourner une page Walmart entièrement rendue sans navigateur headless ni proxy de votre côté. La Crawling API exécute la page dans un vrai navigateur, effectue une rotation parmi des IP résidentielles côté serveur, et gère les CAPTCHAs que Walmart lance aux scrapers, de sorte que vous obtenez du HTML complet (ou du JSON autoparsé) en un seul appel. Pointez-la d'abord sur la page Meilleures ventes de l'électronique avec l'offre gratuite.
Étape 2 : Analyser chaque produit avec cheerio
Une fois le HTML rendu disponible, chargez-le dans cheerio et parcourez les fiches produits. Walmart structure chaque Meilleure vente dans un conteneur répété, de sorte que vous sélectionnez chaque fiche, puis lisez le titre, le prix, l'évaluation, les avis et le lien à l'intérieur de celle-ci. Lire chaque champ de façon défensive évite qu'une valeur manquante fasse planter toute l'exécution, et suivre l'index de boucle vous donne le rang.
const cheerio = require('cheerio'); function parseBestSellers(html) { const $ = cheerio.load(html); const products = []; const containers = $( '.sans-serif.mid-gray.relative.flex.flex-column.w-100.hide-child-opacity' ); containers.each((index, element) => { const card = $(element); const product = { rank: index + 1 }; // Title product.title = card .find('[data-automation-id="product-title"]') .text() .trim(); // Price: split the currency symbol from the number const priceString = card .find('[data-automation-id="product-price"] .w_iUH7') .text() .trim(); const priceMatch = priceString.match(/([^\d]+)([\d,\.]+)/); product.price = priceMatch ? `${priceMatch[1].trim()}${priceMatch[2]}` : ''; // Rating and review count share one block const ratingText = card .find('.flex.items-center.mt2 .w_iUH7') .text() .trim(); const rating = ratingText.replace(/\d+\s*reviews/i, '').trim(); product.rating = rating !== '' ? rating : 'Rating not available'; const reviewsMatch = ratingText.match(/(\d+)\s*reviews/i); product.reviews = reviewsMatch ? parseInt(reviewsMatch[1], 10) : 0; // Link to the product page const href = card.find('a[link-identifier]').attr('href'); product.link = href ? new URL(href, 'https://www.walmart.com').href : ''; if (product.title) products.push(product); }); return products; }
Quelques détails permettent de rester fidèle à la page. Le titre du produit provient de l'attribut data-automation-id="product-title", et le prix se trouve à l'intérieur du bloc product-price sous la forme d'une chaîne unique comme "current price $69.00", de sorte qu'une expression régulière sépare le symbole monétaire de la partie numérique. Le bloc d'évaluation contient à la fois la note en étoiles et le nombre d'avis dans un seul bloc de texte : une regex supprime le suffixe "N reviews" pour isoler la note, et une seconde extrait le nombre d'avis. Le lien est lu depuis l'attribut href de l'ancre de la fiche et résolu en URL absolue pour fonctionner en dehors de la page.
Les noms de classes de Walmart (w_iUH7, la longue classe de conteneur flex flex-column, et les autres) sont générés et changent sans préavis. Traitez les sélecteurs ci-dessus comme un modèle de départ, pas comme un contrat. Quand un champ revient vide, réinspectez la page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur. Une maintenance périodique des sélecteurs est normale pour tout scraper en production, ce n'est pas le signe d'un problème.
Étape 3 : Assembler le script complet avec export JSON et CSV
Reliez maintenant la récupération et l'analyse en un seul script exécutable, puis écrivez les enregistrements sur disque au format JSON et CSV. Récupérer sans autoparse renvoie du HTML brut, ce qu'attend le parseur cheerio.
const fs = require('fs'); const { CrawlingAPI } = require('crawlbase'); const cheerio = require('cheerio'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); async function crawl(pageUrl) { const response = await api.get(pageUrl); if (response.statusCode === 200) return response.body; console.error(`Request failed: ${response.statusCode}`); return null; } function toCsv(rows) { const headers = ['rank', 'title', 'price', 'rating', 'reviews', 'link']; const escape = (value) => `"${String(value).replace(/"/g, '""')}"`; const lines = [headers.join(',')]; for (const row of rows) { lines.push(headers.map((h) => escape(row[h])).join(',')); } return lines.join('\n'); } async function main() { const url = 'https://www.walmart.com/shop/best-sellers/electronics'; const html = await crawl(url); if (!html) return; const products = parseBestSellers(html); fs.writeFileSync('best-sellers.json', JSON.stringify(products, null, 2)); fs.writeFileSync('best-sellers.csv', toCsv(products)); console.log(`Saved ${products.length} products to JSON and CSV`); } main();
Collez la fonction parseBestSellers de l'étape 2 dans le même fichier pour que main puisse l'appeler. Exécutez avec node walmart-scraper.js et vous obtenez deux fichiers : best-sellers.json avec les enregistrements structurés complets et best-sellers.csv prêt à ouvrir dans un tableur. Le helper toCsv met chaque champ entre guillemets et double les guillemets incorporés, ce qui importe ici car les titres de produits sont longs et contiennent fréquemment des virgules.
À quoi ressemble le résultat
Le fichier JSON contient un objet par produit dans l'ordre des Meilleures ventes, chacun avec le rang, le titre, le prix, l'évaluation, le nombre d'avis et le lien.
[ { "rank": 1, "title": "Apple AirPods with Charging Case (2nd Generation)", "price": "$69.00", "rating": "4.6 out of 5 Stars.", "reviews": 23387, "link": "https://www.walmart.com/ip/Apple-AirPods-with-Charging-Case-2nd-Generation/604342441" }, { "rank": 2, "title": "SGIN 15.6inch Laptop 4GB DDR4 128GB SSD Windows 11", "price": "$259.99", "rating": "4.5 out of 5 Stars.", "reviews": 2697, "link": "https://www.walmart.com/ip/SGIN-15-6inch-Laptop/1044996074" } ]
Le CSV reflète les mêmes lignes avec une ligne d'en-tête, de sorte qu'il s'intègre directement dans Excel, Google Sheets ou tout pipeline de données qui lit des fichiers délimités.
rank,title,price,rating,reviews,link "1","Apple AirPods with Charging Case (2nd Generation)","$69.00","4.6 out of 5 Stars.","23387","https://www.walmart.com/ip/Apple-AirPods-with-Charging-Case-2nd-Generation/604342441" "2","SGIN 15.6inch Laptop 4GB DDR4 128GB SSD Windows 11","$259.99","4.5 out of 5 Stars.","2697","https://www.walmart.com/ip/SGIN-15-6inch-Laptop/1044996074"
Passer à l'échelle sur plusieurs catégories
Une catégorie est une démonstration ; un vrai projet parcourt plusieurs rayons de Meilleures ventes. Walmart expose chacun sous /shop/best-sellers/, vous pouvez donc constituer une liste de slugs de catégories, récupérer chacun via la Crawling API, l'analyser avec la même fonction et étiqueter chaque ligne avec sa catégorie avant l'export. Puisque chaque page de Meilleures ventes partage la même structure de fiches, le parseur que vous avez déjà écrit fonctionne sur toutes sans modification.
async function scrapeCategories(categories) { const all = []; for (const category of categories) { const url = `https://www.walmart.com/shop/best-sellers/${category}`; const html = await crawl(url); if (!html) continue; const rows = parseBestSellers(html).map((p) => ({ category, ...p })); all.push(...rows); } return all; } scrapeCategories(['electronics', 'toys', 'home']).then((rows) => { console.log(`Collected ${rows.length} products across categories`); });
Ce modèle s'adapte directement à la recherche de produits et aux travaux de comparaison de prix. Pour approfondir la transformation de listes classées en décisions, consultez comment automatiser la recherche de produits e-commerce, et si vous souhaitez appliquer la même approche dans un autre langage, le guide sur le scraping des résultats de recherche Walmart avec Python couvre le côté recherche du catalogue.
Rester non bloqué
Même avec le rendu pris en charge, Walmart surveille le trafic ressemblant à celui de scrapers. Quelques habitudes maintiennent une exécution en bonne santé, et elles s'appliquent à toute cible commerciale difficile.
- Cadencez vos requêtes. Introduisez un délai entre les récupérations de catégories plutôt que de marteler les pages en boucle serrée. Espacer les requêtes est le facteur unique le plus important pour rester sous les limites de débit de Walmart.
- Misez sur la rotation. Un pool d'IP résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels de sorte qu'aucune ne déclenche une limite ou un CAPTCHA. La Crawling API gère cela pour vous ; si vous construisez votre propre infrastructure, c'est la partie à soigner.
- Lisez les codes de statut. Une exécution qui commence à retourner des défis ou des réponses non-200 vous indique que le débit ou le niveau d'IP actuel n'est plus suffisant. Traitez cela comme un signal pour ralentir, pas comme du bruit à ignorer.
Pour le guide plus complet, consultez comment scraper des sites sans se faire bloquer. Si vous souhaitez également une liste de Meilleures ventes d'une autre marketplace, le même modèle fetch-then-parse s'adapte à Amazon dans le guide sur comment scraper les Meilleures ventes Amazon.
Est-il légal de scraper Walmart ?
La question de savoir si le scraping de Walmart est autorisé dépend des conditions d'utilisation de Walmart, de votre juridiction et de ce que vous faites avec les données. Les conditions de Walmart restreignent l'accès automatisé, de sorte que le scraping peut aller à l'encontre de ces conditions quelle que soit la prudence de vos outils. Rien dans le code ci-dessus ne change cela ; il rend seulement la partie technique fonctionnelle. Lisez les Conditions d'utilisation de Walmart et son robots.txt, et traitez les deux comme la limite de ce que vous collectez.
Quelques lignes à respecter. Collectez uniquement les données produits publiques : le rang, le titre, le prix, l'évaluation, le nombre d'avis et le lien de produit que tout le monde peut voir sur une page Meilleures ventes sans compte. Respectez les attentes de Walmart en matière de débit et maintenez votre volume de requêtes suffisamment bas pour ne pas solliciter ses serveurs. Évitez les données personnelles, y compris tout ce qui est lié à des évaluateurs identifiables au-delà du texte d'avis public et des notes en étoiles affichées sur la page. Ne redistribuez pas les médias protégés par le droit d'auteur de Walmart, comme les photographies de produits, comme s'ils étaient les vôtres. Si vous prévoyez de réutiliser les données commercialement, obtenez une autorisation ou un accord officiel plutôt que de supposer que le silence vaut consentement.
Pour les volumes ou l'usage commercial, Walmart gère le Walmart Developer Portal et le programme Walmart Affiliate, qui exposent des données produits et catalogue autorisées avec des conditions d'utilisation claires. Ce sont les bons outils quand vous avez besoin de grands volumes, d'une structure garantie ou de droits commerciaux. Ce guide est délibérément limité aux Meilleures ventes publiques et aux listes de catégories, car c'est la ligne qui maintient le travail défendable. Il ne couvre rien derrière un accès connecté, les données personnelles des clients ou vendeurs, l'historique des commandes, ni toute tentative de contourner l'authentification ou un CAPTCHA que vous n'étiez pas censé passer. Si votre projet nécessite plus que des listes publiques, les API officielles de Walmart ou un accord de données sont la bonne voie, pas un scraper plus ingénieux.
Points clés
- Walmart rend les listes côté client et bloque fortement. Une requête ordinaire renvoie une coquille vide ou un CAPTCHA, vous devez donc rendre la page derrière une IP de confiance avant de l'analyser.
-
La Crawling API fait les deux en un seul appel. Elle rend la page, effectue une rotation des IP résidentielles et gère les CAPTCHAs ; passez
autoparse: 'true'pour du JSON ou prenez le HTML brut et analysez-le vous-même. - cheerio extrait les champs. Sélectionnez chaque conteneur de produit, lisez le titre, le prix, l'évaluation, les avis et le lien, en dérivant le rang depuis l'index de boucle, et attendez-vous à ce que les noms de classes générés évoluent.
- Exportez en JSON et CSV. Écrivez des enregistrements structurés dans les deux formats, en mettant les champs CSV entre guillemets pour que les titres de produits contenant des virgules restent intacts.
- Restez sur les données publiques. Respectez les CGU et le robots.txt de Walmart, cadencez vos requêtes et privilégiez le Walmart Developer Portal ou le programme Affiliate pour les volumes ou l'usage commercial.
Foire aux questions
Que sont les Meilleures ventes Walmart ?
Les Meilleures ventes Walmart sont les produits qui se vendent le plus vite dans un rayon donné de la boutique en ligne de Walmart, présentés sous forme de grille classée. Chaque catégorie, comme l'électronique, les jouets ou la maison, dispose de sa propre page Meilleures ventes qui met en avant les articles les plus demandés et les mieux notés. Suivre ces pages est un moyen rapide de voir ce qui est tendance et ce que les acheteurs achètent en ce moment.
Pourquoi une requête ordinaire renvoie-t-elle des données incomplètes depuis Walmart ?
Parce que Walmart rend sa grille de produits côté client avec JavaScript et challenge le trafic automatisé avec des CAPTCHAs. Une requête HTTP brute depuis une IP de datacenter renvoie généralement une coquille vide ou une page de blocage plutôt que les fiches produits. Pour obtenir une page complète, vous devez la rendre derrière une IP de confiance, ce que la Crawling API gère pour vous.
Dois-je utiliser autoparse ou écrire mon propre parseur cheerio ?
Utilisez autoparse quand vous voulez du JSON structuré rapidement et que les champs par défaut couvrent vos besoins ; passez autoparse: 'true' et l'API retourne les données analysées. Écrivez votre propre parseur cheerio quand vous avez besoin d'un contrôle total sur les champs et sélecteurs à extraire, comme ce guide le fait, pour que vous puissiez façonner les enregistrements et ajouter des champs comme le rang exactement comme vous le souhaitez.
Mes sélecteurs renvoient des valeurs vides. Qu'est-ce qui a changé ?
Presque certainement le balisage de Walmart. Ses classes de conteneurs et ses noms de classes générés comme w_iUH7 changent sans préavis, de sorte que des sélecteurs qui fonctionnaient le mois dernier peuvent se casser. Réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour les sélecteurs. Une maintenance périodique des sélecteurs est normale pour tout scraper en production.
Puis-je scraper les données personnelles des clients sur Walmart ?
Non, et ce guide ne le couvre pas. Les détails des comptes clients, l'historique des commandes et tout ce qui se trouve derrière un accès connecté ne sont pas des données publiques. Scraper du contenu protégé par connexion, des données personnelles sur les évaluateurs au-delà du texte d'avis public, ou contourner l'authentification est hors périmètre ici et va à l'encontre des conditions de Walmart. Pour un accès autorisé, la bonne voie est le Walmart Developer Portal ou un accord de données.
Comment éviter d'être bloqué lors du scraping de Walmart ?
Maintenez un débit de requêtes bas par IP, ajoutez des délais entre les récupérations de catégories et routez via des IP résidentielles rotatives de sorte qu'aucune adresse ne déclenche une limite de débit ou un CAPTCHA. La Crawling API gère la rotation, un pool d'IP de confiance et la gestion des CAPTCHAs pour vous ; si vous construisez votre propre infrastructure, c'est la partie dans laquelle investir. Surveillez les codes de statut et ralentissez quand vous commencez à voir des challenges.
Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.
Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.
