Retour au blog
Guides
Raluca PenciucLast updated on Apr 29, 202619 min read

Récupérer les données des produits Amazon avec Python : Guide pratique

Récupérer les données des produits Amazon avec Python : Guide pratique
En bref : les pages produits d'Amazon regorgent de données précieuses (prix, notes, avis, ASIN), mais leur extraction fiable nécessite bien plus qu'une simple requête HTTP. Ce guide vous explique comment créer un scraper Python à l'aide de Requests et BeautifulSoup, gérer la pagination et les mesures anti-bot, exporter les données au format CSV ou JSON, et intégrer les résultats dans des workflows LLM. Vous apprendrez également quand utiliser une API de scraping plutôt que de développer votre propre solution.

Si vous avez besoin de scraper des données sur les produits Amazon à une échelle significative, vous savez déjà que la plateforme ne facilite pas la tâche. Amazon est la plus grande place de marché en ligne au monde, générant, selon certaines sources, plus de 500 milliards de dollars de chiffre d'affaires net annuel. Cela fait de son catalogue de produits l'un des ensembles de données les plus précieux (et les plus étroitement protégés) du Web public.

Le scraping des produits Amazon consiste à extraire par programmation des informations structurées, telles que les titres, les prix, les notes, les images et les ASIN, à partir des pages HTML d'Amazon. Que vous développiez un tableau de bord de suivi des prix, meniez une étude de marché concurrentielle ou rassembliez des données d'entraînement pour un modèle d'apprentissage automatique, le workflow repose sur les mêmes principes fondamentaux : envoyer une requête HTTP, analyser la réponse et extraire les champs qui vous intéressent.

Le défi réside dans le fait qu'Amazon bloque activement le trafic automatisé. CAPTCHA, interdictions d'IP, HTML dynamique et AWS WAF constituent autant d'obstacles entre vous et des données propres. Ce guide couvre l'ensemble du processus : configuration de l'environnement, structure des pages, scraper Python fonctionnel avec BeautifulSoup, pagination, gestion anti-bot, exportation des données, et même comment acheminer vos résultats de scraping vers un LLM. Nous comparerons également le scraping DIY aux alternatives via API et sans code afin que vous puissiez choisir l'approche qui convient à votre projet.

Pourquoi extraire les données sur les produits Amazon ?

Avant d'écrire la moindre ligne de code, il est utile de savoir ce que vous cherchez à résoudre. Les données sur les produits Amazon alimentent une gamme surprenante de workflows concrets :

  • Surveillance et veille des prix. Les détaillants et revendeurs suivent les prix de la concurrence sur des milliers d'ASIN afin d'ajuster leurs propres prix de manière dynamique.
  • Études de marché et analyse des tendances. Les analystes étudient les classements des meilleures ventes, le nombre d'avis et la répartition par catégorie pour repérer les nouvelles tendances en matière de produits.
  • Analyse des avis et du sentiment. Les équipes produit extraient les avis sur les produits Amazon pour comprendre les points faibles perçus par les clients, les demandes de fonctionnalités et les indicateurs de qualité à grande échelle.
  • Données d'entraînement pour le ML et l'IA. Les catalogues de produits structurés servent de jeux de données étiquetés pour les moteurs de recommandation, les classificateurs d'images et les modèles de langage naturel.

Comme Amazon agrège les données de millions de vendeurs dans pratiquement toutes les catégories de consommation, son catalogue est d'une exhaustivité unique. La collecte de ces données permet aux entreprises de surveiller le positionnement des produits, les tendances en matière de prix et les évolutions de la demande du marché qui seraient invisibles si l'on se contentait d'une navigation manuelle.

Est-il légal de scraper Amazon ?

C'est la première question que tout le monde se pose, et la réponse honnête est : cela dépend de ce que vous collectez et de la manière dont vous le faites.

