Extraire Etsy avec Python : recherches, produits, boutiques et avis

Dernière mise à jour le April 28, 2026

Etsy compte plus de 100 millions d’annonces actives, 5,6 millions de vendeurs et environ 450 millions de visites mensuelles. Autant dire qu’il y a là une énorme quantité de données publiques sur les prix, les tendances, les avis et les concurrents — et si vous avez déjà essayé de les collecter à la main, vous savez à quel point c’est pénible.

J’ai passé un week-end à essayer de cataloguer manuellement les produits d’un concurrent pour une étude de marché. Au 30e produit, je remettais en question toutes les décisions qui m’avaient mené à ce tableau Excel. Le fait est qu’Etsy contient des données extrêmement utiles pour l’analyse des prix, le développement produit, l’identification de niches et le benchmarking des vendeurs — mais seulement si vous pouvez réellement les récupérer à grande échelle. C’est précisément l’objet de ce guide : un tutoriel unique qui explique comment extraire Etsy avec Python sur les quatre grands types de pages (résultats de recherche, pages produit, pages boutique et avis), avec en plus des conseils honnêtes sur les défenses anti-bot d’Etsy et une alternative sans code pour celles et ceux qui préfèrent éviter totalement le scripting.

Que signifie extraire Etsy avec Python ?

Le web scraping, en termes simples, consiste à écrire du code qui visite des pages web et en extrait automatiquement les données qui vous intéressent — noms de produits, prix, descriptions, images, notes, avis, informations sur la boutique — puis à les organiser dans un format structuré comme un tableur ou une base de données.

Python est le langage de référence pour ce type de travail. Il est facile à prendre en main, bénéficie d’une immense communauté et propose un écosystème de bibliothèques particulièrement riche pour le scraping : Requests (pour récupérer les pages), BeautifulSoup (pour analyser le HTML), Selenium et Playwright (pour l’automatisation de navigateur), et pandas (pour organiser et exporter les données). Python figure régulièrement parmi les 3 langages les plus populaires dans l’enquête annuelle de Stack Overflow auprès des développeurs, et ses bibliothèques de scraping comptent parmi les plus téléchargées sur PyPI.

Quand vous extraisez Etsy, vous récupérez les données contenues dans le HTML (et parfois dans du JSON caché) qu’Etsy sert à votre navigateur. Parmi les données que vous pouvez extraire :

  • Noms des produits, prix, descriptions, images et variantes
  • Informations sur le vendeur/la boutique (nom, nombre de ventes, localisation, note)
  • Notes et texte intégral des avis
  • Listes des résultats de recherche, catégories et signaux de tendance

Pourquoi extraire Etsy ? Cas d’usage concrets qui créent du ROI

Le scraping d’Etsy n’est pas seulement un exercice technique — c’est un avantage concurrentiel. Que vous soyez vendeur, chef de produit ou analyste de données, disposer de données Etsy structurées à portée de main peut avoir un impact direct sur vos résultats.

etsy_stats_4f1f4d51c3.png

Cas d’usageCe que vous extrayezQui en profiteImpact business
Analyse de prix concurrentielsRésultats de recherche + prix des produitsOps e-commerce, vendeursLa tarification dynamique peut augmenter le chiffre d’affaires de 5 à 22 % en moyenne
Découverte de niches et de tendancesRésultats de recherche, annonces en tendanceFondateurs, analystesRepérer tôt les niches porteuses (par ex. « preppy pajamas » a vu sa recherche grimper de +1 112 %)
Développement et amélioration produitAvis, détails produitÉquipes produitUne marque d’ustensiles de cuisine a récupéré la 1re place de Best Seller en 60 jours grâce aux données de sentiment des avis
SEO et recherche de mots-clésRésultats de recherche, titres/tags produitÉquipes marketingIdentifier des mots-clés à forte demande et faible concurrence
Benchmarking des vendeursPages boutique, nombre de ventesÉquipes commerciales, analystesConstruire des listes de prospects qualifiés pour 0,01 à 0,10 $/enregistrement au lieu d’acheter des listes
Suivi des stocks et de la disponibilitéDisponibilité des produitsOps e-commerceRéagir plus vite aux changements de stock des concurrents

Chacun de ces cas d’usage nécessite des données provenant de différents types de pages Etsy — c’est exactement pourquoi ce tutoriel couvre les quatre.

Gain de temps : manuel vs automatisé

  • Recherche Etsy manuelle : 30 à 45 minutes par produit (50 à 75 heures pour 100 produits)
  • Scraping automatisé : 100 annonces en 2 à 5 minutes
  • Le scraping alimenté par l’IA est avec une précision pouvant atteindre 99,5 %

