Guide sur la façon de récupérer les données de Walmart avec Python

Commentaires: 0

La veille économique, la recherche et l'analyse ne sont que quelques-unes des possibilités infinies offertes par le web scraping. Une entité commerciale à part entière comme Walmart fournit une structure parfaite pour nous permettre de collecter les informations nécessaires. Nous pouvons facilement récupérer les données de Walmart telles que le nom, le prix et les informations sur les critiques à partir de leur multitude de sites web en utilisant différentes techniques de scraping.

Dans cet article, nous allons expliquer comment récupérer les données de Walmart. Nous utiliserons requests pour envoyer des requêtes HTTP et lxml pour analyser les documents HTML renvoyés.

Pourquoi utiliser Python pour récupérer les données de Walmart ?

Lorsqu'il s'agit d'extraire des données de produits sur plusieurs sites de vente au détail, Python est l'une des options les plus efficaces disponibles. Voici comment il s'intègre parfaitement aux projets d'extraction:

  1. Bibliothèques avancées. L'existence de requêtes pour l'interaction web et de lxml pour l'analyse HTML vous permet de récupérer de vastes catalogues en ligne avec une facilité et une efficacité extrêmes.
  2. Facilité d'utilisation. Grâce à une syntaxe facile à utiliser, les utilisateurs peuvent programmer des processus d'extraction de données avec peu ou pas d'expérience préalable et ainsi se mettre directement au travail.
  3. Soutien de la communauté. La complexité des sites web de vente au détail signifie qu'il existe une pléthore de ressources qualifiées et de soutien de la part de la communauté pour vous aider à résoudre les problèmes qui se posent.
  4. Traitement des données. Analyse approfondie. Avec l'aide de Pandas pour la manipulation des données et de Matplotlib pour la représentation visuelle, Python permet à l'utilisateur d'analyser des données à une échelle plus large, telle que la collecte et l'analyse.
  5. Gestion du contenu dynamique. Avec Selenium, il est possible d'interagir avec les éléments web dynamiques, ce qui permet d'assurer une collecte étendue de données, même à partir de pages chargées en JavaScript.
  6. Mise à l'échelle efficace. Grâce à sa capacité à gérer des ensembles de données volumineux et minuscules, Python fonctionne très bien pendant de longues périodes, même lorsqu'il est soumis à des activités d'extraction de données intensives.

L'utilisation d'un tel langage pour des projets dans le domaine de la vente au détail permet non seulement de simplifier l'aspect technique, mais aussi d'accroître l'efficacité et la portée de l'analyse, ce qui en fait le premier choix pour les experts désireux d'acquérir une connaissance approfondie du marché. Ces aspects peuvent s'avérer particulièrement utiles lorsque l'on décide d'extraire des données de Walmart.

Commençons par construire un outil de scraping web Walmart.

Configurer l'environnement pour récupérer les données de Walmart

Pour commencer, assurez-vous que Python est installé sur votre ordinateur. Les bibliothèques nécessaires peuvent être téléchargées à l'aide de pip:


pip install requests
pip install  lxml
pip install urllib3

Nous allons maintenant importer des bibliothèques telles que

  • requests - pour récupérer des pages web via HTTP;
  • lxml - pour la génération d'arbres de documents HTML;
  • CSV - pour écrire les données collectées dans des fichiers CSV;
  • random - pour la sélection des chaînes de caractères du proxy et de l'agent utilisateur.

import requests
from lxml import html
import csv
import random
import urllib3
import ssl

Définir les URL des produits

La liste des URL de produits à extraire des données Walmart peut être ajoutée comme suit.


product_urls = [
    'link with https',
    'link with https',
    'link with https'
]

Chaînes User-Agent et Proxies

Lorsque l'on fait du web scraping avec Walmart, il est essentiel de présenter les bons en-têtes HTTP, en particulier l'en-tête User-Agent, afin d'imiter un navigateur réel. En outre, les systèmes anti-bots du site peuvent également être contournés en utilisant des serveurs proxy rotatifs. Dans l'exemple ci-dessous, les chaînes User-Agent sont présentées avec des instructions pour ajouter une autorisation de serveur proxy par adresse IP.


user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]

En-têtes des demandes

Les en-têtes de requête doivent être définis de manière à ce qu'ils soient déguisés comme provenant du navigateur de l'utilisateur. Cela sera très utile lorsque l'on essaiera de récupérer les données de Walmart. Voici un exemple de ce que cela donnerait:


headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'dnt': '1',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
}

Initialiser le stockage des données

