Le guide ultime du Web Scraping Walmart
Raluca Penciuc le 23 février 2023

Le web scraping Walmart est un sujet populaire parmi les passionnés de données et les entreprises. Walmart est l'une des plus grandes entreprises de vente au détail au monde, et son site web contient une grande quantité de données. En récupérant ces données, vous pouvez obtenir des informations précieuses sur le comportement des consommateurs, les tendances du marché et bien plus encore.
Dans cet article, nous allons explorer le processus de web scraping Walmart en utilisant TypeScript et Puppeteer. Nous passerons également en revue la configuration de l'environnement, l'identification des données et leur extraction pour les utiliser dans vos propres projets. Enfin, nous verrons comment l'utilisation d'un scraper professionnel peut être une solution plus efficace et plus fiable.
À la fin de ce guide, vous aurez une solide compréhension du processus et serez en mesure de l'utiliser pour améliorer votre entreprise ou votre recherche. Que vous soyez un scientifique des données, un spécialiste du marketing ou un propriétaire d'entreprise, ce guide vous aidera à exploiter la puissance des données de Walmart pour favoriser votre réussite.
Conditions préalables
Avant de commencer, assurons-nous que nous disposons des outils nécessaires.
Tout d'abord, téléchargez et installez Node.js depuis le site officiel, en veillant à utiliser la version Long-Term Support (LTS). Cela permettra également d'installer automatiquement Node Package Manager (NPM), que nous utiliserons pour installer d'autres dépendances.
Pour ce tutoriel, nous utiliserons Visual Studio Code comme environnement de développement intégré (IDE), mais vous pouvez utiliser tout autre IDE de votre choix. Créez un nouveau dossier pour votre projet, ouvrez le terminal et exécutez la commande suivante pour créer un nouveau projet Node.js :
npm init -y
Cela créera un fichier package.json dans le répertoire de votre projet, qui contiendra des informations sur votre projet et ses dépendances.
Ensuite, nous devons installer TypeScript et les définitions de type pour Node.js. TypeScript offre un typage statique optionnel qui permet d'éviter les erreurs dans le code. Pour ce faire, exécutez dans le terminal
npm install typescript @types/node --save-dev
Vous pouvez vérifier l'installation en exécutant le programme :
npx tsc --version
TypeScript utilise un fichier de configuration appelé tsconfig.json pour stocker les options du compilateur et d'autres paramètres. Pour créer ce fichier dans votre projet, exécutez la commande suivante :
npx tsc -init
Assurez-vous que la valeur de "outDir" est fixée à "dist". De cette manière, nous séparerons les fichiers TypeScript des fichiers compilés. Vous trouverez plus d'informations sur ce fichier et ses propriétés dans la documentation officielle de TypeScript.
Maintenant, créez un répertoire "src" dans votre projet, et un nouveau fichier "index.ts". C'est ici que nous conserverons le code de scraping. Pour exécuter du code TypeScript, il faut d'abord le compiler, donc pour être sûr de ne pas oublier cette étape supplémentaire, nous pouvons utiliser une commande personnalisée.
Allez dans le fichier "package.json", et éditez la section "scripts" comme ceci :
"scripts": {
"test": "npx tsc && node dist/index.js"
}
Ainsi, lorsque vous exécuterez le script, il vous suffira de taper "npm run test" dans votre terminal.
Enfin, pour récupérer les données du site web, nous utiliserons Puppeteer, une bibliothèque de navigateur sans tête pour Node.js qui vous permet de contrôler un navigateur web et d'interagir avec des sites web de manière programmatique. Pour l'installer, lancez la commande suivante dans le terminal :
npm install puppeteer
Il est fortement recommandé lorsque vous souhaitez vous assurer de l'exhaustivité de vos données, car de nombreux sites Web contiennent aujourd'hui du contenu généré de manière dynamique. Si vous êtes curieux, vous pouvez consulter avant de continuer la documentation de Puppeteer pour voir de quoi il est capable.
Localisation des données
Maintenant que votre environnement est configuré, nous pouvons commencer à extraire les données. Pour cet article, j'ai choisi d'extraire les données de cette page produit : https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371.
Nous allons extraire les données suivantes :
- le nom du produit ;
- le numéro d'évaluation du produit ;
- les avis sur les produits comptent ;
- le prix du produit ;
- les images des produits ;
- les détails du produit.
Toutes ces informations sont mises en évidence dans la capture d'écran ci-dessous :

