{"id":45887,"date":"2026-06-24T11:19:06","date_gmt":"2026-06-24T11:19:06","guid":{"rendered":"https:\/\/floppydata.com\/non-categorise\/guide-sur-les-outils-de-scraping-ebay-comment-extraire-des-donnees-debay\/"},"modified":"2026-06-24T11:19:06","modified_gmt":"2026-06-24T11:19:06","slug":"ebay-scraper-guide-how-to-extract-data-from-ebay","status":"publish","type":"post","link":"https:\/\/floppydata.com\/fr\/blog\/ebay-scraper-guide-how-to-extract-data-from-ebay\/","title":{"rendered":"Guide sur les outils de scraping eBay : comment extraire des donn\u00e9es d&rsquo;eBay"},"content":{"rendered":"<p>eBay dispose d&rsquo;une v\u00e9ritable mine d&rsquo;or de donn\u00e9es publiques sur les prix. Des millions d\u2019annonces en ligne concernant des objets de collection, des appareils \u00e9lectroniques, des pi\u00e8ces de rechange qui ne sont plus commercialis\u00e9es, etc. \u2014 toutes utiles pour le suivi des prix, les \u00e9tudes de march\u00e9 ou l\u2019analyse de la concurrence. Le probl\u00e8me, c\u2019est d\u2019acc\u00e9der \u00e0 ces donn\u00e9es de mani\u00e8re fiable. Un simple script Python vous permettra peut-\u00eatre d\u2019acc\u00e9der \u00e0 quelques pages avant qu\u2019eBay ne commence \u00e0 vous imposer des CAPTCHA.   <\/p>\n<p>Dans ce guide, je vais donc vous expliquer comment extraire correctement des donn\u00e9es sur eBay \u00e0 l&rsquo;aide de Web Unlocker de Floppydata et obtenir de v\u00e9ritables r\u00e9sultats.<\/p>\n<div style=\"border-left: 3px solid #e5e7eb; padding-left: 16px; margin: 24px 0;\">\n<div style=\"font-size: 11px; font-weight: 600; color: #9ca3af; text-transform: uppercase; margin-bottom: 8px;\">TL;DR<\/div>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; font-style: italic; margin: 0;\">Comment extraire les annonces eBay sans perdre de temps avec les CAPTCHA et les s\u00e9lecteurs d\u00e9fectueux<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 eBay bloque rapidement les scrapers basiques : CAPTCHA, limites de requ\u00eates, d\u00e9tection des bots, tout y passe. Une simple requ\u00eate Python ne suffira pas. <\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 La solution la plus simple est le Web Unlocker de Floppydata : il contourne la couche anti-bot et vous renvoie du code HTML \u00e9pur\u00e9.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 \u00c0 partir de l\u00e0, Python et BeautifulSoup suffisent pour extraire les donn\u00e9es des annonces \u00e0 des fins de suivi des prix, de recherche et d&rsquo;analyse.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 La plupart des tutoriels sur le scraping disponibles en ligne ne fonctionnent d\u00e9j\u00e0 plus : eBay est pass\u00e9 de <code>li.s-item<\/code> \u00e0 <code>li.s-card<\/code> et de nombreux s\u00e9lecteurs n&rsquo;ont jamais \u00e9t\u00e9 mis \u00e0 jour.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 Les nouveaux comptes Floppydata b\u00e9n\u00e9ficient de cinq extractions gratuites ; vous pouvez donc suivre ce guide sans avoir \u00e0 d\u00e9bourser quoi que ce soit au d\u00e9part.<\/p>\n<\/div>\n<h2>Mais qu&rsquo;est-ce que le \u00ab scraping \u00bb sur eBay, au juste ?<\/h2>\n<p>C&rsquo;est assez simple, en fait. Il suffit d&rsquo;extraire les donn\u00e9es des annonces accessibles au public sur les pages eBay et de les convertir en un format exploitable \u2014 un fichier CSV, un fichier JSON, peu importe. Au lieu de parcourir les annonces une par une, un scraper r\u00e9cup\u00e8re toutes ces donn\u00e9es en bloc.  <\/p>\n<p>Avant d&rsquo;aborder le code proprement dit, il convient de conna\u00eetre deux types de pages :<\/p>\n<ul>\n<li><strong>Les pages de r\u00e9sultats de recherche<\/strong>, avec un aper\u00e7u comprenant le titre, le prix, l&rsquo;\u00e9tat, les frais de livraison et un lien vers l&rsquo;annonce.<\/li>\n<li><strong>Les pages de d\u00e9tails des articles<\/strong>, c&rsquo;est-\u00e0-dire les URL de type <code>\/itm\/ITEM_ID<\/code>, o\u00f9 se trouvent les informations plus d\u00e9taill\u00e9es telles que les descriptions compl\u00e8tes, les \u00e9valuations du vendeur, les caract\u00e9ristiques de l&rsquo;article et les options de variantes.<\/li>\n<\/ul>\n<p>Dans ce tutoriel, nous nous concentrerons sur les pages de r\u00e9sultats de recherche, car c&rsquo;est par l\u00e0 que la plupart des gens commencent.<\/p>\n<h2>Pourquoi extraire les donn\u00e9es d&rsquo;eBay ?<\/h2>\n<p>Donc, une fois que vous avez r\u00e9cup\u00e9r\u00e9 ces donn\u00e9es, il y a franchement une multitude de choses que vous pouvez en faire. Voici celles que j&rsquo;utilise moi-m\u00eame : <\/p>\n<ol>\n<li><strong>Suivi des prix.<\/strong>  Vous pouvez ainsi voir d&rsquo;un seul coup d&rsquo;\u0153il \u00e0 quel prix se vendent r\u00e9ellement les biens parmi des milliers d&rsquo;annonces actives et vendues, et ce sont justement les annonces \u00ab vendues \u00bb qui constituent la mine d&rsquo;or, car ce sont les prix que les acheteurs ont r\u00e9ellement pay\u00e9s, et non pas un chiffre fantaisiste que le vendeur avait fix\u00e9 en esp\u00e9rant le voir se r\u00e9aliser.<\/li>\n<li><strong>\u00c9tude de la concurrence.<\/strong>  Vous pouvez voir exactement quels articles se vendent, dans quel \u00e9tat ils sont propos\u00e9s, qui les met en vente et \u00e0 quel prix ; ainsi, au lieu d&rsquo;essayer de deviner quel prix fixer, vous le savez tout simplement.<\/li>\n<li><strong>Revente et arbitrage.<\/strong>  C&rsquo;est ce qui permet de payer les factures, car il existe actuellement des annonces \u00e0 des prix inf\u00e9rieurs \u00e0 la valeur du march\u00e9, et les donn\u00e9es vous permettent de les rep\u00e9rer et de les saisir avant m\u00eame que quelqu&rsquo;un d&rsquo;autre ne les remarque.<\/li>\n<li><strong>Recherche sur les produits.<\/strong>  Avant d&rsquo;investir de l&rsquo;argent r\u00e9el dans l&rsquo;approvisionnement d&rsquo;une cat\u00e9gorie, vous pouvez analyser les chiffres et d\u00e9terminer en quelques minutes s&rsquo;il existe une v\u00e9ritable demande ou si vous ne feriez que geler des liquidit\u00e9s dans des articles qui ne se vendront jamais.<\/li>\n<li><strong>Suivi des vendeurs.<\/strong>  Et lorsque vous souhaitez suivre un vendeur en particulier, la marche \u00e0 suivre est exactement la m\u00eame : il vous suffit d&rsquo;indiquer l&rsquo;URL de sa boutique \u00e0 la place d&rsquo;un crit\u00e8re de recherche, et tout son catalogue ainsi que ses prix s&rsquo;affichent imm\u00e9diatement sous vos yeux.<\/li>\n<\/ol>\n<p>Si votre activit\u00e9 touche de pr\u00e8s ou de loin \u00e0 la revente, au commerce \u00e9lectronique ou \u00e0 la tarification, ce type de donn\u00e9es vous fait gagner un temps fou et vous aide \u00e0 prendre des d\u00e9cisions plus \u00e9clair\u00e9es bien plus rapidement.<\/p>\n<h2>Pourquoi ne pas simplement utiliser l&rsquo;API officielle ?<\/h2>\n<p>Honn\u00eatement, ce n&rsquo;est pas une mauvaise option pour les t\u00e2ches simples. L&rsquo;API Browse g\u00e8re assez bien les requ\u00eates de volume mod\u00e9r\u00e9 sur les annonces actives. Mais elle implique <strong>un processus de validation<\/strong> que vous devez d&rsquo;abord suivre, des limites de d\u00e9bit qui s&rsquo;appliquent assez rapidement, et elle ne vous offre tout simplement pas toutes les fonctionnalit\u00e9s.  <\/p>\n<p>Les annonces vendues n&rsquo;y figurent pas, les avis n&rsquo;y figurent pas, les donn\u00e9es compl\u00e8tes sur les variantes n&rsquo;y figurent pas telles qu&rsquo;elles s&rsquo;affichent sur la page r\u00e9elle. Ainsi, lorsque vous avez besoin d&rsquo;une vue d&rsquo;ensemble compl\u00e8te, c&rsquo;est-\u00e0-dire du type de donn\u00e9es qu&rsquo;un utilisateur r\u00e9el voit lorsqu&rsquo;il charge la page, <strong>le scraping est tout simplement la solution la plus pratique<\/strong>. <\/p>\n<p>Si vous d\u00e9couvrez tout cet univers, Floppydata propose une bonne introduction sur <a href=\"https:\/\/floppydata.com\/blog\/what-is-a-web-unblocker\/\">le fonctionnement d&rsquo;un \u00ab web unlocker<\/a> \u00bb.<\/p>\n<h2>Pourquoi est-il difficile d&rsquo;extraire des donn\u00e9es sur eBay ?<\/h2>\n<p>Ce n&rsquo;est pas impossible, mais il y a clairement des \u00e9l\u00e9ments qui jouent en votre d\u00e9faveur. Deux obstacles en particulier auxquels la plupart des gens se heurtent. <\/p>\n<p>L&rsquo;un d&rsquo;entre eux concerne la d\u00e9tection anti-bot. eBay utilise des CAPTCHA et une limitation du d\u00e9bit ; une adresse IP jug\u00e9e peu fiable vous vaudra tr\u00e8s rapidement des erreurs 403. La plateforme a \u00e9galement renforc\u00e9 ses mesures d\u00e9but 2026 ; veillez donc \u00e0 adopter un comportement responsable : utilisez uniquement des donn\u00e9es publiques, maintenez un d\u00e9bit de requ\u00eates normal et \u00e9vitez toute action touchant aux commandes ou \u00e0 tout autre \u00e9l\u00e9ment de ce type. Vous avez besoin d\u2019adresses IP r\u00e9sidentielles et d\u2019un comportement qui ressemble r\u00e9ellement \u00e0 celui d\u2019un navigateur, sinon vous n\u2019obtiendrez pas de r\u00e9ponses valides.   <\/p>\n<p>Le deuxi\u00e8me point concerne le balisage, et celui-ci est un peu pi\u00e9geux. Alors que je r\u00e9digeais ce guide, je me suis rendu compte qu\u2019eBay \u00e9tait d\u00e9j\u00e0 pass\u00e9 de <code>li.s-item<\/code> \u00e0 <code>li.s-card<\/code>, ainsi que toutes les pages <code>.s-card__title<\/code>, <code>.s-card__price<\/code> et <code>.s-card__subtitle<\/code> qui s\u2019y trouvent. La plupart des guides en ligne renvoient encore \u00e0 l\u2019ancienne structure ; ils ne fonctionnent donc plus d\u00e9sormais. Vos s\u00e9lecteurs deviendront obsol\u00e8tes \u00e0 un moment ou \u00e0 un autre, c\u2019est ainsi que fonctionne eBay ; veillez donc \u00e0 int\u00e9grer d\u00e8s le d\u00e9part des v\u00e9rifications de s\u00e9curit\u00e9 pour les champs manquants.   <\/p>\n<p>Quoi qu&rsquo;il en soit, c&rsquo;est pour cette raison que je passe par le Web Unlocker de Floppydata plut\u00f4t que de me frotter directement \u00e0 eBay.<\/p>\n<h2>Conditions pr\u00e9alables<\/h2>\n<p>Trois choses :<\/p>\n<ul>\n<li>Python 3.10 ou version ult\u00e9rieure<\/li>\n<li>Un compte Floppydata associ\u00e9 \u00e0 une cl\u00e9 API Web Unlocker. Chaque nouveau compte donne droit \u00e0 cinq extractions gratuites, ce qui vous permet de suivre l&rsquo;int\u00e9gralit\u00e9 de ce guide sans d\u00e9bourser un centime. La cl\u00e9 se trouve dans le tableau de bord de Web Unlocker.  <\/li>\n<li>Deux biblioth\u00e8ques : <code>requests<\/code> et  <code>beautifulsoup4<\/code><\/li>\n<\/ul>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-45827\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3.png\" alt=\"Param\u00e8tres du compte et informations relatives \u00e0 la cl\u00e9 API\" width=\"1785\" height=\"839\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3.png 1785w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-300x141.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-1024x481.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-768x361.png 768w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-1536x722.png 1536w\" sizes=\"(max-width: 1785px) 100vw, 1785px\" \/><\/p>\n<p>Commencez par installer les deux biblioth\u00e8ques :<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>pip install requests beautifulsoup4\n<\/code><\/pre>\n<p>Ensuite, votre dossier de projet :<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>mkdir ebay-scraper\n<span style=\"color: #008000;\">cd<\/span> ebay-scraper\ntouch ebay_scraper.py\n<\/code><\/pre>\n<h2>Envoi de la premi\u00e8re requ\u00eate<\/h2>\n<p>La premi\u00e8re chose que j&rsquo;ai essay\u00e9e, c&rsquo;\u00e9tait simplement une requ\u00eate basique pour voir ce qui se passait :<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">requests<\/span>\n\nurl <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/sch\/i.html?_nkw=mechanical+keyboard\"<\/span>\nresponse <span style=\"color: #666;\">=<\/span> requests<span style=\"color: #666;\">.<\/span>get(url)\n\n<span style=\"color: #008000;\">print<\/span>(response<span style=\"color: #666;\">.<\/span>status_code)\n<span style=\"color: #008000;\">print<\/span>(response<span style=\"color: #666;\">.<\/span>text[:<span style=\"color: #666;\">500<\/span>])\n<\/code><\/pre>\n<p>Page bloqu\u00e9e. Pas d&rsquo;annonces, juste rien d&rsquo;utile. eBay d\u00e9tecte imm\u00e9diatement une simple requ\u00eate Python : pas d&#8217;empreinte num\u00e9rique, pas d&rsquo;adresse IP de confiance, \u00e7a ne marchera tout simplement pas. Alors plut\u00f4t que de perdre mon temps avec \u00e7a, j&rsquo;utilise simplement le Web Unlocker.   <\/p>\n<h2>Extraction de donn\u00e9es sur eBay avec Floppydata Web Unlocker<\/h2>\n<p>Il se charge de tous les aspects fastidieux : adresse IP r\u00e9sidentielle, empreinte du navigateur, rendu des pages, et vous renvoie du code HTML \u00e9pur\u00e9. De plus, vous n&rsquo;\u00eates factur\u00e9 que pour les extractions r\u00e9ussies ; vous ne perdez donc pas de cr\u00e9dits en cas d&rsquo;\u00e9chec. <\/p>\n<p>Je teste toujours dans l&rsquo;environnement de test du tableau de bord (<a href=\"https:\/\/app.floppydata.com\/tools\/scrape\">environnement de test \u00ab no-code \u00bb de Web Unlocker<\/a>) avant d&rsquo;\u00e9crire quoi que ce soit. Collez l&rsquo;URL de recherche, cliquez sur \u00ab Scrape \u00bb, puis examinez les r\u00e9sultats obtenus. Il est bien plus facile de cr\u00e9er un analyseur syntaxique lorsque vous savez d\u00e9j\u00e0 sur quoi vous travaillez.  <\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-45836\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3.png\" alt=\"Capture d'\u00e9cran de l'interface d'un outil de web scraping\" width=\"1400\" height=\"817\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3.png 1400w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-300x175.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-1024x598.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-768x448.png 768w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/p>\n<p>Nous disposons d\u00e9sormais du code HTML ; passons donc au codage.<\/p>\n<h3>\u00c9tape 1 : \u00c9tablir la demande<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">requests<\/span>\n<span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">json<\/span>\n<span style=\"color: #008000; font-weight: bold;\">from<\/span> <span style=\"color: #00f; font-weight: bold;\">bs4<\/span> <span style=\"color: #008000; font-weight: bold;\">import<\/span> BeautifulSoup\n\nAPI_URL <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/api.floppydata.net\/v1\/webUnlocker\"<\/span>\nAPI_KEY <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"YOUR_API_KEY\"<\/span>\n\nSEARCH_URL <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/sch\/i.html?_nkw=mechanical+keyboard&_pgn=1\"<\/span>\nOUTPUT_FILE <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"ebay_listings.json\"<\/span>\n<\/code><\/pre>\n<p>Remplacez <code>YOUR_API_KEY<\/code> par la cl\u00e9 figurant sur votre tableau de bord.<\/p>\n<p>Par ailleurs, l&rsquo;adresse <code>_pgn=1<\/code> correspond simplement au num\u00e9ro de page. Si vous souhaitez consulter la deuxi\u00e8me page, remplacez-la par <code>_pgn=2<\/code>. Pour la troisi\u00e8me page, c&rsquo;est <code>_pgn=3<\/code>. C&rsquo;est tr\u00e8s simple.   <\/p>\n<h3>\u00c9tape 2 : R\u00e9cup\u00e9rer la page \u00e0 l&rsquo;aide de Web Unlocker<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">fetch_html<\/span>(url):\n    response <span style=\"color: #666;\">=<\/span> requests<span style=\"color: #666;\">.<\/span>post(\n        API_URL,\n        headers<span style=\"color: #666;\">=<\/span>{\n            <span style=\"color: #ba2121;\">\"Content-Type\"<\/span>: <span style=\"color: #ba2121;\">\"application\/json\"<\/span>,\n            <span style=\"color: #ba2121;\">\"X-Api-Key\"<\/span>: API_KEY,\n        },\n        json<span style=\"color: #666;\">=<\/span>{\n            <span style=\"color: #ba2121;\">\"url\"<\/span>: url,\n            <span style=\"color: #ba2121;\">\"country\"<\/span>: <span style=\"color: #ba2121;\">\"US\"<\/span>,\n            <span style=\"color: #ba2121;\">\"city\"<\/span>: <span style=\"color: #ba2121;\">\"New York\"<\/span>,\n            <span style=\"color: #ba2121;\">\"difficulty\"<\/span>: <span style=\"color: #ba2121;\">\"medium\"<\/span>,\n            <span style=\"color: #ba2121;\">\"expiration\"<\/span>: <span style=\"color: #666;\">0<\/span>,\n        },\n        timeout<span style=\"color: #666;\">=120<\/span>,\n    )\n\n    response<span style=\"color: #666;\">.<\/span>raise_for_status()\n\n    data <span style=\"color: #666;\">=<\/span> response<span style=\"color: #666;\">.<\/span>json()\n    html <span style=\"color: #666;\">=<\/span> data<span style=\"color: #666;\">.<\/span>get(<span style=\"color: #ba2121;\">\"html\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> html:\n        <span style=\"color: #008000; font-weight: bold;\">raise<\/span> <span style=\"color: #cb3f38; font-weight: bold;\">ValueError<\/span>(<span style=\"color: #ba2121;\">\"Unlocker response did not include an 'html' field.\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">return<\/span> html\n<\/code><\/pre>\n<p>Le pays et la ville permettent de s&rsquo;assurer que la requ\u00eate transite par une adresse IP r\u00e9sidentielle am\u00e9ricaine, ce qui a une incidence \u00e0 la fois sur les tarifs et sur les annonces effectivement affich\u00e9es. Le param\u00e8tre \u00ab Difficulty \u00bb <code>medium<\/code> est particuli\u00e8rement adapt\u00e9 \u00e0 eBay, car ce site dispose d&rsquo;une protection anti-bot tr\u00e8s efficace. Si vous choisissez une valeur inf\u00e9rieure, vous serez tout simplement bloqu\u00e9. L\u2019expiration <code>0<\/code> force le rafra\u00eechissement de la page \u00e0 chaque fois, au lieu d\u2019utiliser une r\u00e9ponse mise en cache. Le code HTML g\u00e9n\u00e9r\u00e9 est renvoy\u00e9 dans le champ \u00ab <code>html<\/code> \u00bb du JSON, et c\u2019est ce que BeautifulSoup analyse \u00e0 l\u2019\u00e9tape suivante. Si vous souhaitez consulter tous les param\u00e8tres disponibles, vous les trouverez <a href=\"https:\/\/floppydata.com\/docs\/api-reference\/endpoint\/web-unlocker\">dans la documentation de l\u2019API Web Unlocker<\/a>.     <\/p>\n<h3>\u00c9tape 3 : Extraire les listes<\/h3>\n<p>Chaque r\u00e9sultat affich\u00e9 sur la page de recherche est un  <code>li.s-card<\/code>  container. Pour extraire proprement les annonces eBay, nous parcourons chaque fiche et r\u00e9cup\u00e9rons les champs souhait\u00e9s, en effectuant des v\u00e9rifications pr\u00e9ventives afin qu&rsquo;un champ manquant ne provoque jamais un plantage du programme : <\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">extract_listings<\/span>(html):\n    soup <span style=\"color: #666;\">=<\/span> BeautifulSoup(html, <span style=\"color: #ba2121;\">\"html.parser\"<\/span>)\n    cards <span style=\"color: #666;\">=<\/span> soup<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\"li.s-card\"<\/span>)\n    listings <span style=\"color: #666;\">=<\/span> []\n\n    <span style=\"color: #008000; font-weight: bold;\">for<\/span> card <span style=\"color: #a2f; font-weight: bold;\">in<\/span> cards:\n        title_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__title\"<\/span>)\n        title <span style=\"color: #666;\">=<\/span> title_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> title_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> title:\n            <span style=\"color: #3d7b7b; font-style: italic;\"># eBay appends this as accessibility text<\/span>\n            title <span style=\"color: #666;\">=<\/span> title<span style=\"color: #666;\">.<\/span>replace(<span style=\"color: #ba2121;\">\"Opens in a new window or tab\"<\/span>, <span style=\"color: #ba2121;\">\"\"<\/span>)<span style=\"color: #666;\">.<\/span>strip()\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Skip the placeholder card at the top of search results<\/span>\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> title <span style=\"color: #a2f; font-weight: bold;\">or<\/span> title <span style=\"color: #666;\">==<\/span> <span style=\"color: #ba2121;\">\"Shop on eBay\"<\/span>:\n            <span style=\"color: #008000; font-weight: bold;\">continue<\/span>\n\n        price_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__price\"<\/span>)\n        condition_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__subtitle\"<\/span>)\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Shipping info sits inside attribute rows<\/span>\n        shipping <span style=\"color: #666;\">=<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">for<\/span> row <span style=\"color: #a2f; font-weight: bold;\">in<\/span> card<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\".s-card__attribute-row\"<\/span>):\n            text <span style=\"color: #666;\">=<\/span> row<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>)\n\n            <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #008000;\">any<\/span>(word <span style=\"color: #a2f; font-weight: bold;\">in<\/span> text<span style=\"color: #666;\">.<\/span>lower() <span style=\"color: #008000; font-weight: bold;\">for<\/span> word <span style=\"color: #a2f; font-weight: bold;\">in<\/span> (<span style=\"color: #ba2121;\">\"ship\"<\/span>, <span style=\"color: #ba2121;\">\"free\"<\/span>, <span style=\"color: #ba2121;\">\"delivery\"<\/span>)):\n                shipping <span style=\"color: #666;\">=<\/span> text\n                <span style=\"color: #008000; font-weight: bold;\">break<\/span>\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Grab the first link that points to an item detail page<\/span>\n        url <span style=\"color: #666;\">=<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">for<\/span> a <span style=\"color: #a2f; font-weight: bold;\">in<\/span> card<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\"a.s-card__link\"<\/span>):\n            href <span style=\"color: #666;\">=<\/span> a<span style=\"color: #666;\">.<\/span>get(<span style=\"color: #ba2121;\">\"href\"<\/span>)\n\n            <span style=\"color: #008000; font-weight: bold;\">if<\/span> href <span style=\"color: #a2f; font-weight: bold;\">and<\/span> <span style=\"color: #ba2121;\">\"\/itm\/\"<\/span> <span style=\"color: #a2f; font-weight: bold;\">in<\/span> href:\n                url <span style=\"color: #666;\">=<\/span> href<span style=\"color: #666;\">.<\/span>split(<span style=\"color: #ba2121;\">\"?\"<\/span>)[<span style=\"color: #666;\">0<\/span>]\n                <span style=\"color: #008000; font-weight: bold;\">break<\/span>\n\n        listings<span style=\"color: #666;\">.<\/span>append({\n            <span style=\"color: #ba2121;\">\"title\"<\/span>: title,\n            <span style=\"color: #ba2121;\">\"price\"<\/span>: price_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> price_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>,\n            <span style=\"color: #ba2121;\">\"condition\"<\/span>: condition_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> condition_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>,\n            <span style=\"color: #ba2121;\">\"shipping\"<\/span>: shipping,\n            <span style=\"color: #ba2121;\">\"url\"<\/span>: url,\n        })\n\n    <span style=\"color: #008000; font-weight: bold;\">return<\/span> listings\n<\/code><\/pre>\n<p>Deux points \u00e0 conna\u00eetre.<\/p>\n<ul>\n<li>eBay affiche toujours une <strong>carte d&rsquo;espace r\u00e9serv\u00e9 \u00ab Shop on eBay<\/strong> \u00bb en haut des r\u00e9sultats de recherche. Si vous ne la passez pas, le premier \u00e9l\u00e9ment de la liste des annonces n&rsquo;est qu&rsquo;un \u00e9l\u00e9ment inutile. <\/li>\n<li>Le titre r\u00e9cup\u00e8re \u00e9galement la mention \u00ab S&rsquo;ouvre dans une nouvelle fen\u00eatre ou un nouvel onglet \u00bb comme <strong>texte d&rsquo;accessibilit\u00e9<\/strong> \u00e0 partir de la balise d&rsquo;ancrage, de sorte que la ligne de remplacement la nettoie avant que quoi que ce soit ne soit ajout\u00e9.<\/li>\n<\/ul>\n<h3>\u00c9tape 4 : Enregistrez les r\u00e9sultats<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">main<\/span>():\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Fetching data from: <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span>SEARCH_URL<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\">\"<\/span>)\n\n    html <span style=\"color: #666;\">=<\/span> fetch_html(SEARCH_URL)\n    listings <span style=\"color: #666;\">=<\/span> extract_listings(html)\n\n    <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> listings:\n        <span style=\"color: #008000; font-weight: bold;\">raise<\/span> <span style=\"color: #cb3f38; font-weight: bold;\">SystemExit<\/span>(<span style=\"color: #ba2121;\">\"No listings found. eBay may have changed its markup.\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(OUTPUT_FILE, <span style=\"color: #ba2121;\">\"w\"<\/span>, encoding<span style=\"color: #666;\">=<\/span><span style=\"color: #ba2121;\">\"utf-8\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> file:\n        json<span style=\"color: #666;\">.<\/span>dump(listings, file, indent<span style=\"color: #666;\">=2<\/span>)\n\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Found <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span><span style=\"color: #008000;\">len<\/span>(listings)<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\"> listings\"<\/span>)\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Saved results to <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span>OUTPUT_FILE<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\">\"<\/span>)\n\n\n<span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #19177c;\">__name__<\/span> <span style=\"color: #666;\">==<\/span> <span style=\"color: #ba2121;\">\"__main__\"<\/span>:\n    main()\n<\/code><\/pre>\n<p>Ex\u00e9cutez le script :<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>python ebay_scraper.py\n<\/code><\/pre>\n<p>Vous devriez alors voir quelque chose comme :<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>[\n  {\n    <span style=\"color: #008000; font-weight: bold;\">\"title\"<\/span>: <span style=\"color: #ba2121;\">\"MSI Forge GK600 TKL Wireless Mechanical Keyboard RGB Bluetooth 2.4GHz\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"price\"<\/span>: <span style=\"color: #ba2121;\">\"$49.99\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"condition\"<\/span>: <span style=\"color: #ba2121;\">\"Brand New\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"shipping\"<\/span>: <span style=\"color: #ba2121;\">\"Free shipping\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"url\"<\/span>: <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/itm\/227344950627\"<\/span>\n  }\n]\n<\/code><\/pre>\n<p><img decoding=\"async\" class=\"alignnone wp-image-45845 size-full\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5.png\" alt=\"Liste des claviers d'ordinateur disponibles \u00e0 la vente\" width=\"1119\" height=\"697\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5.png 1119w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-300x187.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-1024x638.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-768x478.png 768w\" sizes=\"(max-width: 1119px) 100vw, 1119px\" \/><\/p>\n<p>Voici comment fonctionne le scraper de base.<\/p>\n<p>\u00c0 partir de l\u00e0, pour modifier le mot-cl\u00e9, il suffit de changer \u00ab <code>_nkw=mechanical+keyboard<\/code> \u00bb dans l&rsquo;URL. Si vous souhaitez acc\u00e9der \u00e0 une autre page, vous pouvez passer de <code>_pgn=1<\/code> \u00e0 <code>_pgn=2<\/code>, <code>_pgn=3<\/code>, et ainsi de suite. <\/p>\n<h2>D\u00e9pannage<\/h2>\n<p>C&rsquo;est donc \u00e9vident : si vous parcourez eBay assez longtemps, vous tomberez probablement sur l&rsquo;une de ces annonces :<\/p>\n<ul>\n<li><strong>Erreurs 403 :<\/strong> eBay a signal\u00e9 votre adresse IP. La solution consiste \u00e0 passer par le Web Unlocker en utilisant des adresses IP r\u00e9sidentielles. <\/li>\n<li><strong>R\u00e9ponses vides :<\/strong> il s&rsquo;agit g\u00e9n\u00e9ralement d&rsquo;un probl\u00e8me d&rsquo;affichage. V\u00e9rifiez bien que vous lisez bien le champ \u00ab <code>html<\/code> \u00bb dans la r\u00e9ponse de Web Unlocker, et non le corps JSON brut. <\/li>\n<li><strong>Champs manquants :<\/strong> toutes les annonces ne comportent pas n\u00e9cessairement d&rsquo;informations sur l&rsquo;\u00e9tat ou les frais de port. Les contr\u00f4les de s\u00e9curit\u00e9 mis en place sur <code>extract_listings<\/code> g\u00e8rent d\u00e9j\u00e0 ce cas de figure. <\/li>\n<li><strong>Aucun r\u00e9sultat :<\/strong> eBay a de nouveau modifi\u00e9 les noms de ses classes CSS. Retournez sur l&rsquo;espace de test, examinez le nouveau code et mettez \u00e0 jour vos s\u00e9lecteurs. <\/li>\n<\/ul>\n<h2>Votre prochaine \u00e9tape<\/h2>\n<p>\u00c9coutez, eBay n&rsquo;est pas le site le plus compliqu\u00e9 \u00e0 g\u00e9rer, mais entre les CAPTCHA, la limitation du nombre de requ\u00eates 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\u00e9diaire qui g\u00e8re tout cela, vous pouvez vous concentrer directement sur l&rsquo;exploitation des donn\u00e9es. <\/p>\n<p>C&rsquo;est justement l\u00e0 que r\u00e9side la force <a href=\"https:\/\/floppydata.com\/web-unlocker\/\">du Web Unlocker de Floppydata<\/a>. Rotation de proxys r\u00e9sidentiels, empreintes de navigateur r\u00e9elles, rendu de page complet, et vous ne payez que pour les r\u00e9ponses r\u00e9ussies ; les tentatives de scraping infructueuses ne vous co\u00fbtent donc rien. Ajoutez-y quelques lignes de BeautifulSoup et, honn\u00eatement, tout cela devient assez simple.  <\/p>\n<p>Cinq \u00ab scrapes \u00bb gratuits sont offerts avec chaque nouveau compte, ce qui vous permet de suivre ce guide dans son int\u00e9gralit\u00e9 sans rien d\u00e9bourser.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>eBay dispose d&rsquo;une v\u00e9ritable mine d&rsquo;or de donn\u00e9es publiques sur les prix. Des millions d\u2019annonces en ligne concernant des objets de collection, des appareils \u00e9lectroniques, des pi\u00e8ces de rechange qui ne sont plus commercialis\u00e9es, etc. \u2014 toutes utiles pour le suivi des prix, les \u00e9tudes de march\u00e9 ou l\u2019analyse de la concurrence. Le probl\u00e8me, c\u2019est [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":45804,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[439,487,561],"tags":[],"class_list":["post-45887","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-how-to","category-scraping"],"acf":[],"_links":{"self":[{"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/posts\/45887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/comments?post=45887"}],"version-history":[{"count":0,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/posts\/45887\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/media\/45804"}],"wp:attachment":[{"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/media?parent=45887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/categories?post=45887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/floppydata.com\/fr\/wp-json\/wp\/v2\/tags?post=45887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}