La première étape consiste à créer une structure qui acceptera les informations sur les produits.


product_details = []

L'énumération des pages URL fonctionne de la manière suivante: Pour chaque page URL, une requête GET est lancée avec un User-Agent et un proxy choisis au hasard. Une fois qu'une réponse HTML est renvoyée, elle est analysée pour y trouver les détails du produit, notamment le nom, le prix et les commentaires. Les détails pertinents sont enregistrés dans la structure de données du dictionnaire qui est ensuite ajoutée à la liste précédemment créée.


for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Envoyer une requête HTTP GET à l'URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Analyse du contenu HTML à l'aide de lxml
   parser = html.fromstring(response.text)
   # Extraire le titre du produit
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Prix des produits d'extraction
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Extraire les détails de l'examen
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Stocker les informations extraites dans un dictionnaire
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Ajouter les détails du produit à la liste
   product_details.append(product_detail)

Titre:

1.png

Prix:

2.png

Détail de la révision:

3.png

Enregistrer les données au format CSV

  1. Créez un nouveau fichier en spécifiant CSV comme type de fichier et mettez-le en mode écriture.
  2. Spécifiez les noms des champs (colonnes) du fichier CSV.
  3. Pour écrire des dictionnaires dans le fichier CSV, créez un objet csv.DictWriter.
  4. Écrire la ligne d'en-tête du fichier CSV.
  5. Pour chaque dictionnaire contenu dans product_details, parcourez-le en boucle et écrivez-le sous forme de ligne dans le fichier CSV.

with open('walmart_products.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'review_details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for product_detail in product_details:
        writer.writerow(product_detail)

Code complet

Lorsque le web scraping Walmart sera terminé, le script Python complet ressemblera à celui présenté ci-dessous. Voici également quelques commentaires pour faciliter la compréhension de chaque section.


import requests
from lxml import html
import csv
import random
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Liste des URL de produits à extraire des données de Walmart
product_urls = [
   'link with https',
   'link with https',
   'link with https'
]

# Chaînes d'agent aléatoires pour l'anonymat
user_agents = [
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

# Liste de proxy pour la rotation d'IP
proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]


# En-têtes pour imiter les requêtes du navigateur
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-IN,en;q=0.9',
   'dnt': '1',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-platform': '"Linux"',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
}

# Initialisation d'une liste vide pour stocker les détails du produit
product_details = []

# Bouclez l'URL de chaque produit
for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Envoyer une requête HTTP GET à l'URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Analyse du contenu HTML à l'aide de lxml
   parser = html.fromstring(response.text)
   # Extraire le titre du produit
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Prix des produits d'extraction
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Extraire les détails de l'examen
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Stocker les informations extraites dans un dictionnaire
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Ajouter les détails du produit à la liste
   product_details.append(product_detail)

# Enregistrer les données extraites dans un fichier CSV
with open('walmart_products.csv', 'w', newline='') as csvfile:
   fieldnames = ['title', 'price', 'review_details']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for product_detail in product_details:
       writer.writerow(product_detail)

Suggestions supplémentaires

Pour ceux qui utilisent Python pour s'interfacer avec l'API de scraping de Walmart, il est crucial de développer des méthodes robustes qui scrappent efficacement les prix de Walmart et les résultats des évaluations de Walmart. Cette API permet d'accéder directement à de nombreuses données sur les produits, ce qui facilite l'analyse en temps réel des prix et des commentaires des clients.

L'utilisation de ces stratégies spécifiques améliore la précision et la portée des informations collectées, ce qui permet aux entreprises de s'adapter rapidement aux changements du marché et aux tendances des consommateurs. Grâce à l'application stratégique de l'API Walmart en Python, les entreprises peuvent optimiser leurs processus de collecte de données, garantissant ainsi une analyse complète du marché et une prise de décision éclairée.

Conclusion

Dans ce tutoriel, nous avons expliqué comment utiliser les bibliothèques Python pour récupérer les données de Walmart et les enregistrer dans un fichier CSV en vue d'une analyse ultérieure. Le script fourni est basique et sert de point de départ que vous pouvez modifier pour améliorer l'efficacité du processus de récupération. Les améliorations peuvent inclure l'ajout d'intervalles de temps aléatoires entre les requêtes pour simuler la navigation humaine, l'utilisation d'agents utilisateurs et de proxies pour masquer le bot, et la mise en œuvre d'une gestion avancée des erreurs pour faire face aux interruptions ou aux échecs du scraping.


Commentaires:

0 Commentaires