API Etsy vs web scraping : que choisir ?

Avant d’écrire la moindre ligne de code, une question mérite d’être posée : faut-il utiliser l’API officielle d’Etsy ou extraire directement le site ? C’est une question que je vois revenir sans cesse sur les forums, et la réponse dépend des données dont vous avez besoin.

Ce que l’API Etsy peut faire — et ne peut pas faire

Etsy propose une API v3 avec authentification OAuth 2.0. Elle permet d’accéder aux données de votre propre boutique — annonces, commandes, reçus. Mais elle présente de vraies limites :

  • Données des concurrents : l’API est surtout limitée à votre propre boutique. Vous ne pouvez pas récupérer les prix, ventes ou annonces d’un autre vendeur.
  • Avis : il n’existe pas de point d’accès robuste pour récupérer en masse le texte complet des avis.
  • Limites de débit : 10 requêtes/seconde, 10 000 requêtes/jour par défaut. Le plafond d’offset est de 12 000 enregistrements.
  • Usage IA/ML : rejeté explicitement lors de l’examen de l’application.
  • Documentation : les plaintes de la communauté sont nombreuses — exemples médiocres, endpoints obsolètes, support lent.

Quand le web scraping est la meilleure option

Si vous avez besoin d’intelligence concurrentielle, d’analyse du sentiment des avis, d’analyse croisée entre boutiques ou de données au-delà de ce que l’API expose, le scraping est la bonne voie. En contrepartie, vous devrez faire face aux défenses anti-bot d’Etsy (nous y reviendrons) et consacrer du temps à la configuration.

Tableau comparatif : API vs scraping vs sans code

CritèreAPI officielle EtsyScraping web en PythonThunderbit (sans code)
Accès aux prix des produits✅ (champs limités)✅ HTML/JSON-LD complet✅ L’IA extrait tout champ visible
Données d’avis❌ Indisponibles en masse✅ Via endpoint/HTML des avis✅ Scraping des sous-pages
Données des boutiques concurrentes❌ Votre boutique uniquement✅ Toute boutique publique✅ Toute boutique publique
Authentification requise✅ OAuth 2.0⚠️ Cookies pour les données connectées⚠️ Scraping via navigateur pour la connexion
Risque anti-botAucunÉLEVÉ (DataDome)Pris en charge (natif navigateur)
Temps de configurationMoyen (clés API, OAuth)Élevé (code + proxies)~2 minutes

Si vous avez besoin de données concurrentielles, d’avis ou d’analyses entre plusieurs boutiques, l’API ne suffit tout simplement pas. C’est le constat honnête.

Choisissez votre approche Python avant d’écrire une ligne de code

Une question que je vois tout le temps sur Reddit et Stack Overflow : « Dois-je utiliser Requests + BeautifulSoup, Selenium, une API de proxy, ou autre chose ? » La bonne réponse dépend de votre niveau, de votre budget et de votre cas d’usage.

ApprocheIdéale pourCourbe d’apprentissageGère le JS ?Gestion anti-botCoût
Requests + BeautifulSoupDéveloppeurs voulant garder le contrôleMoyenneManuelle (headers, proxies)Gratuit + coût des proxies
Selenium / PlaywrightPages riches en JS, flux de connexionÉlevéePartielle (empreinte navigateur)Gratuit + coût des proxies
Services d’API de proxyPassage à l’échelle + contournement anti-botMoyenne✅ (via API)✅ Intégré49 $+/mois
Thunderbit (sans code)Non-développeurs, extraction rapideTrès faible✅ (natif navigateur)✅ (session navigateur)Offre gratuite disponible

Si vous voulez un contrôle total et que Python vous convient, optez pour Requests + BeautifulSoup. Si vous avez besoin du rendu JS ou de flux de connexion, utilisez Selenium. Si vous voulez contourner l’anti-bot à grande échelle, envisagez un service de proxy. Et si vous voulez des données Etsy sans écrire ni maintenir de code, Thunderbit mérite un coup d’œil — j’y reviens plus loin.

Comment Etsy se défend : comprendre la protection anti-bot DataDome

La plupart des guides de scraping vous disent simplement « utilisez un proxy » et passent à autre chose. Ce n’est pas suffisant pour Etsy. Etsy utilise DataDome, l’un des systèmes anti-bot les plus agressifs du web. présente Etsy comme un succès, en notant que les scrapers représentaient autrefois environ 1 % des coûts informatiques d’Etsy.

etsy_antibot_5431142c9c.png

