Les résultats de recherche Walmart ne sont pas une liste plate. Près du haut, et à nouveau plus bas dans la page, se trouvent les placements sponsorisés: des produits qu'un vendeur a payé pour faire remonter sur un mot-clé. Chacun porte le même signal public qu'un concurrent voudrait connaître à tout prix: qui enchérit sur "casques audio", où il se place, ce qu'il facture et comment il appelle le produit. Suivies dans le temps, ces données constituent une véritable intelligence publicitaire et concurrentielle extraite d'une page que n'importe qui peut charger.

Ce guide vous montre comment scraper les publicités sponsorisées Walmart avec JavaScript et Node.js. Vous construisez un petit scraper exécutable qui récupère une page de recherche Walmart rendue via la Crawling API, analyse chaque placement sponsorisé avec cheerio en un enregistrement propre (titre, prix, position, lien), puis regroupe ces enregistrements pour répondre à une question: quels produits font de la publicité sur un mot-clé donné. L'ensemble du guide se limite aux données de résultats de recherche publics, et la section sur la légalité vers la fin n'est pas du remplissage, alors lisez-la avant de pointer ceci sur un volume réel.

Ce que vous allez construire

Un script Node.js qui prend une URL de recherche Walmart publique, récupère le HTML rendu via la Crawling API et extrait un enregistrement structuré pour chaque placement sponsorisé sur la page de résultats. Nous utilisons la recherche de "headphones" comme exemple courant et extrayons ces champs par publicité:

  • Titre le nom du produit sponsorisé, par exemple "Bose QuietComfort 45 Headphones Noise Cancelling Over-Ear Wireless Bluetooth Earphones, Black".
  • Prix le prix affiché tel qu'il apparaît sur la carte, comme "$329.00".
  • Position le rang de la publicité parmi les placements sponsorisés sur la page, pour distinguer une enchère en haut de recherche d'une enchère en milieu de recherche.
  • Lien l'URL vers la page produit individuelle vers laquelle pointe la publicité.

Une fois chaque publicité transformée en enregistrement, une courte étape d'agrégation les regroupe par annonceur pour voir qui achète du placement sur le mot-clé, et à quelles positions. C'est le résultat d'intelligence publicitaire: les mêmes données que Walmart montre à chaque acheteur, réorganisées pour l'analyse.

Pourquoi une requête simple échoue sur Walmart

Si vous demandez une URL de recherche Walmart avec un client HTTP nu, vous n'obtenez pas la page de résultats propre que vous voyez dans un navigateur. Deux choses jouent contre vous. Premièrement, Walmart rend la grille de recherche côté client avec JavaScript, donc les cartes sponsorisées, les prix et les liens produits ne sont pas dans le HTML initial jusqu'à ce que les scripts de la page s'exécutent. Deuxièmement, Walmart signale rapidement le trafic automatisé: les IP de centres de données et les schémas de requêtes qui ne ressemblent pas à un vrai navigateur sont challengés ou bloqués avant d'atteindre le contenu rendu.

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 lit comme un vrai visiteur. Vous pouvez assembler cela vous-même avec un navigateur sans en-tête plus un pool de proxies résidentiels rotatifs, mais les assembler et les maintenir en bonne santé représente l'essentiel 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 retourne le HTML fini pour que vous l'analysiez. Elle expose aussi une option autoparse qui retourne le contenu structuré de la page en JSON, ce qui est pratique pour un premier aperçu avant d'écrire vos propres sélecteurs.

Sponsorisé vs organique

Walmart mélange les placements payants dans la même grille que les résultats organiques et tag les payants avec un petit label "Sponsored" à l'intérieur de la carte. Le parseur ci-dessous lit ce label pour que vous puissiez séparer les publicités des annonces organiques plutôt que de traiter toute la grille comme de la publicité. Si le texte du label change, c'est le premier sélecteur à revérifier.

Prérequis

Vous avez besoin de quelques éléments en place avant d'écrire du code. Aucun ne prend longtemps.

JavaScript et Node.js de base. Vous devez être à l'aise avec l'écriture et l'exécution d'un script Node et l'installation de paquets avec npm. Si vous êtes plus récent sur Node, notre guide sur la façon de construire un web scraper avec Node.js couvre les bases que ce tutoriel suppose.

