🔥 Tous les proxies résidentiels et mobiles – seulement $1. Essayez maintenant!

Guide sur les outils de scraping eBay : comment extraire des données d’eBay

Guide sur les outils de scraping eBay : comment extraire des données d'eBay

eBay dispose d’une véritable mine d’or de données publiques sur les prix. Des millions d’annonces en ligne concernant des objets de collection, des appareils électroniques, des pièces de rechange qui ne sont plus commercialisées, etc. — toutes utiles pour le suivi des prix, les études de marché ou l’analyse de la concurrence. Le problème, c’est d’accéder à ces données de manière fiable. Un simple script Python vous permettra peut-être d’accéder à quelques pages avant qu’eBay ne commence à vous imposer des CAPTCHA.

Dans ce guide, je vais donc vous expliquer comment extraire correctement des données sur eBay à l’aide de Web Unlocker de Floppydata et obtenir de véritables résultats.

TL;DR

Comment extraire les annonces eBay sans perdre de temps avec les CAPTCHA et les sélecteurs défectueux

• eBay bloque rapidement les scrapers basiques : CAPTCHA, limites de requêtes, détection des bots, tout y passe. Une simple requête Python ne suffira pas.

• La solution la plus simple est le Web Unlocker de Floppydata : il contourne la couche anti-bot et vous renvoie du code HTML épuré.

• À partir de là, Python et BeautifulSoup suffisent pour extraire les données des annonces à des fins de suivi des prix, de recherche et d’analyse.

• La plupart des tutoriels sur le scraping disponibles en ligne ne fonctionnent déjà plus : eBay est passé de li.s-item à li.s-card et de nombreux sélecteurs n’ont jamais été mis à jour.

• Les nouveaux comptes Floppydata bénéficient de cinq extractions gratuites ; vous pouvez donc suivre ce guide sans avoir à débourser quoi que ce soit au départ.

Mais qu’est-ce que le « scraping » sur eBay, au juste ?

C’est assez simple, en fait. Il suffit d’extraire les données des annonces accessibles au public sur les pages eBay et de les convertir en un format exploitable — un fichier CSV, un fichier JSON, peu importe. Au lieu de parcourir les annonces une par une, un scraper récupère toutes ces données en bloc.

Avant d’aborder le code proprement dit, il convient de connaître deux types de pages :

  • Les pages de résultats de recherche, avec un aperçu comprenant le titre, le prix, l’état, les frais de livraison et un lien vers l’annonce.
  • Les pages de détails des articles, c’est-à-dire les URL de type /itm/ITEM_ID, où se trouvent les informations plus détaillées telles que les descriptions complètes, les évaluations du vendeur, les caractéristiques de l’article et les options de variantes.

Dans ce tutoriel, nous nous concentrerons sur les pages de résultats de recherche, car c’est par là que la plupart des gens commencent.

Pourquoi extraire les données d’eBay ?

Donc, une fois que vous avez récupéré ces données, il y a franchement une multitude de choses que vous pouvez en faire. Voici celles que j’utilise moi-même :

  1. Suivi des prix. Vous pouvez ainsi voir d’un seul coup d’œil à quel prix se vendent réellement les biens parmi des milliers d’annonces actives et vendues, et ce sont justement les annonces « vendues » qui constituent la mine d’or, car ce sont les prix que les acheteurs ont réellement payés, et non pas un chiffre fantaisiste que le vendeur avait fixé en espérant le voir se réaliser.
  2. Étude de la concurrence. Vous pouvez voir exactement quels articles se vendent, dans quel état ils sont proposés, qui les met en vente et à quel prix ; ainsi, au lieu d’essayer de deviner quel prix fixer, vous le savez tout simplement.
  3. Revente et arbitrage. C’est ce qui permet de payer les factures, car il existe actuellement des annonces à des prix inférieurs à la valeur du marché, et les données vous permettent de les repérer et de les saisir avant même que quelqu’un d’autre ne les remarque.
  4. Recherche sur les produits. Avant d’investir de l’argent réel dans l’approvisionnement d’une catégorie, vous pouvez analyser les chiffres et déterminer en quelques minutes s’il existe une véritable demande ou si vous ne feriez que geler des liquidités dans des articles qui ne se vendront jamais.
  5. Suivi des vendeurs. Et lorsque vous souhaitez suivre un vendeur en particulier, la marche à suivre est exactement la même : il vous suffit d’indiquer l’URL de sa boutique à la place d’un critère de recherche, et tout son catalogue ainsi que ses prix s’affichent immédiatement sous vos yeux.