Qu’est-ce que DataDome et comment ça fonctionne ?

DataDome ne se contente pas de vérifier votre adresse IP. Il déploie une détection multicouche :

  • Empreinte TLS (JA3) : la bibliothèque requests de Python a une signature TLS distinctive que DataDome peut repérer instantanément.
  • Inspection des en-têtes/protocoles HTTP : vérifie la présence d’en-têtes navigateur complets et cohérents — des en-têtes absents ou mal ordonnés sont un signal d’alerte.
  • Empreinte JavaScript (protocole Picasso) : exécute des défis JS dans le navigateur pour vérifier que vous êtes bien un utilisateur réel.
  • ML comportemental : analyse plus de 35 signaux par requête, avec plus de 85 000 modèles par site.
  • Évaluation de la réputation IP : les IP de datacenter sont immédiatement signalées.
  • Vérification des cookies : le cookie datadome doit être présent et valide.

Signes que vous êtes bloqué (et comment vérifier)

L’un des pièges les plus courants : vous recevez une réponse 200 OK, mais le HTML correspond en réalité à une page CAPTCHA, et non aux données attendues. Autres signes :

  • Erreurs 403 Forbidden
  • Boucles de redirection
  • Le corps de la réponse contient un objet JavaScript dd ou un HTML CAPTCHA à curseur

Vérifiez toujours le corps de la réponse, pas seulement le code de statut. Test rapide :

1if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
2    print("Bloqué ! Une page CAPTCHA a été renvoyée à la place des données.")

En-têtes et cookies qui réduisent la détection

Vous ne pouvez pas garantir que vous ne serez jamais bloqué, mais des en-têtes réalistes et une bonne gestion des cookies aident beaucoup :

1session = requests.Session()
2session.headers.update({
3    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36",
4    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
5    "Accept-Language": "fr-FR,fr;q=0.9",
6    "Accept-Encoding": "gzip, deflate, br",
7    "Sec-Ch-Ua": '\"Chromium\";v=\"133\", \"Not-A.Brand\";v=\"99\", \"Google Chrome\";v=\"133\"',
8    "Sec-Ch-Ua-Mobile": "?0",
9    "Sec-Ch-Ua-Platform": '\"Windows\"',
10    "Sec-Fetch-Dest": "document",
11    "Sec-Fetch-Mode": "navigate",
12    "Sec-Fetch-Site": "none",
13    "Upgrade-Insecure-Requests": "1",
14})

Autres points importants :

  • Conservez les cookies entre les requêtes avec requests.Session().
  • Ajoutez des délais aléatoires (2 à 7 secondes) entre les requêtes.
  • Simulez une chaîne de référents : visitez d’abord la page d’accueil, puis la recherche, puis les pages produit.
  • À grande échelle, la rotation de proxies résidentiels est indispensable. Les IP de datacenter sont signalées presque immédiatement.

Ces techniques réduisent la détection mais ne l’éliminent pas. Pour du scraping à fort volume, vous aurez probablement besoin d’un service de proxy ou d’une approche basée sur navigateur.

Préparer votre environnement Python pour extraire Etsy

Avant de commencer :

  • Niveau de difficulté : intermédiaire
  • Temps nécessaire : environ 30 à 60 minutes (configuration + première extraction)
  • Ce qu’il vous faut : Python 3.8+, pip, un éditeur de code, le navigateur Chrome (pour inspecter via DevTools)

Installer les dépendances

Créez un dossier de projet, configurez un environnement virtuel et installez les bibliothèques nécessaires :

1mkdir etsy-scraper && cd etsy-scraper
2python -m venv venv
3source venv/bin/activate  # Sous Windows : venv\Scripts\activate
4pip install requests beautifulsoup4 lxml pandas
  • requests — récupère les pages web
  • beautifulsoup4 — analyse le HTML
  • lxml — analyseur HTML plus rapide (facultatif mais recommandé)
  • pandas — structure et exporte les données vers CSV/Excel

Si vous avez besoin d’automatisation de navigateur plus tard (pour la connexion ou les pages riches en JS), installez aussi :

1pip install selenium

Comprendre la structure des pages Etsy avant de coder

Voici une astuce qui fait gagner énormément de temps : Etsy intègre des données produit structurées dans des balises <script type="application/ld+json"> sur la plupart des pages. Ces données JSON-LD sont déjà organisées — nom du produit, prix, note, images — donc vous n’avez pas besoin de vous battre avec des sélecteurs CSS fragiles pour chaque champ.