Les conditions d'utilisation d'Amazon interdisent explicitement « l'utilisation de tout robot, spider, scraper ou autre moyen automatisé pour accéder au Service à quelque fin que ce soit ». Cette formulation est large, et Amazon l'a appliquée par le passé. Parallèlement, l'arrêt rendu en 2022 aux États-Unis dans l'affaire hiQ Labs c. LinkedIn a estimé que le scraping de données accessibles au public ne violait pas la loi sur la fraude et les abus informatiques (Computer Fraud and Abuse Act), du moins dans ce contexte spécifique. Les tribunaux d'autres juridictions peuvent parvenir à des conclusions différentes.

Concrètement, la plupart des développeurs qui effectuent du scraping sur les pages produits d'Amazon suivent quelques principes de bonne conduite : ne collecter que des informations accessibles au public, ne jamais accéder à des données personnelles protégées par un identifiant, respecter les limites de débit et éviter de surcharger les serveurs avec des volumes de requêtes excessifs. Consultez un conseiller juridique qualifié si votre cas d'utilisation implique une collecte de données à grande échelle à des fins commerciales. Le suivi de la réforme de la CFAA par l'EFF est une ressource utile pour se tenir informé de l'évolution du paysage juridique concernant l'accès automatisé aux données.

Choisir votre approche : Python DIY vs API de scraping vs outil sans code

Tous les projets ne nécessitent pas un scraper sur mesure. Avant de vous lancer dans le code, déterminez quelle approche correspond à votre niveau technique, à votre budget et à votre tolérance en matière de maintenance. Voici un cadre de décision rapide :

Critères

Scraper Python DIY

API de scraping

Outil sans code

Effort de configuration

Modéré (installation de bibliothèques, écriture de code)

Faible (clé API + appel HTTP)

Minime (interface utilisateur de type pointer-cliquer)

Gestion anti-bot

Vous gérez les proxys, les en-têtes et les tentatives de reconnexion

Géré par le service

Géré par le service

Flexibilité

Contrôle total sur la logique d'analyse

Élevée (HTML brut ou JSON structuré)

Limité aux modèles de l'outil

Coût à grande échelle

Les coûts d'infrastructure et de proxy s'additionnent

Tarification à la demande

Niveaux d'abonnement

Maintenance

Vous réparez vous-même les sélecteurs défectueux

Le fournisseur assure la maintenance de l'infrastructure

Le fournisseur assure la maintenance de l'infrastructure

Idéal pour

Workflows personnalisés, apprentissage

Pipelines de production, fiabilité

Non-développeurs, extractions rapides

Si vous souhaitez comprendre exactement comment les pages Amazon sont structurées et avez besoin d'un contrôle total sur chaque sélecteur CSS, la méthode Python « à faire soi-même » est idéale pour apprendre à extraire vous-même les fiches produits d'Amazon. Si votre priorité est la fiabilité de la livraison des données sans avoir à gérer un pool de proxys, une API de scraping dédiée élimine la plupart des difficultés opérationnelles. Et si vous êtes un analyste métier qui préfère ne pas toucher à un terminal, plusieurs plateformes sans code vous permettent de configurer des scrapers Amazon via une interface visuelle.

Le reste de ce guide se concentre sur la méthode Python DIY, mais nous reviendrons plus tard sur l'approche API avec un exemple de code concret.

Configuration de votre environnement Python

Vous avez besoin de Python 3.8 ou d'une version ultérieure, ainsi que de trois paquets. Ouvrez un terminal et exécutez :

pip install requests beautifulsoup4 lxml
  • Requests gère la couche HTTP : envoi de requêtes GET, gestion des en-têtes et réception des réponses.
  • BeautifulSoup analyse la chaîne HTML brute pour la transformer en une arborescence navigable que vous pouvez interroger à l'aide de sélecteurs CSS.
  • lxml est un backend d'analyse syntaxique facultatif mais recommandé. Il est nettement plus rapide que le backend intégré à Python html.parser pour les documents volumineux.

Créez un nouveau fichier Python (par exemple, amazon_scraper.py) et vérifiez les installations :