En ouvrant les outils de développement sur chacun de ces éléments, vous pourrez remarquer les sélecteurs CSS que nous utiliserons pour localiser les éléments HTML. Si vous ne savez pas comment fonctionnent les sélecteurs CSS, n'hésitez pas à consulter ce guide pour débutants.
Extraction des données
Avant d'écrire notre script, vérifions que l'installation de Puppeteer s'est bien déroulée :
import puppeteer from 'puppeteer';
async function scrapeWalmartData(walmart_url: string): Promise<void> {
// Launch Puppeteer
const browser = await puppeteer.launch({
headless: false,
args: ['--start-maximized'],
defaultViewport: null
})
// Create a new page
const page = await browser.newPage()
// Navigate to the target URL
await page.goto(walmart_url)
// Close the browser
await browser.close()
}
scrapeWalmartData("https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371")
Ici, nous ouvrons une fenêtre de navigateur, créons une nouvelle page, naviguons jusqu'à notre URL cible, puis fermons le navigateur. Pour des raisons de simplicité et de débogage visuel, j'ouvre la fenêtre du navigateur en mode maximisé et non sans tête.
Examinons maintenant la structure du site :

Pour obtenir le nom du produit, nous ciblons l'attribut "itemprop" de l'élément "h1". Le résultat que nous recherchons est son contenu textuel.
// Extract product name
const product_name = await page.evaluate(() => {
const name = document.querySelector('h1[itemprop="name"]')
return name ? name.textContent : ''
})
console.log(product_name)
Pour le numéro d'évaluation, nous avons identifié comme fiables les éléments "span" dont le nom de classe se termine par "rating-number".
// Extract product rating number
const product_rating = await page.evaluate(() => {
const rating = document.querySelector('span[class$="rating-number"]')
return rating ? rating.textContent : ''
})
console.log(product_rating)
Enfin (pour la section mise en évidence), pour le nombre d'avis et le prix du produit, nous nous appuyons sur l'attribut "itemprop", comme ci-dessus.
// Extract product reviews count
const product_reviews = await page.evaluate(() => {
const reviews = document.querySelector('a[itemprop="ratingCount"]')
return reviews ? reviews.textContent : ''
})
console.log(product_reviews)
// Extract product price
const product_price = await page.evaluate(() => {
const price = document.querySelector('span[itemprop="price"]')
return price ? price.textContent : ''
})
console.log(product_price)
Pour passer aux images des produits, nous naviguons plus loin dans le document HTML :

C'est un peu plus difficile, mais pas impossible. Comme nous ne pouvons pas identifier les images de manière unique, nous allons cette fois-ci cibler leurs éléments parents. Nous extrayons donc les éléments "div" dont l'attribut "data-testid" est défini sur "media-thumbnail".
Nous convertissons ensuite le résultat en un tableau Javascript, afin de pouvoir associer chaque élément à son attribut "src".
// Extract product images
const product_images = await page.evaluate(() => {
const images = document.querySelectorAll('div[data-testid="media-thumbnail"] > img')
const images_array = Array.from(images)
return images ? images_array.map(a => a.getAttribute("src")) : []
})
console.log(product_images)
Enfin, nous faisons défiler la page pour consulter les détails du produit :

Nous appliquons la même logique que pour l'extraction des images et, cette fois, nous utilisons simplement le nom de la classe "dangerous-html".
// Extract product details
const product_details = await page.evaluate(() => {
const details = document.querySelectorAll('div.dangerous-html')
const details_array = Array.from(details)
return details ? details_array.map(d => d.textContent) : []
})
console.log(product_details)
Le résultat final devrait ressembler à ceci :
Keter Adirondack Chair, Resin Outdoor Furniture, Teal
(4.1)
269 reviews
Now $59.99
[
'https://i5.walmartimages.com/asr/51fc64d9-6f1f-46b7-9b41-8880763f6845.483f270a12a6f1cbc9db5a37ae7c86f0.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/80977b5b-15c5-435e-a7d6-65f14b2ee9c9.d1deed7ca4216d8251b55aa45eb47a8f.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',
'https://i5.walmartimages.com/asr/80c1f563-91a9-4bff-bda5-387de56bd8f5.5844e885d77ece99713d9b72b0f0d539.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF', 'https://i5.walmartimages.com/asr/fd73d8f2-7073-4650-86a3-4e809d09286e.b9b1277761dec07caf0e7354abb301fc.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',
'https://i5.walmartimages.com/asr/103f1a31-fbc5-4ad6-9b9a-a298ff67f90f.dd3d0b75b3c42edc01d44bc9910d22d5.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF', 'h Combinant le style traditionnel et l'aspect et la sensation du bois avec des matériaux durables et sans entretien, cette chaise trouvera',
'Keter Adirondack Chair, Resin Outdoor Furniture, Gray : Fabriqué à partir d'une résine résistante aux intempéries pour une durabilité ultime La construction en polypropylène résistant aux intempéries empêche la décoloration, la rouille, l'écaillage et les bosses - contrairement au bois véritable Assemblage rapide et facile Porte-gobelet rotatif Confort classique redéfini Design ergonomique Durable et résistant aux intempéries Détente sans souci Dimensions : 31,9" L x 31,5" L x 38" H Hauteur du siège : 15,4" pour un siège baquet profond et un dossier haut La chaise pèse 22 livres - suffisamment lourde pour ne pas s'envoler avec le vent, mais suffisamment légère pour réorganiser facilement votre espace patio Capacité de 350 livres '
]
Contourner la détection des robots
Si le scraping de Walmart peut sembler facile au début, le processus peut devenir plus complexe et plus difficile à mesure que vous développez votre projet. Le site de vente au détail met en œuvre diverses techniques pour détecter et empêcher le trafic automatisé, de sorte que votre scraper à grande échelle commence à être bloqué.
Walmart utilise le modèle "Press & Hold" de CAPTCHA, proposé par PerimeterX, qui est connu pour être presque impossible à résoudre à partir de votre code. En outre, le site web utilise également les protections offertes par Akamai et ThreatMetrix et recueille plusieurs données de navigation pour générer et associer une empreinte digitale unique.
Parmi les données collectées sur les navigateurs, nous trouvons
- propriétés de l'objet Navigator (deviceMemory, hardwareConcurrency, languages, platform, userAgent, webdriver, etc.)
- Empreinte digitale de la toile
- le calendrier et les contrôles de performance
- plugin et énumération vocale
- travailleurs du web
- contrôle des dimensions de l'écran
- et bien d'autres encore
L'une des façons de surmonter ces difficultés et de poursuivre le scraping à grande échelle consiste à utiliser une API de scraping. Ce type de service offre un moyen simple et fiable d'accéder aux données de sites web tels que walmart.com, sans qu'il soit nécessaire de construire et d'entretenir son propre scraper.
WebScrapingAPI est un exemple de ce type de produit. Son mécanisme de rotation de proxy évite complètement les CAPTCHA, et sa base de connaissances étendue permet de randomiser les données du navigateur afin qu'il ressemble à un utilisateur réel.
L'installation est simple et rapide. Il vous suffit d'ouvrir un compte pour recevoir votre clé API. Elle est accessible depuis votre tableau de bord et sert à authentifier les demandes que vous envoyez.