Ouvrez n’importe quelle page produit Etsy, faites un clic droit, « Afficher le code source de la page », puis recherchez application/ld+json. Vous trouverez un bloc avec @type: Product contenant la plupart des données utiles. Les pages de résultats de recherche utilisent @type: ItemList.

Les sélecteurs CSS restent utiles comme solution de secours (pour les données absentes du JSON-LD, comme les détails d’expédition ou le texte des avis), mais le JSON-LD doit être votre premier réflexe.

Étape 1 : extraire les résultats de recherche Etsy avec Python

Les résultats de recherche sont le point de départ de la plupart des projets de scraping Etsy — que vous surveilliez une niche, suiviez les prix des concurrents ou construisiez une base de données produits.

Construire l’URL de recherche

Les URL de recherche Etsy suivent ce modèle :

1https://www.etsy.com/search?q={mot-clé}&ref=pagination&page={numéro_de_page}

Pour les requêtes multi-mots, encodez les espaces dans l’URL (par ex. handmade+jewelry ou handmade%20jewelry). Le paramètre ref=pagination rend la requête plus proche d’une navigation réelle dans un navigateur.

Autres paramètres utiles : order (most_relevant, price_asc, price_desc, date_desc), min_price, max_price, ship_to, free_shipping=true. Chaque page renvoie 48 éléments.

Envoyer la requête et analyser le HTML

1import requests
2from bs4 import BeautifulSoup
3import json
4import time
5import random
6headers = {
7    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
8    "Accept-Language": "fr-FR,fr;q=0.9",
9    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
10}
11def scrape_etsy_search(query, max_pages=3):
12    all_products = []
13    for page in range(1, max_pages + 1):
14        url = f"https://www.etsy.com/search?q={query}&ref=pagination&page={page}"
15        resp = requests.get(url, headers=headers, timeout=30)
16        if "captcha" in resp.text.lower():
17            print(f"Blocage à la page {page}. Essayez d’ajouter des délais ou des proxies.")
18            break
19        soup = BeautifulSoup(resp.text, "lxml")
20        for script in soup.find_all("script", type="application/ld+json"):
21            data = json.loads(script.string)
22            if data.get("@type") == "ItemList":
23                for item in data.get("itemListElement", []):
24                    all_products.append({
25                        "name": item.get("name"),
26                        "url": item.get("url"),
27                        "image": item.get("image"),
28                        "price": item.get("offers", {}).get("price"),
29                        "currency": item.get("offers", {}).get("priceCurrency"),
30                        "position": item.get("position"),
31                    })
32        time.sleep(random.uniform(2, 5))
33    return all_products

Extraire les données des annonces depuis le JSON-LD

Le tableau itemListElement vous donne le nom, l’URL, l’image, le prix et la devise de chaque annonce. Si vous avez aussi besoin des notes en étoiles ou du nombre de résultats (pas toujours présents dans le JSON-LD), utilisez des sélecteurs CSS en secours :

  • Carte d’annonce : .v2-listing-card
  • Titre : h3.v2-listing-card__title
  • Prix : span.currency-value
  • Lien : a.listing-link (href)

Gérer la pagination

Bouclez sur les pages et ajoutez un délai aléatoire entre chaque requête. Etsy renvoie généralement jusqu’à 20 à 250 pages selon la requête.

1results = scrape_etsy_search("handmade+jewelry", max_pages=5)
2print(f"{len(results)} produits extraits.")

Pour une extraction sur 5 pages, cela m’a pris environ 20 secondes lors de mes tests — contre plus de 30 minutes de copier-coller manuel.

Étape 2 : extraire les pages produit Etsy avec Python

Une fois que vous avez une liste d’URL de produits issues de la recherche, l’étape suivante consiste à récupérer les détails de chaque fiche produit.

Récupérer la page produit

1def scrape_etsy_product(url):
2    resp = requests.get(url, headers=headers, timeout=30)
3    soup = BeautifulSoup(resp.text, "lxml")
4    for script in soup.find_all("script", type="application/ld+json"):
5        data = json.loads(script.string)
6        if data.get("@type") == "Product":
7            offers = data.get("offers", {})
8            price = offers.get("price") or offers.get("lowPrice")
9            rating_data = data.get("aggregateRating", {})
10            return {
11                "name": data.get("name"),
12                "description": data.get("description", "")[:500],
13                "brand": data.get("brand", {}).get("name") if isinstance(data.get("brand"), dict) else data.get("brand"),
14                "category": data.get("category"),
15                "price": price,
16                "currency": offers.get("priceCurrency"),
17                "availability": offers.get("availability"),
18                "rating": rating_data.get("ratingValue"),
19                "review_count": rating_data.get("reviewCount"),
20                "images": data.get("image", []),
21                "sku": data.get("sku"),
22                "material": data.get("material"),
23            }
24    return None