import requests
from bs4 import BeautifulSoup

print("Environment ready")

Si cela s'exécute sans erreur, vous êtes prêt à commencer.

Comment sont structurées les pages de produits Amazon

Avant d'écrire la logique d'analyse, vous devez savoir ce que vous analysez. Les fiches produits Amazon apparaissent sur deux types de pages principaux : les pages de résultats de recherche et les pages de détails individuelles des produits. Les deux contiennent des données structurées, mais la mise en page HTML diffère.

Sur une page de résultats de recherche, chaque fiche produit se trouve à l'intérieur d'une balise div avec l'attribut data-component-type="s-search-result". À l'intérieur de ce conteneur, vous trouverez généralement :

  • Titre : une balise h2 balise entourant une ancre (a) contenant le nom du produit.
  • Prix : une balise span balise a-price contenant un élément span.a-offscreen qui contient la chaîne de prix formatée.
  • Note : un span.a-icon-alt à l'intérieur du bloc de notation par étoiles, avec un texte du type « 4,5 étoiles sur 5 ».
  • ASIN : stocké sous forme d' data-asin attribut directement sur le résultat de recherche div.
  • Image : une img balise avec la classe s-image dont l' src pointe vers la vignette du produit.

Utilisez les outils de développement de votre navigateur (clic droit, Inspecter) pour vérifier ces sélecteurs sur une page en ligne. Amazon modifie parfois les noms de classes et la structure de mise en page ; veillez donc à toujours valider les sélecteurs avant une mise en production. De nombreux produits Amazon proposent également plusieurs variantes (couleur, taille, modèle), et chaque variante peut avoir son propre prix, sa propre image et sa propre disponibilité. Les données relatives aux variantes se trouvent généralement sur la page de détails du produit plutôt que sur la page de résultats de recherche, souvent intégrées dans un objet JavaScript que vous devrez analyser séparément.

Création d'un scraper de produits Amazon de base

Assemblons les pièces du puzzle. Le workflow du scraper comporte trois phases : demander la page, vérifier la réponse et analyser le code HTML. Voici les bases :

import requests
from bs4 import BeautifulSoup

HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/120.0.0.0 Safari/537.36"
    ),
    "Accept-Language": "en-US,en;q=0.9",
}

url = "https://www.amazon.com/s?k=mechanical+keyboard"
response = requests.get(url, headers=HEADERS)

if response.status_code == 200:
    soup = BeautifulSoup(response.text, "lxml")
    print(f"Page fetched: {len(response.text)} bytes")
else:
    print(f"Request failed with status {response.status_code}")

L' User-Agent en-tête est essentiel lorsque vous scrapez les pages de produits Amazon. Sans lui, Amazon renverra presque certainement une page CAPTCHA ou un statut 503. Vous vous présentez essentiellement comme un navigateur classique plutôt que comme un simple script Python.

Extraction des titres, des prix et des notes

Une fois que vous disposez de l'objet soup , parcourez chaque fiche produit et extrayez les attributs principaux :

products = []
cards = soup.select('div[data-component-type="s-search-result"]')

for card in cards:
    title_tag = card.select_one("h2 a span")
    price_tag = card.select_one("span.a-price span.a-offscreen")
    rating_tag = card.select_one("span.a-icon-alt")

    product = {
        "title": title_tag.get_text(strip=True) if title_tag else None,
        "price": price_tag.get_text(strip=True) if price_tag else None,
        "rating": rating_tag.get_text(strip=True) if rating_tag else None,
    }
    products.append(product)

print(f"Found {len(products)} products")

Chaque select_one appel cible un sélecteur CSS spécifique. Les vérifications conditionnelles empêchent votre script de planter lorsqu'un élément manque sur une fiche (les résultats sponsorisés, par exemple, omettent parfois le prix).

Extraction des images et des ASIN

Les images et les ASIN sont plus faciles à récupérer car ils se trouvent directement dans le conteneur de la fiche :