Comme vous avez déjà configuré votre environnement Node.js, nous pouvons utiliser le SDK correspondant. Exécutez la commande suivante pour l'ajouter aux dépendances de votre projet :
npm install webscrapingapi
Il ne reste plus qu'à adapter les sélecteurs CSS précédents à l'API. La puissante fonctionnalité des règles d'extraction permet d'analyser les données sans modifications significatives.
import webScrapingApiClient from 'webscrapingapi';
const client = new webScrapingApiClient("YOUR_API_KEY");
async function exampleUsage() {
const api_params = {
'render_js': 1,
'proxy_type': 'residential',
'timeout': 60000,
'extract_rules': JSON.stringify({
name: {
selector: 'h1[itemprop="name"]',
output: 'text',
},
rating: {
selector: 'span[class$="rating-number"]',
output: 'text',
},
reviews: {
selector: 'a[itemprop="ratingCount"]',
output: 'text',
},
price: {
selector: 'span[itemprop="price"]',
output: 'text',
},
images: {
selector: 'div[data-testid="media-thumbnail"] > img',
output: '@src',
all: '1'
},
details: {
selector: 'div.dangerous-html',
output: 'text',
all: '1'
}
})
}
const URL = "https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371"
const response = await client.get(URL, api_params)
if (response.success) {
console.log(response.response.data)
} else {
console.log(response.error.response.data)
}
}
exampleUsage();
Conclusion
Cet article vous a présenté une vue d'ensemble du web scraping Walmart à l'aide de TypeScript et de Puppeteer. Nous avons discuté du processus de mise en place de l'environnement nécessaire, de l'identification et de l'extraction des données, et nous avons fourni des extraits de code et des exemples pour vous guider tout au long du processus.
L'exploitation des données de Walmart permet notamment d'obtenir des informations précieuses sur le comportement des consommateurs, les tendances du marché, la surveillance des prix et bien d'autres choses encore.
En outre, opter pour un service de scraping professionnel peut être une solution plus efficace, car il garantit que le processus est entièrement automatisé et qu'il gère les éventuelles techniques de détection des robots.
En exploitant la puissance des données de Walmart, vous pouvez mener votre entreprise au succès et rester en tête de la concurrence. N'oubliez pas de toujours respecter les conditions d'utilisation du site web et de ne pas faire du scrape de manière trop agressive afin d'éviter d'être bloqué.
Nouvelles et mises à jour
Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

Scrapez Amazon efficacement grâce à la solution rentable de Web Scraping API. Accédez à des données en temps réel, des produits aux profils des vendeurs. Inscrivez-vous dès maintenant !


Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.


Explorez le pouvoir de transformation du web scraping dans le secteur financier. Des données sur les produits à l'analyse des sentiments, ce guide donne un aperçu des différents types de données web disponibles pour les décisions d'investissement.