Gérer les variations de prix

Certains produits ont un seul offers.price. D’autres (avec variantes comme la taille ou la couleur) utilisent offers.lowPrice et offers.highPrice. Le code ci-dessus gère les deux en basculant de price vers lowPrice.

Extraire des champs supplémentaires via des sélecteurs CSS

Pour les données absentes du JSON-LD — informations de livraison, options de variantes, détails complets du vendeur — vous devrez utiliser des sélecteurs CSS :

  • Titre : h1[data-buy-box-listing-title]
  • Variantes : select[data-selector-id] ou div[data-option-set]
  • Livraison : div.wt-text-caption à proximité de la section livraison

Le compromis : le JSON-LD est plus propre et plus stable face aux changements de mise en page. Les sélecteurs CSS sont plus fragiles mais couvrent davantage de champs.

Étape 3 : extraire les pages boutique Etsy avec Python

C’est la section que la plupart des guides concurrents passent complètement sous silence — alors qu’elle est sans doute la plus précieuse pour les équipes commerciales et les analystes concurrentiels.

Construire l’URL de la boutique et récupérer la page

1def scrape_etsy_shop(shop_name):
2    url = f"https://www.etsy.com/shop/{shop_name}"
3    resp = requests.get(url, headers=headers, timeout=30)
4    soup = BeautifulSoup(resp.text, "lxml")
5    # Métadonnées de boutique depuis le HTML (pas dans le JSON-LD)
6    sales_el = soup.select_one("div.shop-sales-reviews a")
7    rating_el = soup.find("input", {"name": "initial-rating"})
8    location_el = soup.select_one("div.shop-location")
9    shop_data = {
10        "name": shop_name,
11        "sales": sales_el.text.strip() if sales_el else None,
12        "rating": rating_el["value"] if rating_el else None,
13        "location": location_el.text.strip() if location_el else None,
14    }
15    # Annonces depuis le JSON-LD
16    listings = []
17    for script in soup.find_all("script", type="application/ld+json"):
18        data = json.loads(script.string)
19        if data.get("@type") == "ItemList":
20            for item in data.get("itemListElement", []):
21                listings.append({
22                    "name": item.get("name"),
23                    "url": item.get("url"),
24                    "price": item.get("offers", {}).get("price"),
25                })
26    shop_data["listings"] = listings
27    return shop_data

Ce que vous pouvez extraire des pages boutique

Le JSON-LD des pages boutique est de type @type: ItemList — il couvre les annonces produit, mais pas les métadonnées au niveau de la boutique comme le nombre de ventes, la localisation ou la note. Pour ces éléments, vous devez utiliser des sélecteurs CSS :

Point de donnéeSélecteurRemarques
Nom de la boutiqueh1 ou titre metaGénéralement présent dans le titre de la page
Ventes totalesdiv.shop-sales-reviews aTexte du type « 12 345 ventes »
Note en étoilesvaleur de input[name="initial-rating"]De 1 à 5
Localisationdiv.shop-locationVille, pays
Membre depuisdiv.shop-infoTexte de date

Les données de boutique sont particulièrement utiles pour construire des listes de prospects, comparer les concurrents ou identifier les meilleurs vendeurs d’une niche.

Étape 4 : extraire les avis Etsy avec Python

Les avis font partie des données les plus précieuses — et les plus délicates — sur Etsy. Le texte complet, les notes et les dates des avis ne figurent pas dans le HTML initial de la page ; ils sont chargés via un endpoint API interne.

Méthode 1 : découvrir l’endpoint API interne des avis d’Etsy

Ouvrez une page produit dans Chrome, lancez les DevTools (F12), allez dans l’onglet Network, puis faites défiler jusqu’à la section des avis. Vous verrez une requête POST vers quelque chose comme :

1https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews

Cet endpoint renvoie des fragments HTML contenant les cartes d’avis. Pour l’utiliser, vous avez besoin de :

  • listing_id — l’identifiant numérique de la fiche produit dans l’URL
  • shop_id — à extraire du HTML de la page produit via une expression régulière
  • csrf_nonce — à extraire d’une balise <meta> de la page

Extraire les identifiants et le jeton CSRF