for i, card in enumerate(cards):
    asin = card.get("data-asin", "")
    img_tag = card.select_one("img.s-image")
    img_url = img_tag["src"] if img_tag else None

    products[i]["asin"] = asin
    products[i]["image_url"] = img_url

L'ASIN (Amazon Standard Identification Number) est un identifiant unique du produit. Il est utile pour la déduplication, la création d'URL de pages de détails du produit (https://www.amazon.com/dp/{ASIN}) et pour regrouper des ensembles de données entre différentes sessions de scraping.

Gestion de la pagination sur plusieurs pages

Une seule page de recherche Amazon affiche environ 20 à 60 résultats. Si vous avez besoin de milliers de produits, vous devez extraire les fiches produits Amazon sur plusieurs pages. Amazon utilise un page paramètre de requête que vous pouvez incrémenter :

import time

all_products = []
base_url = "https://www.amazon.com/s?k=mechanical+keyboard&page={page}"

for page_num in range(1, 11):  # pages 1 through 10
    url = base_url.format(page=page_num)
    response = requests.get(url, headers=HEADERS)

    if response.status_code != 200:
        print(f"Stopped at page {page_num}: status {response.status_code}")
        break

    soup = BeautifulSoup(response.text, "lxml")
    cards = soup.select('div[data-component-type="s-search-result"]')

    if not cards:
        print(f"No results on page {page_num}, stopping.")
        break

    for card in cards:
        title_tag = card.select_one("h2 a span")
        price_tag = card.select_one("span.a-price span.a-offscreen")
        all_products.append({
            "title": title_tag.get_text(strip=True) if title_tag else None,
            "price": price_tag.get_text(strip=True) if price_tag else None,
        })

    time.sleep(2)  # respect rate limits

print(f"Total products collected: {len(all_products)}")

Deux points à noter. Premièrement, l' time.sleep(2) appel ajoute une pause de deux secondes entre les requêtes. Sans régulation, Amazon signalera votre adresse IP presque immédiatement. Deuxièmement, la boucle vérifie si la liste est vide cards comme condition de terminaison, car Amazon renvoie une réponse 200 valide même lorsqu'il n'y a plus de résultats.

Pour les tâches à grande échelle couvrant des centaines de pages, envisagez de répartir les requêtes sur un pool de proxys tournants. Le scraping local à partir d’une seule adresse IP atteindra rapidement les limites de débit.

Contourner les défenses anti-bot d'Amazon

Amazon est connu pour bloquer les scrapers, et pour cause : la plateforme gère des milliards de pages vues. Ses défenses sont organisées en couches, et comprendre chacune d'entre elles vous aide à décider comment réagir.

AWS WAF (Web Application Firewall). Amazon utilise son propre pare-feu cloud pour inspecter les requêtes entrantes. Le WAF analyse votre adresse IP, les en-têtes HTTP, l'empreinte TLS et les modèles de comportement (fréquence des requêtes, séquence de navigation). Si un signal semble non humain, la requête est soit bloquée purement et simplement, soit redirigée vers un test CAPTCHA.

Défis CAPTCHA. Lorsque le WAF signale une requête, vous voyez généralement s’afficher une page vous demandant de résoudre un CAPTCHA sous forme d’image ou de texte. Un scraper basique basé sur les requêtes n’a aucun moyen de les résoudre automatiquement. Les options incluent l’intégration d’un service de résolution de CAPTCHA, le passage à un navigateur headless, ou l’acheminement des requêtes via une API de scraping qui gère les CAPTCHA en arrière-plan.

Blocage d'IP et limitation de débit. L'envoi d'un trop grand nombre de requêtes depuis la même adresse IP en peu de temps déclenche des blocages temporaires ou permanents. L'utilisation de proxys résidentiels en rotation donne l'impression que votre trafic provient de différentes connexions domestiques, ce qui est beaucoup plus difficile à distinguer des visites organiques pour le WAF.

Analyse des en-têtes et des empreintes. Des en-têtes de requête minimalistes (manquant Accept-Language, Accept-Encodingou un User-Agent) constituent un signal d'alerte immédiat. Randomisez votre chaîne User-Agent d'une requête à l'autre et incluez le même ensemble d'en-têtes qu'un vrai navigateur enverrait.

Si vous souhaitez sérieusement créer un scraper de produits Amazon fiable en Python, prévoyez d'investir au moins dans la rotation de proxys et la randomisation des en-têtes. Pour la plupart des cas d'utilisation en production, une API de scraping dédiée qui regroupe ces protections en un seul point de terminaison est le choix le plus pragmatique.

Présentation complète du code du scraper

Voici un script consolidé qui combine la configuration de l'environnement, le traitement des requêtes, l'analyse et la pagination en un seul fichier exécutable. Adaptez le terme de recherche et la plage de pages à vos besoins.

import requests
from bs4 import BeautifulSoup
import time
import json
import csv

HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 (KHTML, like Gecko) "
        "Chrome/120.0.0.0 Safari/537.36"
    ),
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept": "text/html,application/xhtml+xml",
}