Node.js 16 ou version ultérieure. Confirmez 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 Crawlbase et un token. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token depuis la page de documentation du compte. Le niveau gratuit inclut jusqu'à 20 000 requêtes sans carte, ce qui est largement suffisant pour suivre ce tutoriel de bout en bout. Traitez le token comme un mot de passe: il authentifie vos requêtes, gardez-le donc 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.

bash
node --version

mkdir walmart-ads-scraper && cd walmart-ads-scraper
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 pour que vous puissiez extraire des champs individuels par sélecteur CSS. Si les sélecteurs sont nouveaux pour vous, le primer sur XPath et les sélecteurs CSS complète bien ce guide.

Étape 1: Récupérer la page de recherche rendue

Commencez par obtenir la page finie. Importez la classe CrawlingAPI, initialisez-la avec votre token et demandez l'URL de recherche. Vérifier le code de statut avant d'analyser garde les échecs visibles plutôt que silencieux.

javascript
const { CrawlingAPI } = require('crawlbase');

const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

const walmartPageURL = 'https://www.walmart.com/search?q=headphones';

api
  .get(walmartPageURL)
  .then((response) => {
    if (response.statusCode === 200) {
      console.log(response.body.slice(0, 500));
    }
  })
  .catch((error) => console.error('API request error:', error));

Cela demande la page de recherche Walmart "headphones" via la Crawling API et affiche les 500 premiers caractères du HTML retourné. Exécutez-le avec node scraper.js et vous devriez voir un vrai balisage de grille de recherche, pas une coquille dépouillée ou une page de défi. Cela confirme que le rendu et une IP de confiance fonctionnent avant d'écrire un seul sélecteur. Si vous préférez éviter d'écrire des sélecteurs lors d'un premier passage, ajoutez l'option autoparse, api.get(walmartPageURL, { autoparse: 'true' }), et l'API retourne le contenu principal de la page en JSON à la place.

Crawlbase Walmart Scraper

Ce premier appel a retourné une grille Walmart rendue derrière une IP de confiance, en une seule requête. La Crawling API exécute la page dans un vrai navigateur, effectue la rotation via des IP résidentielles côté serveur et vous remet le HTML fini (ou du JSON auto-analysé), vous évitant ainsi de faire tourner une flotte sans en-tête et un pool de proxies vous-même. Pointez-la sur une page de recherche publique sur les jusqu'à 20 000 requêtes gratuites d'abord.

Étape 2: Analyser les placements sponsorisés avec cheerio

Avec le HTML rendu en main, chargez-le dans cheerio et parcourez la grille de résultats. Walmart dispose chaque résultat dans un conteneur de produit répétitif, vous sélectionnez donc chaque carte, lisez le label "Sponsored" et ne gardez que les cartes qui le portent. Pour chaque carte sponsorisée, vous extrayez le titre, le prix, la position et le lien. Lire chaque champ de manière défensive évite qu'une valeur manquante ne fasse planter l'exécution.

javascript
const cheerio = require('cheerio');

function parseSponsored(html) {
  const $ = cheerio.load(html);
  const ads = [];
  let position = 0;

  const containers = $('.sans-serif.mid-gray.relative.flex.flex-column.w-100.hide-child-opacity');

  containers.each((index, element) => {
    const card = $(element);

    // Only keep cards tagged "Sponsored"
    const label = card.find('[data-testid^="variant-"] .gray').text().trim();
    if (!/sponsored/i.test(label)) return;

    position += 1;

    const title = card
      .find('[data-automation-id="product-title"]')
      .text()
      .replace(/\s+/g, ' ')
      .trim();

    const priceString = card
      .find('[data-automation-id="product-price"] .w_iUH7')
      .text()
      .trim();
    const priceMatch = priceString.match(/([^\d]+)([\d,\.]+)/);
    const price = priceMatch ? `${priceMatch[1].trim()}${priceMatch[2]}` : '';

    const href = card.find('a[link-identifier]').attr('href') || '';
    const link = href && href.startsWith('/') ? `https://www.walmart.com${href}` : href;

    ads.push({ position, title, price, link });
  });

  return ads;
}

Les sélecteurs ici viennent directement du balisage de recherche Walmart. Chaque résultat se trouve dans le long conteneur de classes utilitaires .sans-serif.mid-gray.relative.flex.flex-column.w-100.hide-child-opacity; le tag "Sponsored" réside dans un span [data-testid^="variant-"] .gray; le titre est [data-automation-id="product-title"]; et la chaîne de prix se trouve dans [data-automation-id="product-price"] .w_iUH7, que nous découpons avec une regex en symbole monétaire et partie numérique. Le return anticipé supprime toute carte sans le label sponsorisé, donc position ne compte que les placements payants, en haut de recherche d'abord, milieu de recherche ensuite. Le lien est lu depuis l'attribut href de l'ancre de la carte et rendu absolu quand Walmart retourne un chemin relatif.