1import re
2def get_review_params(product_url):
3    resp = requests.get(product_url, headers=headers)
4    html = resp.text
5    listing_id = product_url.split("/")[-1].split("?")[0]
6    shop_id_match = re.search(r'"shopId"\s*:\s*(\d+)', html)
7    shop_id = shop_id_match.group(1) if shop_id_match else None
8    soup = BeautifulSoup(html, "lxml")
9    csrf_meta = soup.find("meta", {"name": "csrf_nonce"})
10    csrf = csrf_meta["content"] if csrf_meta else None
11    return listing_id, shop_id, csrf

Extraire les avis avec pagination

1def scrape_reviews(listing_id, shop_id, csrf, max_pages=5):
2    session = requests.Session()
3    session.headers.update(headers)
4    all_reviews = []
5    for page in range(1, max_pages + 1):
6        payload = {
7            "specs": {
8                "deep_dive_reviews": {
9                    "module_path": "neu/specs/deep_dive_reviews",
10                    "listing_id": listing_id,
11                    "shop_id": shop_id,
12                    "page": page,
13                }
14            }
15        }
16        resp = session.post(
17            "https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews",
18            json=payload,
19            headers={"x-csrf-token": csrf, "Content-Type": "application/json"},
20        )
21        data = resp.json()
22        html_fragment = data.get("output", {}).get("deep_dive_reviews", "")
23        review_soup = BeautifulSoup(html_fragment, "lxml")
24        for card in review_soup.select("div.review-card"):
25            rating_el = card.find("input", {"name": "rating"})
26            text_el = card.select_one("div.wt-text-body")
27            user_el = card.select_one("a[data-review-username]")
28            date_el = card.select_one("p.wt-text-body-small")
29            all_reviews.append({
30                "rating": rating_el["value"] if rating_el else None,
31                "text": text_el.text.strip() if text_el else None,
32                "reviewer": user_el.text.strip() if user_el else None,
33                "date": date_el.text.strip() if date_el else None,
34            })
35        time.sleep(random.uniform(2, 5))
36    return all_reviews

Méthode 2 : analyser les avis depuis le HTML (solution de secours)

Si l’approche API échoue (par exemple à cause de problèmes de jeton CSRF), vous pouvez analyser la première page d’avis directement depuis le HTML de la page produit. Limite : seul le premier lot d’avis se trouve dans le HTML statique. Pour aller plus loin, il faut l’API ou un outil d’automatisation du navigateur comme Selenium.

Gérer les données nécessitant une connexion : extraire votre propre boutique Etsy

C’est un angle qu’aucun autre tutoriel ne couvre, mais qui répond à un besoin bien réel — notamment pour les vendeurs Etsy qui veulent extraire leurs propres commandes, revenus et statistiques.

Le problème : requests seul ne peut pas accéder à votre tableau de bord Etsy, car il ne transporte pas vos cookies de session de connexion.

Option 1 : Selenium avec connexion manuelle et capture des cookies

Utilisez Selenium pour ouvrir un navigateur, vous connecter manuellement (ou automatiser la connexion), puis poursuivre le scraping une fois authentifié :

1from selenium import webdriver
2driver = webdriver.Chrome()
3driver.get("https://www.etsy.com/signin")
4# Connectez-vous manuellement dans la fenêtre du navigateur, puis :
5input("Appuyez sur Entrée après la connexion...")
6cookies = driver.get_cookies()
7# Utilisez maintenant driver.get() pour naviguer dans votre tableau de bord et extraire les données

Vous pouvez aussi enregistrer les cookies de la session Selenium et les réutiliser avec requests.Session() pour un scraping plus rapide et plus léger après la connexion initiale.

Option 2 : exporter les cookies du navigateur pour les utiliser avec Requests

Utilisez une extension de navigateur (comme « EditThisCookie ») pour exporter les cookies de votre session Etsy active, puis chargez-les dans une session Requests :

1import requests
2session = requests.Session()
3# Ajoutez les cookies exportés depuis votre navigateur
4session.cookies.set("uaid", "YOUR_UAID_VALUE", domain=".etsy.com")
5session.cookies.set("user_prefs", "YOUR_USER_PREFS_VALUE", domain=".etsy.com")
6# ... ajoutez les autres cookies de session selon le besoin
7resp = session.get("https://www.etsy.com/your/orders", headers=headers)

La voie simple : le mode de scraping navigateur de Thunderbit

Comme s’exécute dans votre navigateur Chrome, il hérite automatiquement de votre session Etsy active. Pas de code d’authentification, pas d’export de cookies — il suffit d’ouvrir votre tableau de bord Etsy et d’extraire les données. C’est réellement utile pour récupérer commandes, revenus, statistiques et autres données réservées aux vendeurs, sans écrire une seule ligne de script.

Exporter et exploiter vos données Etsy extraites