def scrape_amazon(query, max_pages=5):
    all_products = []
    for page in range(1, max_pages + 1):
        url = f"https://www.amazon.com/s?k={query}&page={page}"
        resp = requests.get(url, headers=HEADERS)
        if resp.status_code != 200:
            print(f"Page {page}: HTTP {resp.status_code}")
            break
        soup = BeautifulSoup(resp.text, "lxml")
        cards = soup.select('div[data-component-type="s-search-result"]')
        if not cards:
            break
        for card in cards:
            all_products.append({
                "asin": card.get("data-asin", ""),
                "title": _text(card, "h2 a span"),
                "price": _text(card, "span.a-price span.a-offscreen"),
                "rating": _text(card, "span.a-icon-alt"),
                "image": card.select_one("img.s-image")["src"]
                         if card.select_one("img.s-image") else None,
            })
        time.sleep(2)
    return all_products

def _text(card, selector):
    tag = card.select_one(selector)
    return tag.get_text(strip=True) if tag else None

if __name__ == "__main__":
    results = scrape_amazon("wireless+earbuds", max_pages=3)
    print(f"Scraped {len(results)} products")

Quelques annotations méritent d'être soulignées. L' _text fonction d'aide permet de garder la boucle d'analyse compacte et évite les None . La Accept-Encoding et Accept complètent l'empreinte de la requête afin qu'elle ressemble davantage à celle d'un vrai navigateur. Et le fait d'encapsuler le tout dans une fonction facilite son intégration dans un pipeline plus large ou son appel depuis un planificateur.

Exportation des données extraites au format CSV et JSON

