Comment récupérer les données d'eBay à l'aide de Python

Commentaires: 0

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.

Nécessités

Pour commencer, assurez-vous d'avoir installé les bibliothèques Python suivantes :

  • Requests : Pour effectuer des requêtes HTTP.
  • lxml : Pour analyser le contenu HTML.
  • Pandas : Pour enregistrer des données dans un fichier CSV.

Installez ces bibliothèques en utilisant :


pip install requests lxml pandas

Comprendre la structure URL d'eBay pour la pagination

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.

Étape 1: envoi de demandes à eBay

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)

Etape 2: Analyse de la page de listing

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

Étape 3: Récupération des données sur les produits

Avec les URL des produits en main, nous allons visiter chaque page de produit et extraire les détails suivants :

  • Titre du produit ;
  • Prix ;
  • Frais d'expédition ;
  • Etat du produit ;
  • Quantité disponible ;
  • Quantité vendue ;
  • Options de paiement ;
  • Politique de retour.

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}")

Étape 4: Enregistrement des données dans un fichier CSV

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")

Gestion de la limitation du débit et du contournement de la détection sur eBay

eBay utilise la limitation de débit pour éviter les demandes excessives. Voici quelques méthodes pour éviter d'être détecté :

  • Utiliser des serveurs mandataires : alternez entre différentes adresses IP.
  • Réglez les intervalles entre les demandes : Mettez en place des délais entre les demandes.
  • Randomiser les agents utilisateurs : Variez la chaîne de l'agent utilisateur pour éviter la détection.

En suivant ces bonnes pratiques, vous pouvez minimiser le risque d'être bloqué et continuer à scraper des données de manière efficace.

Code complet

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 !

Commentaires:

0 Commentaires