Enregistrer en CSV ou JSON

1import pandas as pd
2df = pd.DataFrame(results)
3df.to_csv("etsy_products.csv", index=False, encoding="utf-8")
4df.to_json("etsy_products.json", orient="records", indent=2)

Bonnes pratiques : ajoutez des horodatages dans vos noms de fichiers, utilisez l’encodage UTF-8 et gérez les caractères spéciaux dans les noms de produits (les vendeurs Etsy adorent les emojis et les caractères accentués).

Exporter vers Google Sheets, Airtable ou Notion

Pour les utilisateurs Python, des bibliothèques comme gspread (Google Sheets) ou l’API Airtable permettent d’envoyer les données de manière programmatique. Mais si vous utilisez , tous les exports — vers Google Sheets, Excel, Airtable et Notion — sont gratuits et se font en un clic. Pas de clés API, pas de configuration OAuth.

Passez du code : comment extraire Etsy avec Thunderbit (alternative sans code)

Tout le monde n’a pas envie d’écrire des scripts Python, de maintenir une configuration de proxy ou de déboguer des sélecteurs CSS à 2 h du matin. Si c’est votre cas, voici comment obtenir des données Etsy avec .

Installer l’extension Chrome Thunderbit

Rendez-vous sur le et installez Thunderbit. Créez un compte gratuit — l’offre gratuite vous donne et tous les exports sont gratuits.

Utiliser « AI Suggest Fields » sur n’importe quelle page Etsy

Accédez à une page Etsy de recherche, de produit ou de boutique. Cliquez sur « AI Suggest Fields » dans la barre latérale Thunderbit. L’IA analyse la page et vous recommande des colonnes — nom du produit, prix, note, images, nom de la boutique, tags, informations de livraison. Ajustez ou ajoutez des colonnes selon vos besoins.

Cliquer sur Scrape et exporter

Cliquez sur « Scrape » pour extraire les données de la page en cours. Pour les résultats sur plusieurs pages, utilisez le scraping par pagination de Thunderbit. Pour enrichir une liste d’URL produit avec les détails de chaque page (descriptions, avis, livraison), utilisez le scraping des sous-pages — Thunderbit visite chaque lien et récupère automatiquement les données supplémentaires.

Exportez vers Excel, Google Sheets, Airtable ou Notion — gratuitement.

Quand Thunderbit est meilleur que Python pour le scraping Etsy

  • Aucune configuration de proxy ni de code anti-bot nécessaire. Thunderbit fonctionne dans votre vrai navigateur Chrome, il hérite donc de votre session et ressemble à un utilisateur normal pour DataDome.
  • L’IA s’adapte automatiquement aux changements de mise en page. Pas de sélecteurs cassés à réparer quand Etsy met à jour son interface.
  • Parfait pour les recherches ponctuelles, l’analyse concurrentielle ou les membres d’équipe non techniques. Si vous avez juste besoin d’un jeu de données rapide, pas besoin d’environnement Python.
  • Le scraping des sous-pages permet d’enrichir une liste d’URL produit avec des données détaillées sans écrire de boucles imbriquées.

Pour une démonstration, consultez la .

Python vs Thunderbit : comparaison des coûts sur 6 mois

FacteurPython en autonomieThunderbit
Temps de configuration8 à 20 heuresMoins de 5 minutes
Coût sur 6 mois (main-d’œuvre + proxies inclus)2 720 à 9 450 $90 à 228 $
Maintenance mensuelle4 à 10+ heures (les mises à jour de sélecteurs représentent 80 %+ de surcharge)0 à 1 heure
Gestion anti-botProxies résidentiels à un coût de crédit 85x supérieur à la normaleBasé sur le navigateur, contourne DataDome de manière native
Qualité des donnéesÉlevée (avec effort)Élevée (pilotée par l’IA)

Je ne dis pas que Python est le mauvais choix — si vous avez besoin d’un contrôle total, d’une logique personnalisée ou d’une intégration dans une chaîne plus large, le code reste roi. Mais pour la plupart des utilisateurs métiers qui ont simplement besoin de données Etsy, le calcul du ROI favorise un outil sans code.

Conseils juridiques et éthiques pour le scraping d’Etsy