Si votre activité touche de près ou de loin à la revente, au commerce électronique ou à la tarification, ce type de données vous fait gagner un temps fou et vous aide à prendre des décisions plus éclairées bien plus rapidement.

Pourquoi ne pas simplement utiliser l’API officielle ?

Honnêtement, ce n’est pas une mauvaise option pour les tâches simples. L’API Browse gère assez bien les requêtes de volume modéré sur les annonces actives. Mais elle implique un processus de validation que vous devez d’abord suivre, des limites de débit qui s’appliquent assez rapidement, et elle ne vous offre tout simplement pas toutes les fonctionnalités.

Les annonces vendues n’y figurent pas, les avis n’y figurent pas, les données complètes sur les variantes n’y figurent pas telles qu’elles s’affichent sur la page réelle. Ainsi, lorsque vous avez besoin d’une vue d’ensemble complète, c’est-à-dire du type de données qu’un utilisateur réel voit lorsqu’il charge la page, le scraping est tout simplement la solution la plus pratique.

Si vous découvrez tout cet univers, Floppydata propose une bonne introduction sur le fonctionnement d’un « web unlocker ».

Pourquoi est-il difficile d’extraire des données sur eBay ?

Ce n’est pas impossible, mais il y a clairement des éléments qui jouent en votre défaveur. Deux obstacles en particulier auxquels la plupart des gens se heurtent.

L’un d’entre eux concerne la détection anti-bot. eBay utilise des CAPTCHA et une limitation du débit ; une adresse IP jugée peu fiable vous vaudra très rapidement des erreurs 403. La plateforme a également renforcé ses mesures début 2026 ; veillez donc à adopter un comportement responsable : utilisez uniquement des données publiques, maintenez un débit de requêtes normal et évitez toute action touchant aux commandes ou à tout autre élément de ce type. Vous avez besoin d’adresses IP résidentielles et d’un comportement qui ressemble réellement à celui d’un navigateur, sinon vous n’obtiendrez pas de réponses valides.

Le deuxième point concerne le balisage, et celui-ci est un peu piégeux. Alors que je rédigeais ce guide, je me suis rendu compte qu’eBay était déjà passé de li.s-item à li.s-card, ainsi que toutes les pages .s-card__title, .s-card__price et .s-card__subtitle qui s’y trouvent. La plupart des guides en ligne renvoient encore à l’ancienne structure ; ils ne fonctionnent donc plus désormais. Vos sélecteurs deviendront obsolètes à un moment ou à un autre, c’est ainsi que fonctionne eBay ; veillez donc à intégrer dès le départ des vérifications de sécurité pour les champs manquants.

Quoi qu’il en soit, c’est pour cette raison que je passe par le Web Unlocker de Floppydata plutôt que de me frotter directement à eBay.

Conditions préalables

Trois choses :

  • Python 3.10 ou version ultérieure
  • Un compte Floppydata associé à une clé API Web Unlocker. Chaque nouveau compte donne droit à cinq extractions gratuites, ce qui vous permet de suivre l’intégralité de ce guide sans débourser un centime. La clé se trouve dans le tableau de bord de Web Unlocker.
  • Deux bibliothèques : requests et beautifulsoup4

Paramètres du compte et informations relatives à la clé API

Commencez par installer les deux bibliothèques :

pip install requests beautifulsoup4

Ensuite, votre dossier de projet :

mkdir ebay-scraper
cd ebay-scraper
touch ebay_scraper.py

Envoi de la première requête

La première chose que j’ai essayée, c’était simplement une requête basique pour voir ce qui se passait :

import requests

url = "https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard"
response = requests.get(url)

print(response.status_code)
print(response.text[:500])

Page bloquée. Pas d’annonces, juste rien d’utile. eBay détecte immédiatement une simple requête Python : pas d’empreinte numérique, pas d’adresse IP de confiance, ça ne marchera tout simplement pas. Alors plutôt que de perdre mon temps avec ça, j’utilise simplement le Web Unlocker.