Les sélecteurs évoluent

Les noms de classes et les valeurs data-testid de Walmart changent sans préavis, et le long conteneur de classes utilitaires ci-dessus est particulièrement fragile car c'est du style généré, pas un crochet stable. Traitez ces sélecteurs comme un modèle de départ, pas 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. La maintenance périodique des sélecteurs est normale pour tout scraper de production, ce n'est pas le signe que quelque chose est cassé.

Étape 3: Assembler et analyser les annonceurs

Maintenant, reliez la récupération et l'analyse en un seul script exécutable, puis ajoutez l'étape d'analyse. Une fois chaque carte sponsorisée transformée en enregistrement, regrouper par le lien de la page produit vous indique quels annonceurs achètent du placement sur le mot-clé et où ils se placent.

javascript
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;
}

// parseSponsored from Step 2 goes here

function advertiserReport(ads) {
  return ads.map((ad) => ({
    advertiser: ad.title.split(' ').slice(0, 2).join(' '),
    position: ad.position,
    price: ad.price,
    link: ad.link,
  }));
}

async function main() {
  const keyword = 'headphones';
  const url = `https://www.walmart.com/search?q=${encodeURIComponent(keyword)}`;
  const html = await crawl(url);
  if (!html) return;

  const ads = parseSponsored(html);
  console.log(`${ads.length} sponsored placements on "${keyword}"`);
  console.log(JSON.stringify(advertiserReport(ads), null, 2));
}

main();

L'étape advertiserReport est délibérément simple: elle dérive un court identifiant d'annonceur à partir des premiers mots de chaque titre produit et conserve la position, le prix et le lien à côté. Dans un vrai pipeline, vous clés-eriez l'annonceur sur quelque chose de plus solide (le champ de marque ou le vendeur résolu depuis la page produit), mais même ce regroupement approximatif répond à la question centrale: qui paie pour apparaître sur ce mot-clé et à quel rang. Exécutez plusieurs mots-clés selon un planning et les mêmes enregistrements deviennent un flux concurrentiel: de nouveaux annonceurs entrant sur un terme, des mouvements de prix sur les placements et des changements de rang dans le temps.

À quoi ressemble la sortie

Exécutez le script complet avec node scraper.js et vous obtenez un tableau propre de placements sponsorisés, ordonnés par position, prêts à être écrits en JSON, CSV ou dans une base de données.

json
[
  {
    "advertiser": "Bose QuietComfort",
    "position": 1,
    "price": "$329.00",
    "link": "https://www.walmart.com/ip/Bose-QuietComfort-45-Headphones/376188834"
  },
  {
    "advertiser": "COWIN E7",
    "position": 2,
    "price": "$35.00",
    "link": "https://www.walmart.com/ip/COWIN-E7-Active-Noise-Cancelling-Headphones/123456789"
  },
  {
    "advertiser": "OneOdio Wired",
    "position": 3,
    "price": "$31.99",
    "link": "https://www.walmart.com/ip/OneOdio-Wired-Over-Ear-Headphones/950096760"
  }
]

Chaque ligne est un placement sponsorisé: qui fait de la publicité, où il s'est classé parmi les slots payants, ce qu'il facture et la page produit vers laquelle la publicité pointe. Stockées avec un horodatage par exécution, ces données sont la matière première de l'intelligence publicitaire au niveau du mot-clé.

Monter en charge sur les mots-clés et les pages

Un mot-clé sur une page est une démo; un vrai travail parcourt une liste de mots-clés et la pagination derrière chacun. Walmart expose le numéro de page via le paramètre de requête page, vous pouvez donc construire chaque URL de page dans une boucle, la récupérer via la Crawling API, l'analyser avec la même fonction et collecter les lignes. Parce que chaque page de résultats partage la même structure de carte, le parseur que vous avez déjà écrit fonctionne sur toutes sans modifications.

javascript
async function scrapeKeyword(keyword, totalPages) {
  const all = [];
  for (let page = 1; page <= totalPages; page++) {
    const url =
      `https://www.walmart.com/search?q=${encodeURIComponent(keyword)}&page=${page}`;
    const html = await crawl(url);
    if (html) all.push(...parseSponsored(html));
  }
  return all;
}