On me demande la question de la légalité à chaque article sur le scraping, alors voici la version courte :

  • Les conditions d’utilisation d’Etsy interdisent explicitement l’accès automatisé. Cela dit, Etsy mise sur l’application de mesures techniques (DataDome) plutôt que sur des actions en justice — il n’existe pas de poursuites connues spécifiques à Etsy visant des scrapers.
  • N’extrayez que des données publiques. Ne contournez pas l’authentification et n’accédez pas à des tableaux de bord privés qui ne vous appartiennent pas.
  • Utilisez des cadences de requêtes raisonnables. 2 à 7 secondes de délai entre les requêtes, et ne surchargez pas les serveurs d’Etsy.
  • Respectez robots.txt. Etsy autorise les pages de recherche mais restreint certains chemins.
  • Traitez les données personnelles de manière responsable conformément aux lois sur la protection de la vie privée comme le RGPD.
  • Consultez un conseil juridique pour les projets de scraping à l’échelle commerciale.

Pour plus de contexte, consultez notre article sur les — notamment Meta c. Bright Data (2024), où l’extraction de données publiques a été confirmée.

Conclusion : points clés à retenir

Nous avons couvert beaucoup de terrain ici. Voici l’essentiel à retenir :

  • Les données structurées JSON-LD d’Etsy rendent l’extraction plus propre que l’analyse brute du HTML pour la plupart des champs.
  • DataDome est un véritable obstacle — utilisez des en-têtes adaptés, des délais, une bonne gestion des cookies et des proxies résidentiels pour le scraping Python à grande échelle.
  • L’API Etsy est limitée. Si vous avez besoin d’avis, de boutiques concurrentes ou d’analyses entre vendeurs, le scraping est la solution pratique.
  • Thunderbit offre une alternative sans code qui gère nativement l’anti-bot et l’authentification — à essayer si vous voulez des données Etsy sans maintenir de scripts.
  • Extrayez toujours de manière responsable et respectez les conditions d’Etsy.

Si vous voulez démarrer sans écrire de code, . Ou utilisez le code Python de ce tutoriel pour créer votre propre scraper sur mesure — et que vos sélecteurs ne cassent jamais un vendredi après-midi.

Pour plus de guides sur le scraping, consultez notre et notre sélection des .

Essayez Thunderbit pour extraire les données Etsy plus rapidement

FAQ

1. Est-il légal d’extraire Etsy avec Python ?

L’extraction de données publiques est généralement autorisée au regard de précédents juridiques récents (par ex. Meta c. Bright Data, hiQ c. LinkedIn). Cependant, les conditions d’utilisation d’Etsy interdisent l’accès automatisé ; consultez donc toujours leurs CGU et robots.txt avant d’extraire des données. Pour un usage à grande échelle ou commercial, demandez l’avis d’un juriste.

2. Puis-je extraire Etsy sans être bloqué ?

Etsy utilise DataDome, l’un des systèmes anti-bot les plus robustes du marché. Des en-têtes réalistes, des délais entre requêtes, la persistance des cookies et la rotation de proxies résidentiels aident tous à réduire les blocages. L’approche native navigateur de Thunderbit évite la plupart des détections, puisqu’elle fonctionne dans votre vraie session Chrome.

3. Etsy dispose-t-il d’une API que je peux utiliser à la place du scraping ?

Oui — Etsy propose une API v3, mais elle est surtout limitée aux données de votre propre boutique et n’offre pas un accès robuste aux avis. La plupart des cas d’usage d’intelligence concurrentielle et d’analyse entre boutiques nécessitent du scraping.

4. Quelles bibliothèques Python me faut-il pour extraire Etsy ?

Au minimum : requests, beautifulsoup4, pandas (pour l’export) et json (intégré). Pour les pages riches en JS ou nécessitant une connexion, ajoutez selenium. Pour un parsing HTML plus rapide, utilisez lxml.

5. Comment extraire spécifiquement les avis Etsy ?

Les avis Etsy se chargent via un endpoint API interne (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). Vous devrez extraire l’ID de l’annonce, l’ID de la boutique et le jeton CSRF depuis la page produit, puis envoyer une requête POST à l’endpoint avec pagination. En solution de secours, vous pouvez analyser le premier lot d’avis dans le HTML de la page produit — les deux méthodes sont expliquées pas à pas dans ce tutoriel.

En savoir plus

Shuai Guan
Shuai Guan
Cofondateur et PDG de Thunderbit. Passionné par l’intersection de l’IA et de l’automatisation, il est un fervent défenseur de l’automatisation et aime la rendre plus accessible à tous. Au-delà de la tech, il exprime sa créativité à travers la photographie, en capturant des histoires une image à la fois.
Table des matières

Essayez Thunderbit

Extrayez des leads et d’autres données en seulement 2 clics. Propulsé par l’IA.

Obtenir Thunderbit C’est gratuit
Extraire des données avec l’IA
Transférez facilement les données vers Google Sheets, Airtable ou Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week