Pour l'analyse de la concurrence, la surveillance des prix et les études de marché, il est important de récupérer des données sur les produits à partir des sites de commerce électronique. Vous pouvez utiliser Python pour extraire efficacement les données des pages de produits. Dans ce guide, nous allons montrer comment récupérer des informations sur les produits à partir de magasins en ligne en utilisant une combinaison de requêtes et de lxml.
Le scraping du commerce électronique consiste à extraire les détails des produits tels que les noms, les prix et les identifiants des boutiques en ligne. Python, avec ses bibliothèques polyvalentes, rend cette tâche efficace et simple. Dans ce guide, nous allons extraire des informations sur les produits du site Web de Costco.
Avant de plonger dans le processus de scraping, assurez-vous que les bibliothèques Python nécessaires sont installées :
pip install requests
pip install lxml
Nous nous concentrerons sur l'extraction des noms de produits, des caractéristiques des produits et des marques de produits à partir de pages de produits spécifiques sur le site web.
Pour extraire des données d'un site web, vous devez comprendre la structure de la page web. Ouvrez une page web et inspectez les éléments que vous souhaitez extraire (par exemple, le nom du produit, les caractéristiques de la marque, etc.)
Tout d'abord, nous allons utiliser la bibliothèque requests pour envoyer des requêtes HTTP GET aux pages de produits. Nous allons également configurer les en-têtes de requête pour imiter une vraie requête de navigateur.
import requests
# Liste des URL de produits à récupérer
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Bouclez chaque URL et envoyez une requête GET
pour url dans urls :
response = requests.get(url, headers=headers)
if response.status_code == 200:
html_content = response.text
# D'autres traitements seront ajoutés dans les étapes suivantes
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
À l'aide de lxml, nous allons extraire les points de données requis du code HTML analysé.
from lxml import html
# Liste de stockage des données extraites
scraped_data = []
# Bouclez chaque URL et envoyez une requête GET
for url in urls:
response = requests.get(url)
if response.status_code == 200:
html_content = response.content
# Analyse du contenu HTML avec lxml
tree = html.fromstring(html_content)
# Extraire des données à l'aide de XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Ajouter les données extraites à la liste
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Imprimer les données extraites
for item in scraped_data:
print(item)
Les sites web mettent souvent en œuvre des mesures anti-bots. L'utilisation de proxys et la rotation des agents utilisateurs peuvent aider à éviter la détection.
Utilisation de proxies avec autorisation IP :
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Rotation des agents utilisateurs :
import random
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Ajouter d'autres agents utilisateurs si nécessaire
]
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url, headers=headers)
Enfin, nous enregistrerons les données scrappées dans un fichier CSV en vue d'une analyse ultérieure.
import csv
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Ecriture de données dans un fichier CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
print(f"Error occurred while writing data to {csv_file}")
import requests
import urllib3
from lxml import html
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Liste des URL de produits à récupérer
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
# en-têtes
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-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Liste des agents utilisateurs pour les demandes tournantes
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Ajouter d'autres agents utilisateurs si nécessaire
]
# Liste des mandataires pour les demandes de rotation
proxies = [
{'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
# Ajouter d'autres mandataires si nécessaire
]
# Liste de stockage des données extraites
scraped_data = []
# Bouclez chaque URL et envoyez une requête GET
for url in urls:
# Choisir un agent utilisateur aléatoire pour les en-têtes de la requête
headers['user-agent'] = random.choice(user_agents)
# Choisir un proxy aléatoire pour la demande
proxy = random.choice(proxies)
# Envoyer une requête HTTP GET à l'URL avec les en-têtes et le proxy
response = requests.get(url, headers=headers, proxies=proxy, verify=False)
if response.status_code == 200:
# Stocker le contenu HTML de la réponse
html_content = response.content
# Analyse du contenu HTML avec lxml
tree = html.fromstring(html_content)
# Extraire des données à l'aide de XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Ajouter les données extraites à la liste
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
# Imprimer un message d'erreur si la demande échoue
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Configuration du fichier CSV
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Ecriture de données dans un fichier CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
# Impression d'un message d'erreur en cas d'échec de l'écriture dans le fichier
print(f"Error occurred while writing data to {csv_file}")
L'utilisation de Python pour extraire des données de sites de commerce électronique tels que Costco est une méthode efficace pour collecter des informations sur les produits afin de les analyser et de prendre des décisions stratégiques. L'utilisation correcte de bibliothèques telles que Requests et Lxml permet d'obtenir des processus d'extraction automatisés capables de traiter des contenus HTML sans oublier la mise en œuvre d'une API anti-bot efficace. Il convient de noter que les protocoles de scraping éthiques doivent toujours être respectés.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0