scrapeKeyword('headphones', 3).then((rows) => {
  console.log(`Collected ${rows.length} sponsored placements`);
});

Remplacez le mot-clé unique par un tableau et bouclez sur vos termes cibles pour construire une carte concurrentielle sur toute une catégorie. Pour enrichir chaque publicité avec tous les détails (marque, vendeur, notes, la liste complète des spécifications), prenez le link de chaque enregistrement et récupérez cette page produit individuelle via la même fonction crawl, puis écrivez un petit parseur pour la mise en page du produit. Le schéma est identique: rendre, puis analyser. La même approche de récupération puis d'analyse s'étend directement au travail plus large de web scraping e-commerce, et introduire ces prix dans un modèle est un cas d'usage naturel pour l'intelligence de prix.

Rester non bloqué

Même avec le rendu géré, Walmart surveille le trafic ressemblant à un scraper. Quelques habitudes maintiennent une exécution saine, et elles s'appliquent à toute cible commerciale difficile.

  • Rythmez vos requêtes. Marteler des pages dans une boucle serrée est le moyen le plus rapide d'être throttlé. Espacez les requêtes et variez vos mots-clés plutôt que de crawler un seul chemin à pleine vitesse.
  • Misez sur la rotation. Un pool d'IP résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels afin qu'aucune ne déclenche une limite de débit. La Crawling API gère cela pour vous; si vous construisez votre propre pile, c'est la partie à bien faire.
  • Lisez les codes de statut. Une exécution qui commence à retourner des défis ou des erreurs vous indique que le débit ou le niveau d'IP actuel n'est plus suffisant. Traitez cela comme un signal pour reculer, pas comme du bruit à ignorer.

Pour le guide plus large, voir comment scraper des sites web sans se faire bloquer. Si vous préférez acheminer votre propre trafic via un pool rotatif plutôt que d'utiliser l'API gérée, le Smart AI Proxy vous donne la même rotation d'IP résidentielles comme endpoint proxy de remplacement direct.

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

Si le scraping des publicités sponsorisées 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 d'utilisation de Walmart restreignent l'accès automatisé, donc le scraping peut aller à l'encontre de ces conditions quel que soit le soin apporté à vos outils. Aucun code ici ne change cela; il fait juste fonctionner la partie technique. 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 à tenir. Collectez uniquement les données de résultats de recherche publics: le titre sponsorisé, le prix, la position et le lien produit que n'importe qui peut voir sans compte. Le label "Sponsored" et le classement sont des signaux publics que Walmart montre déjà à chaque acheteur, ce qui rend l'intelligence publicitaire sur cette surface défendable. Soyez attentif aux droits d'auteur en ce qui concerne les images de produits et le texte publicitaire, qui sont la propriété intellectuelle du vendeur et de Walmart, analysez-les donc plutôt que de les republier comme vôtres. Respectez les attentes de débit indiquées par Walmart et gardez votre volume de requêtes suffisamment bas pour ne pas surcharger ses serveurs. Évitez entièrement les données personnelles, y compris tout ce qui est lié à des acheteurs ou vendeurs identifiables au-delà de ce qui est publiquement listé sur une page de résultats. Si vous prévoyez de réutiliser les données commercialement, obtenez une permission ou un accord officiel plutôt que de supposer que le silence est un consentement.

Pour le volume ou l'usage commercial, la bonne voie est un canal officiel: Walmart gère une plateforme publicitaire Connect avec ses propres rapports pour les annonceurs, et le programme développeur Walmart.io expose des API sanctionnées. Ce sont les bons outils quand vous avez besoin de grands volumes, d'une structure garantie ou de droits commerciaux. Ce guide se limite délibérément aux données de recherche et de placement sponsorisé publics parce que c'est la ligne qui rend le travail défendable. Il ne couvre rien derrière une connexion, les données personnelles d'acheteurs ou de vendeurs, les métriques de campagne internes comme les dépenses ou le taux de clics d'un autre annonceur, ni aucune tentative de contourner l'authentification. Si votre projet a besoin de plus que des placements publics, les outils publicitaires officiels de Walmart ou un accord de données sont la bonne voie, pas un scraper plus malin.

Récapitulatif