Extraction de données sur eBay avec Floppydata Web Unlocker

Il se charge de tous les aspects fastidieux : adresse IP résidentielle, empreinte du navigateur, rendu des pages, et vous renvoie du code HTML épuré. De plus, vous n’êtes facturé que pour les extractions réussies ; vous ne perdez donc pas de crédits en cas d’échec.

Je teste toujours dans l’environnement de test du tableau de bord (environnement de test « no-code » de Web Unlocker) avant d’écrire quoi que ce soit. Collez l’URL de recherche, cliquez sur « Scrape », puis examinez les résultats obtenus. Il est bien plus facile de créer un analyseur syntaxique lorsque vous savez déjà sur quoi vous travaillez.

Capture d'écran de l'interface d'un outil de web scraping

Nous disposons désormais du code HTML ; passons donc au codage.

Étape 1 : Établir la demande

import requests
import json
from bs4 import BeautifulSoup

API_URL = "https://api.floppydata.net/v1/webUnlocker"
API_KEY = "YOUR_API_KEY"

SEARCH_URL = "https://www.ebay.com/sch/i.html?_nkw=mechanical+keyboard&_pgn=1"
OUTPUT_FILE = "ebay_listings.json"

Remplacez YOUR_API_KEY par la clé figurant sur votre tableau de bord.

Par ailleurs, l’adresse _pgn=1 correspond simplement au numéro de page. Si vous souhaitez consulter la deuxième page, remplacez-la par _pgn=2. Pour la troisième page, c’est _pgn=3. C’est très simple.

Étape 2 : Récupérer la page à l’aide de Web Unlocker

def fetch_html(url):
    response = requests.post(
        API_URL,
        headers={
            "Content-Type": "application/json",
            "X-Api-Key": API_KEY,
        },
        json={
            "url": url,
            "country": "US",
            "city": "New York",
            "difficulty": "medium",
            "expiration": 0,
        },
        timeout=120,
    )

    response.raise_for_status()

    data = response.json()
    html = data.get("html")

    if not html:
        raise ValueError("Unlocker response did not include an 'html' field.")

    return html

Le pays et la ville permettent de s’assurer que la requête transite par une adresse IP résidentielle américaine, ce qui a une incidence à la fois sur les tarifs et sur les annonces effectivement affichées. Le paramètre « Difficulty » medium est particulièrement adapté à eBay, car ce site dispose d’une protection anti-bot très efficace. Si vous choisissez une valeur inférieure, vous serez tout simplement bloqué. L’expiration 0 force le rafraîchissement de la page à chaque fois, au lieu d’utiliser une réponse mise en cache. Le code HTML généré est renvoyé dans le champ « html » du JSON, et c’est ce que BeautifulSoup analyse à l’étape suivante. Si vous souhaitez consulter tous les paramètres disponibles, vous les trouverez dans la documentation de l’API Web Unlocker.

Étape 3 : Extraire les listes

Chaque résultat affiché sur la page de recherche est un li.s-card container. Pour extraire proprement les annonces eBay, nous parcourons chaque fiche et récupérons les champs souhaités, en effectuant des vérifications préventives afin qu’un champ manquant ne provoque jamais un plantage du programme :

def extract_listings(html):
    soup = BeautifulSoup(html, "html.parser")
    cards = soup.select("li.s-card")
    listings = []

    for card in cards:
        title_el = card.select_one(".s-card__title")
        title = title_el.get_text(" ", strip=True) if title_el else None

        if title:
            # eBay appends this as accessibility text
            title = title.replace("Opens in a new window or tab", "").strip()

        # Skip the placeholder card at the top of search results
        if not title or title == "Shop on eBay":
            continue

        price_el = card.select_one(".s-card__price")
        condition_el = card.select_one(".s-card__subtitle")

        # Shipping info sits inside attribute rows
        shipping = None

        for row in card.select(".s-card__attribute-row"):
            text = row.get_text(" ", strip=True)

            if any(word in text.lower() for word in ("ship", "free", "delivery")):
                shipping = text
                break

        # Grab the first link that points to an item detail page
        url = None

        for a in card.select("a.s-card__link"):
            href = a.get("href")

            if href and "/itm/" in href:
                url = href.split("?")[0]
                break

        listings.append({
            "title": title,
            "price": price_el.get_text(" ", strip=True) if price_el else None,
            "condition": condition_el.get_text(" ", strip=True) if condition_el else None,
            "shipping": shipping,
            "url": url,
        })

    return listings

