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.
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:
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.
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
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
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'
]
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>',
]
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',
}
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:
Prix:
Détail de la révision:
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)
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)
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.
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0