Les dictionnaires Python bruts sont utiles pour le débogage, mais les outils en aval (feuilles de calcul, chargeurs de bases de données, notebooks d'analyse) attendent un format de fichier standard. Voici comment exporter vos données de produits Amazon extraites au format CSV et JSON.

L'exportation CSV fonctionne bien pour l'analyse tabulaire dans Excel, Google Sheets ou pandas :

import csv

def export_csv(products, filename="amazon_products.csv"):
    if not products:
        return
    keys = products[0].keys()
    with open(filename, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=keys)
        writer.writeheader()
        writer.writerows(products)
    print(f"Exported {len(products)} rows to {filename}")

L'exportation au format JSON est le meilleur choix lorsque vous avez besoin de données imbriquées, que vous prévoyez de charger les résultats dans une base de données NoSQL ou que vous souhaitez alimenter une API avec ces données :

import json

def export_json(products, filename="amazon_products.json"):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(products, f, indent=2, ensure_ascii=False)
    print(f"Exported {len(products)} items to {filename}")

Quand utiliser quel format : choisissez le CSV si vos utilisateurs sont des analystes travaillant sur des feuilles de calcul ou si vous avez besoin d'une importation rapide dans une table SQL. Choisissez le JSON si vous construisez des pipelines de données, si vous devez préserver des structures imbriquées (comme les variantes de produits) ou si vous souhaitez un format qui correspond directement aux charges utiles des API.

Utilisation d'une API de scraping pour des données Amazon fiables

L'approche « faites-le vous-même » vous offre un contrôle total, mais cela signifie également que vous êtes responsable de tous les modes de défaillance : proxys défaillants, barrières CAPTCHA, sélecteurs tournants et interdictions d'IP. Si votre objectif est de scraper de manière fiable les pages de produits Amazon dans un pipeline de production, déléguer la couche de requêtes à une API de scraping dédiée peut vous faire gagner un temps considérable en termes d'ingénierie.

Une API de scraping se place entre votre code et le site web cible. Vous envoyez une requête HTTP normale au point de terminaison de l'API avec l'URL Amazon en paramètre, et le service gère en interne la rotation des proxys, la gestion des en-têtes, la résolution des CAPTCHA et les tentatives de reconnexion. Vous obtenez en retour du code HTML propre (ou, dans certains cas, du JSON pré-parsé) que vous pouvez directement intégrer à votre code de parsing BeautifulSoup.

Voici un exemple minimal illustrant comment cela fonctionne en pratique :

import requests
from bs4 import BeautifulSoup

API_URL = "https://api.example.com/v1/scrape"
API_KEY = "your_api_key_here"

params = {
    "url": "https://www.amazon.com/s?k=usb+c+hub",
    "api_key": API_KEY,
    "render_js": "false",
}

response = requests.get(API_URL, params=params)
soup = BeautifulSoup(response.text, "lxml")
# Parse exactly as before
cards = soup.select('div[data-component-type="s-search-result"]')
print(f"Found {len(cards)} results via API")

Notez que votre code de parsing ne change pas du tout. La seule différence réside dans l'URL de la requête et l'ajout d'une clé API. C'est là le principal avantage : vous dissociez la récupération des données du parsing, et vous pouvez passer de la récupération DIY à la récupération via API sans réécrire votre logique d'extraction.

Pour les équipes qui ont besoin directement de JSON structuré (en sautant complètement l'étape d'analyse HTML), certains services proposent des scrapers Amazon prêts à l'emploi qui renvoient les titres, les prix et les notes des produits sous forme de champs JSON prêts à l'emploi.

Intégrer les données Amazon dans les workflows LLM

C'est là que les choses deviennent intéressantes. Une fois que vous disposez de données de produits Amazon structurées, vous pouvez les acheminer directement vers des workflows de modèles linguistiques à grande échelle pour la synthèse, la comparaison et l'analyse, des tâches qui prendraient des heures à réaliser manuellement.

La méthode la plus simple consiste à convertir vos données extraites en un tableau Markdown ou en une invite structurée, puis à les envoyer à une API LLM :

def build_prompt(products):
    lines = ["| Title | Price | Rating |", "|---|---|---|"]
    for p in products[:20]:
        lines.append(
            f"| {p['title'][:60]} | {p['price']} | {p['rating']} |"
        )
    table = "\n".join(lines)
    prompt = (
        "Below is a table of Amazon products. "
        "Summarize the price range, identify the top-rated option, "
        "and note any patterns in pricing vs. ratings.\n\n"
        f"{table}"
    )
    return prompt

Vous pouvez également intégrer directement du JSON comme contexte dans un pipeline de génération augmentée par la récupération (RAG). Par exemple, transférez le catalogue de produits extraits dans un magasin de vecteurs, puis permettez aux utilisateurs de poser des questions telles que « Quel hub USB-C à moins de 30 $ a les meilleures évaluations ? » et obtenez des réponses fondées et étayées par des données.

Quelques conseils pratiques pour les données Amazon compatibles avec les LLM :

  • Tronquez les titres. Les titres des produits Amazon sont réputés pour être longs. Limitez-les à 60 à 80 caractères pour respecter les budgets de tokens.
  • Normalisez les prix. Supprimez les symboles de devise et convertissez-les en nombres à virgule flottante avant de les intégrer dans les invites d'analyse.
  • Regroupez les requêtes. Si vous avez des centaines de produits, répartissez-les en groupes de 20 à 30 par requête pour éviter les limites de la fenêtre de contexte.

Cette combinaison de web scraping et d'analyse LLM constitue un puissant facteur de différenciation pour les équipes chargées de la veille concurrentielle ou de l'extraction de données sur les produits Amazon à grande échelle.

Pièges courants et dépannage

Même avec un scraper performant, des problèmes peuvent survenir. Voici les problèmes les plus courants que vous rencontrerez lors du scraping des pages de produits Amazon, et comment les résoudre.

Réponses 403 Forbidden. Cela signifie généralement que le WAF d'Amazon a signalé votre requête. Vérifiez d'abord votre User-Agent en-tête. S'il est manquant ou manifestement synthétique (comme python-requests/2.28), remplacez-le par une chaîne de navigateur réaliste. Si le 403 persiste, votre adresse IP est probablement bloquée. Passez à un proxy ou ajoutez un délai plus long entre les requêtes.

Boucles CAPTCHA. Si chaque requête renvoie une page CAPTCHA au lieu des résultats de produits, votre adresse IP ou votre session a été signalée. Passer à une nouvelle adresse IP résidentielle résout généralement ce problème. Il existe des services de résolution de CAPTCHA programmés, mais ils ajoutent de la latence et des coûts.

Sélecteurs vides (valeurs « None » partout). Cela indique souvent qu’Amazon a servi une page rendue par JavaScript et que votre requests.get() appel n'a capturé que la structure HTML pré-rendue. Vérifiez en affichant len(response.text). Si la réponse est étrangement courte (moins de 50 Ko pour une page de recherche), vous tombez probablement sur une mise en page dépendante de JS. Un navigateur sans interface graphique ou une API de scraping avec rendu JavaScript peut résoudre ce problème.

Sélecteurs obsolètes après un changement de mise en page. Amazon modifie périodiquement les classes CSS et les structures DOM. Si un scraper qui fonctionnait la semaine dernière renvoie soudainement des données vides, inspectez une page récente dans DevTools et mettez à jour vos sélecteurs. Créez des sélecteurs autour des data- des attributs (comme data-asin et data-component-type) est plus fiable que de s'appuyer sur des noms de classes.

Points clés

  • Définissez votre approche dès le début. Les scrapers Python DIY offrent un contrôle total, les API de scraping éliminent la charge opérationnelle et les outils sans code s'adressent aux non-développeurs. Adaptez l'outil aux compétences de votre équipe et à votre budget de maintenance.
  • Respectez les mesures de protection d'Amazon. Des en-têtes réalistes, la régulation des requêtes et la rotation des proxys ne sont pas facultatives. Si vous les négligez, vous passerez plus de temps à déboguer les blocages qu'à écrire du code d'analyse.
  • Construisez vos sélecteurs autour d'attributs stables. Ciblez data-asin et data-component-type plutôt que sur des noms de classes volatils. Cela permet à votre scraper de continuer à fonctionner malgré les fréquentes mises à jour de la mise en page d'Amazon.
  • Exportez tôt et souvent. Enregistrez les données extraites au format CSV ou JSON après chaque lot de pagination. Si une requête ultérieure échoue, vous ne perdrez pas tout ce que vous avez déjà collecté.
  • L'intégration d'un LLM multiplie la valeur. Les données de produits extraites deviennent nettement plus utiles lorsque vous les intégrez dans des workflows de synthèse, de comparaison ou de RAG.

FAQ

Amazon autorise-t-il le scraping de ses pages produits ?

Non, pas explicitement. Les conditions d'utilisation d'Amazon interdisent l'accès automatisé au site. Cependant, les tribunaux de certaines juridictions ont statué que le scraping de données accessibles au public ne constituait pas nécessairement une violation des lois sur la fraude informatique. Le paysage juridique est nuancé et varie selon les pays ; consultez donc un avocat si vous prévoyez de procéder à du scraping à l'échelle commerciale.

Comment éviter d'être bloqué lors du scraping d'Amazon ?

Utilisez des en-têtes de navigateur réalistes (en particulier User-Agent), ajoutez des délais d'au moins 1 à 2 secondes entre les requêtes et alternez les adresses IP à l'aide d'un pool de proxys résidentiels. Évitez d'effectuer des requêtes en rafales rapides à partir d'une seule adresse IP et envisagez de randomiser vos intervalles de requêtes pour imiter les habitudes de navigation humaines.

Puis-je extraire des données d'Amazon sans écrire de code ?

Oui. Plusieurs plateformes de scraping visuel proposent des interfaces « pointer-cliquer » avec des modèles Amazon prédéfinis. Vous configurez les sélecteurs via une extension de navigateur ou une interface utilisateur web, et l'outil se charge de la gestion des requêtes et de l'exportation des données. Ces options conviennent mieux aux extractions de données ponctuelles et de petite envergure qu'aux pipelines automatisés à grande échelle.

Quelles sont les meilleures bibliothèques Python pour extraire les données sur les produits Amazon ?

Requests et BeautifulSoup constituent la combinaison standard pour le scraping de pages HTML statiques. Ajoutez lxml comme backend d'analyse pour un traitement plus rapide. Pour les pages qui s'appuient fortement sur le rendu JavaScript, Playwright ou Selenium avec un navigateur headless sont plus adaptés. pandas est utile côté exportation pour nettoyer et structurer les données collectées.

Conclusion

L'extraction des données sur les produits Amazon fait partie de ces projets qui semblent simples sur le papier mais qui se compliquent rapidement. L'analyse syntaxique en elle-même est simple : une fois que vous connaissez les bons sélecteurs CSS, BeautifulSoup se charge du gros du travail en quelques lignes de code. Le véritable défi réside dans tout ce qui entoure l'analyse syntaxique : obtenir une réponse propre en contournant la pile anti-bot d'Amazon, gérer la pagination sans que votre adresse IP soit signalée, et maintenir vos sélecteurs à jour à mesure que la plateforme évolue.

Le workflow Python présenté dans ce guide vous offre une base solide. Vous pouvez récupérer les résultats de recherche, extraire les titres, les prix, les notes, les images et les ASIN, paginer sur plusieurs pages, exporter des fichiers CSV ou JSON propres, et même intégrer ces données dans des pipelines LLM pour une analyse automatisée. Pour les petits projets ponctuels, cette approche « faites-le vous-même » peut suffire.

Pour les charges de travail en production où la disponibilité est cruciale, envisagez de déléguer la couche de requêtes à un service tel que WebScrapingAPI. Il gère la rotation des proxys, la résolution des CAPTCHA et la logique de réessai derrière un point de terminaison unique, ce qui vous permet de vous concentrer sur les données plutôt que sur l'infrastructure. Votre code d'analyse BeautifulSoup reste exactement le même ; seule l'étape de récupération change.

Quelle que soit la voie que vous choisissez, l'essentiel est de commencer par un plan clair : définissez les attributs de produit dont vous avez besoin, choisissez votre format d'exportation et intégrez la gestion des erreurs dès le début. Le catalogue d'Amazon est une mine d'or de données structurées si vous l'abordez de manière méthodique.

À propos de l'auteur
Raluca Penciuc, Développeur full-stack @ WebScrapingAPI
Raluca PenciucDéveloppeur full-stack

Raluca Penciuc est développeuse Full Stack chez WebScrapingAPI ; elle conçoit des robots de collecte de données, améliore les techniques de contournement et recherche des moyens fiables de réduire le risque de détection sur les sites cibles.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.