Deux points à connaître.

  • eBay affiche toujours une carte d’espace réservé « Shop on eBay » en haut des résultats de recherche. Si vous ne la passez pas, le premier élément de la liste des annonces n’est qu’un élément inutile.
  • Le titre récupère également la mention « S’ouvre dans une nouvelle fenêtre ou un nouvel onglet » comme texte d’accessibilité à partir de la balise d’ancrage, de sorte que la ligne de remplacement la nettoie avant que quoi que ce soit ne soit ajouté.

Étape 4 : Enregistrez les résultats

def main():
    print(f"Fetching data from: {SEARCH_URL}")

    html = fetch_html(SEARCH_URL)
    listings = extract_listings(html)

    if not listings:
        raise SystemExit("No listings found. eBay may have changed its markup.")

    with open(OUTPUT_FILE, "w", encoding="utf-8") as file:
        json.dump(listings, file, indent=2)

    print(f"Found {len(listings)} listings")
    print(f"Saved results to {OUTPUT_FILE}")


if __name__ == "__main__":
    main()

Exécutez le script :

python ebay_scraper.py

Vous devriez alors voir quelque chose comme :

[
  {
    "title": "MSI Forge GK600 TKL Wireless Mechanical Keyboard RGB Bluetooth 2.4GHz",
    "price": "$49.99",
    "condition": "Brand New",
    "shipping": "Free shipping",
    "url": "https://www.ebay.com/itm/227344950627"
  }
]

Liste des claviers d'ordinateur disponibles à la vente

Voici comment fonctionne le scraper de base.

À partir de là, pour modifier le mot-clé, il suffit de changer « _nkw=mechanical+keyboard » dans l’URL. Si vous souhaitez accéder à une autre page, vous pouvez passer de _pgn=1 à _pgn=2, _pgn=3, et ainsi de suite.

Dépannage

C’est donc évident : si vous parcourez eBay assez longtemps, vous tomberez probablement sur l’une de ces annonces :

  • Erreurs 403 : eBay a signalé votre adresse IP. La solution consiste à passer par le Web Unlocker en utilisant des adresses IP résidentielles.
  • Réponses vides : il s’agit généralement d’un problème d’affichage. Vérifiez bien que vous lisez bien le champ « html » dans la réponse de Web Unlocker, et non le corps JSON brut.
  • Champs manquants : toutes les annonces ne comportent pas nécessairement d’informations sur l’état ou les frais de port. Les contrôles de sécurité mis en place sur extract_listings gèrent déjà ce cas de figure.
  • Aucun résultat : eBay a de nouveau modifié les noms de ses classes CSS. Retournez sur l’espace de test, examinez le nouveau code et mettez à jour vos sélecteurs.

Votre prochaine étape

Écoutez, eBay n’est pas le site le plus compliqué à gérer, mais entre les CAPTCHA, la limitation du nombre de requêtes et le fait que la marge change parfois sans crier gare, vous allez simplement perdre votre temps si vous vous lancez sans la bonne configuration. En passant par un intermédiaire qui gère tout cela, vous pouvez vous concentrer directement sur l’exploitation des données.

C’est justement là que réside la force du Web Unlocker de Floppydata. Rotation de proxys résidentiels, empreintes de navigateur réelles, rendu de page complet, et vous ne payez que pour les réponses réussies ; les tentatives de scraping infructueuses ne vous coûtent donc rien. Ajoutez-y quelques lignes de BeautifulSoup et, honnêtement, tout cela devient assez simple.

Cinq « scrapes » gratuits sont offerts avec chaque nouveau compte, ce qui vous permet de suivre ce guide dans son intégralité sans rien débourser.

Essayez les Proxies Floppydata dès maintenant - à partir de 1$/Go

Partager cet article :

Table des matières

Proxies à 1 $
Obtenez des possibilités illimitées

Vous pouvez aussi aimer :
Prêt à faire l'expérience d'un service de procuration transparent et fiable ?
Proxies rapides, sûrs et sans problèmes, adaptés à vos besoins