Comment extraire les données des boutiques et produits Etsy (tags, prix, évaluations)
Etsy cache des données propres et structurées dans un blob JSON sur chaque page produit - nom, prix, évaluations, tags. Analysez cela au lieu de lutter contre le HTML, et exploitez ces tags pour la recherche de mots-clés que vos concurrents paient.
Etsy est une mine d'or pour la recherche de produits et de mots-clés - des millions d'annonces actives, chacune étiquetée et évaluée par de vrais acheteurs. Le hic, c'est que l'API Open officielle v3 vous limite à environ 10 000 requêtes par jour et 10 par seconde, et verrouille les points d'accès intéressants derrière OAuth. Pour la recherche de concurrents et de marché à grande échelle, vous allez plutôt extraire les pages publiques. La bonne nouvelle : Etsy vous offre des données propres et structurées si vous savez où chercher. Ce guide montre la manière fiable d'extraire les données des boutiques et produits Etsy - prix, évaluations et tags - sans se battre avec le HTML.
Le truc fiable : analysez le ld+json, pas le HTML
Chaque page produit Etsy intègre un bloc <script type="application/ld+json"> : des données schema.org Product avec le titre, SKU, prix, devise, et un aggregateRating portant la valeur en étoiles et le nombre de critiques. Analyser ce JSON est bien plus stable que de courir après les classes CSS qu'Etsy fait tourner. Chargez la page via un proxy, récupérez le blob, et vous avez un enregistrement propre en quelques lignes :
import json, requests
from bs4 import BeautifulSoup
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def scrape_listing(url):
r = requests.get(url, proxies=proxies, timeout=20)
soup = BeautifulSoup(r.text, "html.parser")
blob = soup.find("script", {"type": "application/ld+json"})
data = json.loads(blob.string)
return {
"title": data.get("name"),
"price": data.get("offers", {}).get("price"),
"curr": data.get("offers", {}).get("priceCurrency"),
"rating": data.get("aggregateRating", {}).get("ratingValue"),
"reviews": data.get("aggregateRating", {}).get("reviewCount"),
}
print(scrape_listing("https://www.etsy.com/listing/1234567890/example"))

Les champs à extraire - surtout les tags
Au-delà du prix et de l'évaluation, le signal de plus grande valeur est les tags. Chaque annonce Etsy peut contenir jusqu'à 13 tags, et ce sont exactement les phrases que les vendeurs croient que les acheteurs recherchent. Collectez les tags des annonces les plus vendues dans une catégorie et vous avez rétro-ingénieré une carte de mots-clés - les mêmes données que les outils SEO spécialisés revendent. Associez-les au nombre de critiques comme un indicateur de la demande, et vous pouvez classer une catégorie par ce qui se vend réellement. Ajoutez le nombre de favoris de l'annonce et sa date de mise en ligne lorsque disponible, et vous pouvez séparer les vendeurs éprouvés des nouveaux arrivants surfant sur une tendance - la différence entre un mot-clé à cibler et un qui ne fait que paraître occupé. C'est là que le scraping se rentabilise plus vite que tout ensemble de données payant. Notre guide de scraping des critiques de produits couvre la transformation de ces textes de critiques en signaux de sentiment.
Scraping des pages de recherche et de boutique
Les pages de recherche et de boutique se comportent différemment. Leur ld+json ne liste que les huit premiers articles même lorsque la page en rend des dizaines, donc pour la découverte d'annonces, vous analysez les cartes HTML, pas le JSON. Récupérez les liens des annonces, dédupliquez les IDs numériques, puis récupérez chaque page produit pour l'enregistrement complet. L'URL de recherche d'Etsy accepte un paramètre de page, vous pouvez donc parcourir les résultats en boucle :
import re
def find_listing_ids(query, pages=3):
ids = set()
for page in range(1, pages + 1):
url = f"https://www.etsy.com/search?q={query}&page={page}"
r = requests.get(url, proxies=proxies, timeout=20)
# listing links look like /listing/<id>/<slug>
for m in re.findall(r"/listing/(\d+)/", r.text):
ids.add(m)
return ids
ids = find_listing_ids("ceramic+mug", pages=3)
print(len(ids), "unique listings")
Les images de produits se trouvent sur le CDN i.etsystatic.com et sont directement liées dans le balisage si vous avez besoin de vignettes. Pour la recherche au niveau de la boutique, la page de la boutique contient l'évaluation du vendeur, le nombre de ventes et les politiques - utile pour classer les concurrents par volume.
Obtenez des IP résidentielles conçues pour le scraping de marketplace
Variations, pagination et maintien d'une faible bande passante
Deux détails distinguent un extracteur de jouets d'un qui fonctionne à grande échelle. Premièrement, les variations : de nombreuses annonces Etsy vendent plusieurs options - tailles, couleurs, personnalisations - chacune avec son propre prix. Le champ ld+json offers peut être un seul objet ou un tableau d'entre eux, donc gérez les deux, sinon vous enregistrerez silencieusement seulement le premier prix et mal interpréterez toute une catégorie. Deuxièmement, la pagination : les résultats de recherche sont paginés, et Etsy limite la profondeur à laquelle vous pouvez parcourir une requête unique. Plutôt que d'essayer de parcourir jusqu'à la fin d'un terme large, divisez une catégorie en requêtes plus étroites (par matériau, style ou tranche de prix) afin que chaque recherche renvoie un ensemble peu profond et complet. Vous obtenez une meilleure couverture et déclenchez moins de vérifications anti-bot qu'un extracteur qui s'épuise à travers la page 40 de "cadeaux".
La bande passante est le coût qui s'accumule lors du scraping de marketplace. Une page produit complète d'Etsy télécharge beaucoup d'images et de scripts dont vous n'avez pas besoin si vous ne souhaitez que le ld+json. Lorsque vous récupérez avec HTTP simple, vous sautez déjà les téléchargements d'images - le balisage est du texte. Réservez le rendu JavaScript pour les quelques pages qui en ont réellement besoin, car une page rendue peut coûter plusieurs fois les octets d'une récupération brute. Cachez de manière agressive : les tags et le titre d'une annonce changent rarement d'heure en heure, donc un rafraîchissement conditionnel est préférable à tout re-téléchargement. Notre guide pour réduire les coûts de bande passante des proxies couvre les tactiques de vérification HEAD et de blocage des actifs qui maintiennent une facture par Go raisonnable.
Passer le mur CAPTCHA
Etsy effectue des vérifications anti-bot, et un navigateur sans tête ou une IP de centre de données frappant les pages de recherche déclenche rapidement un CAPTCHA. Trois choses vous permettent de le traverser. Premièrement, utilisez des proxies résidentiels - de vraies IP attribuées par un FAI qui se lisent comme des acheteurs, pas des serveurs. Deuxièmement, faites correspondre la géo au marché que vous étudiez ; les prix et estimations de livraison changent selon le pays. Troisièmement, dosez-vous - des intervalles réguliers et humains battent les rafales. Si vous préférez ne pas gérer le rendu et les réessais du tout, une API de scraping gère l'empreinte, la rotation et le JavaScript pour vous et renvoie la page analysée, ce qui est généralement moins de code que de maintenir une flotte sans tête. Pour le modèle plus large, consultez notre guide sur l'automatisation des marketplaces sur Amazon, eBay et Etsy.
Une ligne sur l'éthique : extrayez les données publiques des annonces, respectez les conditions d'utilisation d'Etsy et les directives des robots, et ne récoltez pas les coordonnées personnelles des vendeurs - cela passe de la recherche de marché à un problème de protection des données. Ceci est un conseil, pas un avis juridique ; vérifiez votre propre cas d'utilisation.

