eBay est une plateforme en ligne bien connue qui offre des opportunités de commerce dans une large gamme de produits parmi ses utilisateurs enregistrés. Dans ce guide, nous allons expliquer comment extraire des données d'une annonce eBay à l'aide de Python. En tant que tel, nous nous intéresserons aux détails qui sont disponibles à partir de l'annonce elle-même ainsi qu'en allant à chacun des produits à tour de rôle pour obtenir des détails plus fins.
Pour commencer, assurez-vous d'avoir installé les bibliothèques Python suivantes :
Installez ces bibliothèques en utilisant :
pip install requests lxml pandas
Lors de la recherche de produits sur eBay, l'URL de chaque page peut être modifiée pour naviguer dans les résultats paginés. Par exemple :
Le paramètre _pgn est utilisé pour naviguer dans plusieurs pages de listes, ce qui permet d'extraire un grand nombre de données. Commençons le processus de scraping.
Pour commencer, nous allons configurer les en-têtes de manière à imiter une véritable requête de navigateur, ce qui permet d'éviter la détection et le blocage potentiel par les mesures anti-bots d'eBay. Ensuite, nous enverrons une demande à la page d'inscription afin de recueillir les liens pour chaque produit.
import requests
from lxml.html import fromstring
# Définir des en-têtes pour simuler un vrai 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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
# Paramètres de la requête de recherche
params = {
'_nkw': 'laptop',
}
# Envoyer une demande à la page d'inscription d'eBay
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)
Sur la page de listing, nous allons extraire les URL des différents produits. Cela nous permet de visiter chaque page de produit pour recueillir des détails spécifiques, tels que le titre du produit, le prix, etc.
# Analyser la page d'inscription pour extraire les liens vers les produits
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Sortie d'un échantillon des liens trouvés
print("Product Links:", links[:5]) # Display the first five product links
Avec les URL des produits en main, nous allons visiter chaque page de produit et extraire les détails suivants :
Ensuite, nous allons parcourir en boucle chaque lien et utiliser des expressions XPath pour localiser les informations requises sur la page du produit.
product_data = []
for url in links:
# Envoyer une demande à la page du produit
product_page_response = requests.get(url, headers=headers)
product_parser = fromstring(product_page_response.text)
# Extraire des données à l'aide de XPath
try:
product_title = product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0]
price = product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0]
shipping_cost = product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
product_condition = product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0]
available_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0]
sold_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1]
payment_options = ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label'))
return_policy = product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
# Stocker des données dans un dictionnaire
product_info = {
'Title': product_title,
'Price': price,
'Shipping Cost': shipping_cost,
'Condition': product_condition,
'Available Quantity': available_quantity,
'Sold Quantity': sold_quantity,
'Payment Options': payment_options,
'Return Policy': return_policy,
}
product_data.append(product_info)
except IndexError as e:
print(f"An error occurred: {e}")
Après avoir collecté les données, nous pouvons les enregistrer dans un fichier CSV à l'aide de Pandas.
import pandas as pd
# Convertir les données en DataFrame
df = pd.DataFrame(product_data)
# Enregistrer au format CSV
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
eBay utilise la limitation de débit pour éviter les demandes excessives. Voici quelques méthodes pour éviter d'être détecté :
En suivant ces bonnes pratiques, vous pouvez minimiser le risque d'être bloqué et continuer à scraper des données de manière efficace.
Voici le code complet permettant de récupérer les données d'eBay et de les enregistrer dans un fichier CSV :
import requests
import random
from lxml.html import fromstring
import pandas as pd
useragents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36']
# Définir les en-têtes de la requête
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',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'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',
'user-agent': random.choice(useragents),
}
# Paramètres de recherche
params = {'_nkw': 'laptop'}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Récupérer la page de l'annonce
listing_page_response = requests.get('https://www.ebay.com/sch/i.html', params=params, headers=headers, proxies=proxies)
listing_parser = fromstring(listing_page_response.text)
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')
# Extraire des données sur les produits
product_data = []
for url in links:
product_page_response = requests.get(url, headers=headers, proxies=proxies)
product_parser = fromstring(product_page_response.text)
try:
product_info = {
'Title': product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0],
'Price': product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0],
'Shipping Cost': product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0],
'Condition': product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0],
'Available Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0],
'Sold Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1],
'Payment Options': ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label')),
'Return Policy': product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
}
product_data.append(product_info)
except IndexError:
continue
# Enregistrer au format CSV
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")
Le scraping d'eBay avec Python permet de collecter efficacement des données sur les produits, les prix et les tendances. Dans ce guide, nous avons abordé le scraping des listes, la gestion de la pagination, la définition des en-têtes et l'utilisation de proxys pour éviter la détection. N'oubliez pas de respecter les conditions de service d'eBay en utilisant des intervalles de requête responsables et une rotation de proxy. Grâce à ces outils, vous pouvez désormais collecter et analyser facilement les données d'eBay pour obtenir des informations sur le marché. Bon scraping !
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0