Points clés

  • Walmart rend la recherche côté client. Une récupération simple retourne une page incomplète, vous devez donc la rendre avant de l'analyser, ce que la Crawling API fait derrière une IP de confiance en un seul appel.
  • Filtrez sur le label "Sponsored". Lisez le tag [data-testid^="variant-"] .gray à l'intérieur de chaque carte et ne gardez que les placements payants, pour que les publicités restent séparées des résultats organiques.
  • Capturez titre, prix, position et lien. Les hooks product-title et product-price de Walmart vous donnent les champs; compter uniquement les cartes sponsorisées vous donne la position.
  • Regroupez par annonceur pour l'intelligence. Regrouper les enregistrements par produit ou marque répond à qui fait de la publicité sur un mot-clé et à quel rang, suivi dans le temps comme un flux concurrentiel.
  • Restez sur les données publiques. Respectez les CGU et robots.txt de Walmart, préférez les outils officiels Walmart Connect ou Walmart.io pour le volume ou l'usage commercial, et ne touchez jamais aux connexions, aux données personnelles ou aux métriques de campagne privées d'un autre annonceur.

Foire aux questions

Qu'est-ce que les articles sponsorisés sur Walmart?

Les articles sponsorisés sont des produits qu'un annonceur paie pour faire remonter dans les résultats de recherche ou les pages de catégorie de Walmart. Ils se trouvent dans la même grille que les annonces organiques mais portent un petit label "Sponsored", et font partie de la plateforme publicitaire de Walmart, où les vendeurs enchérissent pour mettre leurs produits devant les acheteurs cherchant un mot-clé donné. Parce que le placement et le label sont visibles pour chaque acheteur, ce sont des signaux publics que vous pouvez lire sur la page.

Pourquoi une requête simple retourne-t-elle des données incomplètes de Walmart?

Parce que Walmart rend la grille de recherche côté client avec JavaScript. Le HTML initial est partiel jusqu'à ce que les scripts de la page s'exécutent dans un navigateur, donc une requête HTTP brute retourne une page avec les cartes sponsorisées, les prix et les liens manquants ou vides, et Walmart sert souvent un défi au trafic automatisé en plus de cela. Rendre la page via la Crawling API derrière une IP de confiance vous donne la grille complète à analyser.

Mes sélecteurs retournent des chaînes vides. Qu'est-ce qui a changé?

Presque certainement le balisage de Walmart. Le long conteneur de classes utilitaires, les valeurs data-testid et la classe de prix w_iUH7 changent sans préavis, donc les sélecteurs qui fonctionnaient le mois dernier peuvent se casser. Le conteneur de classes utilitaires généré est le plus fragile d'entre eux. Réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour les sélecteurs. La maintenance périodique des sélecteurs est normale pour tout scraper de production.

Comment savoir quels produits font de la publicité sur un mot-clé?

Analysez uniquement les cartes portant le label "Sponsored", capturez le titre, le prix, la position et le lien produit de chacune, puis regroupez les enregistrements par annonceur. Exécutez le même mot-clé selon un planning et comparez les exécutions pour voir de nouveaux annonceurs entrant sur le terme, des mouvements de prix sur les placements et des changements de rang. Ce regroupement au niveau du mot-clé est le résultat d'intelligence publicitaire vers lequel ce guide tend.

Puis-je obtenir les dépenses ou le taux de clics d'un autre annonceur?

Non, et ce guide ne couvre pas cela. Les dépenses, les impressions et le taux de clics sont des métriques de campagne privées qui se trouvent dans le propre compte d'un annonceur, pas sur la page de résultats publics. Le scraping ne peut pas les atteindre, et essayer de le faire signifierait aller derrière une connexion. La seule source sanctionnée pour ce type de données est vos propres rapports Walmart Connect pour les campagnes que vous gérez.

À quelle fréquence dois-je collecter les données publicitaires Walmart?

Cela dépend de la rapidité d'évolution du mot-clé. Pour les termes compétitifs où les annonceurs et les prix changent fréquemment, une exécution quotidienne ou quasi-quotidienne maintient votre vue à jour; pour les catégories plus lentes, hebdomadaire suffit souvent. Quelle que soit la cadence choisie, gardez le taux de requêtes par IP faible et misez sur la rotation pour qu'un planning plus rapide ne vous fasse pas throttler. Surveillez les codes de statut et reculez quand vous commencez à voir des défis.

Commencer à construire

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.

En libre-service · Sans appel commercial requis · Volumes de crawl entreprise disponibles