Questions fréquemment posées
Comment puis-je extraire des données d'Etsy ?
Chargez chaque page produit via un proxy résidentiel et analysez le bloc ld+json intégré, qui contient le titre, le prix, la devise et l'évaluation en tant que données propres schema.org. Pour la découverte, analysez les cartes HTML de la page de recherche pour collecter les IDs des annonces, puis récupérez chaque page produit. C'est plus stable que de scraper des classes CSS en rotation.
Etsy dispose-t-il d'une API pour le scraping ?
L'API Open officielle v3 d'Etsy existe mais limite à environ 10 000 requêtes par jour et 10 par seconde, et verrouille de nombreux points d'accès derrière OAuth. Pour la recherche de concurrents à grande échelle, la plupart des gens extraient les pages publiques, qui exposent souvent plus que ce que l'API renvoie - y compris la liste complète des tags sur chaque annonce.
Comment puis-je obtenir des tags Etsy pour la recherche de mots-clés ?
Chaque annonce peut contenir jusqu'à 13 tags, présents dans le balisage de la page. Extrayez les annonces les plus vendues dans une catégorie, collectez leurs tags, et classez-les par fréquence pour construire une carte de mots-clés. Pondérer par le nombre de critiques permet d'approcher la demande, vous donnant une image basée sur les données de ce qui se vend et de ce que les acheteurs recherchent.
Pourquoi Etsy affiche-t-il un CAPTCHA lorsque je fais du scraping ?
Une IP de centre de données ou un navigateur sans tête agressif se lit comme un bot. Utilisez des proxies résidentiels pour que les requêtes ressemblent à de vrais acheteurs, faites correspondre la géo au marché, et dosez les requêtes à des intervalles semblables à ceux des humains. Une API de scraping qui rend et tourne pour vous élimine la plupart des déclencheurs CAPTCHA sans code supplémentaire.
Scraper Etsy efficacement consiste principalement à lire le JSON qu'il vous donne déjà et à atteindre la page sans blocage. Analysez le ld+json, exploitez les tags, répartissez les requêtes sur des IP résidentielles propres, et vous avez un flux en direct de prix, d'évaluations et d'intention de recherche - la matière première pour une véritable recherche de produits.