Chaque page publique d'un produit Amazon est un enregistrement dense et structuré : un titre, un prix actuel, une note en étoiles, un nombre d'avis, une ligne de disponibilité et une galerie d'images. Ce sont exactement ces données qui alimentent le suivi des prix, la surveillance de la concurrence, l'enrichissement des catalogues et les études de marché. Le problème est que les récupérer à grande échelle est plus difficile qu'il n'y paraît, car Amazon affiche certaines parties de la page dans le navigateur et défie le trafic automatisé avant même qu'il n'atteigne le contenu.
Ce guide vous montre comment extraire les données de produits Amazon avec JavaScript et Node.js de manière fiable. Vous construisez un scraper simple et fonctionnel qui récupère une page produit publique via la Crawling API, extrait le titre, le prix, la note, le nombre d'avis, la disponibilité et les images du produit, puis exporte un enregistrement JSON propre. Deux approches sont couvertes : le parseur automatique intégré qui retourne directement des champs structurés, et une alternative avec cheerio qui lit les mêmes champs depuis le HTML brut par sélecteur CSS. L'ensemble du tutoriel se limite aux données de produits publics, et la section sur la légalité vers la fin n'est pas du remplissage, lisez-la avant de cibler un volume réel.
Ce que vous allez construire
Un script Node.js qui prend une URL publique de produit Amazon, récupère la page via la Crawling API et produit un enregistrement structuré pour ce produit. Nous utilisons la page des casques sport sans fil PHILIPS A4216 comme exemple et extrayons ces champs :
- Titre le nom du produit, par exemple "PHILIPS A4216 Wireless Sports Headphones".
- Prix le prix affiché actuel, comme "$24.99".
- Note la moyenne des avis clients, par exemple "4.3 out of 5 stars".
- Nombre d'avis le nombre de notes derrière cette moyenne.
- Disponibilité la ligne de stock, par exemple "In Stock" ou "Currently unavailable".
- Images l'image principale ainsi que les URL des images de galerie supplémentaires.
Pourquoi une requête ordinaire échoue sur Amazon
Si vous pointez un client HTTP brut vers une URL de produit Amazon, vous obtenez rarement la page propre que vous voyez dans un navigateur. Deux facteurs jouent contre vous. Premièrement, Amazon affiche certaines parties du catalogue, notamment certains éléments de prix et de galerie, avec JavaScript, de sorte que le HTML initial peut être incomplet jusqu'à ce que les scripts de la page s'exécutent. Deuxièmement, Amazon signale le trafic automatisé de manière agressive : les adresses IP de datacenter et les schémas de requêtes qui ne ressemblent pas à un vrai navigateur reçoivent un CAPTCHA, une vérification robot ou un blocage pur et simple avant même d'atteindre les données produit.
Un scraper Amazon fonctionnel a donc besoin de deux choses en une seule requête : une page qui s'affiche réellement, et une adresse IP que la plateforme considère comme un vrai visiteur. Vous pouvez assembler cela vous-même avec un navigateur sans interface graphique et un pool de proxies résidentiels rotatifs, mais assembler et maintenir ces composants représente l'essentiel du travail. La Crawling API combine les deux en un seul appel : vous lui envoyez l'URL du produit, elle récupère la page depuis une adresse IP fiable et rotative, et retourne soit le HTML terminé, soit, avec une option supplémentaire, les champs produit déjà analysés en JSON.
Vous avez le choix une fois la page récupérée. Passez l'option scraper et Crawlbase exécute son parseur Amazon intégré côté serveur, vous fournissant des champs structurés sans sélecteurs à maintenir. Omettez-la et vous obtenez du HTML brut à analyser vous-même avec cheerio. Ce guide montre les deux : le parseur automatique d'abord car il est le moins fragile, puis le chemin manuel pour que vous compreniez ce qui se passe en dessous.
Prérequis
Vous avez besoin de quelques éléments en place avant d'écrire du code. Aucun ne prend beaucoup de temps.
JavaScript et Node.js de base. Vous devez être à l'aise pour écrire et exécuter un script Node et installer des paquets avec npm. Si vous êtes nouveau sur Node, la documentation officielle et n'importe quel cours pour débutants vous amènera au niveau que ce tutoriel suppose. Pour un tutoriel plus complet, consultez notre guide sur la façon de construire un scraper web avec Node.js.
Node.js 16 ou une version ultérieure. Vérifiez votre version avec node --version. Si vous ne l'avez pas, installez-le depuis le site Node.js ou via un gestionnaire de versions comme nvm.
Un compte Crawlbase et un token. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token depuis la page de documentation du compte. Vous obtenez jusqu'à 20 000 requêtes gratuites sans carte requise, vous pouvez donc exécuter tous les exemples ici sur le niveau gratuit. Traitez le token comme un mot de passe : il authentifie vos requêtes, donc gardez-le hors du contrôle de version.
Configurer le projet
Créez un dossier de projet, initialisez-le et installez les deux bibliothèques dont le scraper a besoin.
node --version mkdir amazon-scraper && cd amazon-scraper npm init -y npm install crawlbase cheerio
Deux dépendances font le travail : crawlbase est le client Node officiel pour la Crawling API, et cheerio analyse le HTML retourné avec une API de style jQuery pour que vous puissiez extraire des champs par sélecteur CSS. Le chemin du parseur automatique n'a besoin que de crawlbase ; le chemin manuel utilise également cheerio. Si les sélecteurs vous sont nouveaux, l'introduction aux sélecteurs XPath et CSS est un bon complément.
Étape 1 : Récupérer la page produit avec le parseur automatique
Commencez par l'approche la moins fragile. Importez la classe CrawlingAPI, initialisez-la avec votre token et demandez l'URL du produit avec l'option scraper définie sur amazon-product-details. Cela demande à Crawlbase d'analyser la page côté serveur et de retourner des champs produit structurés en JSON plutôt que du HTML brut.
const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); const productUrl = 'https://www.amazon.com/dp/B099MPWPRY'; api .get(productUrl, { scraper: 'amazon-product-details' }) .then((response) => { if (response.statusCode === 200) { const data = JSON.parse(response.body); console.log(data.body); } }) .catch((error) => console.error('Request error:', error));
Exécutez-le avec node scraper.js. Comme l'option scraper est définie, le corps de la réponse est du JSON plutôt que du HTML, vous l'analysez donc avec JSON.parse et lisez le produit analysé sous data.body. Le parseur Amazon de Crawlbase retourne le nom du produit, le prix, la devise, la note, les informations de stock, les URLs d'images et plus encore sous forme de champs nommés, vous n'avez donc pas à écrire ni maintenir de sélecteurs. Vérifier le code de statut avant d'analyser rend les échecs visibles plutôt que silencieux.
Cette simple option scraper: 'amazon-product-details' est le parseur automatique qui fait le travail à votre place. La Crawling API affiche la page Amazon derrière une adresse IP résidentielle rotative et retourne le titre, le prix, la note, le stock et les images en JSON prêt à l'emploi, vous n'avez donc pas besoin d'exécuter une flotte de navigateurs sans interface graphique, un pool de proxies ni un mur de sélecteurs CSS qui dérivent à chaque fois qu'Amazon modifie son design. Pointez-la vers une page produit publique sur le niveau gratuit en premier.
Étape 2 : Extraire les champs qui vous intéressent
Le parseur automatique retourne un objet riche, mais la plupart des tâches n'ont besoin que d'une poignée de champs. Mappez la réponse analysée vers le titre, le prix, la note, le nombre d'avis, la disponibilité et les images, en revenant à null lorsqu'un champ est absent pour qu'une valeur manquante ne fasse jamais planter l'exécution.
function extractProduct(parsed) { return { title: parsed.name || null, price: parsed.price || null, rating: parsed.customerReview || null, reviewCount: parsed.customerReviewCount || null, availability: parsed.inStock ? 'In Stock' : 'Unavailable', mainImage: parsed.mainImage || null, images: parsed.images || [], }; }
Les noms de champs ici, name, price, customerReview, mainImage, et les autres, sont les clés que le parseur Amazon retourne dans data.body. La ligne availability est dérivée du flag de stock du parseur plutôt que copiée mot pour mot, vous obtenez donc une chaîne cohérente quelle que soit la formulation d'Amazon sur la page. Gardez ce mapping dans une petite fonction : lorsque vous voulez un nouveau champ plus tard, vous ajoutez une ligne ici au lieu de toucher à la logique de récupération.
Étape 3 : Analyser le HTML brut avec cheerio (solution de repli)
Parfois vous voulez la page brute plutôt que l'objet analysé, soit pour récupérer un champ que le parseur automatique n'expose pas, soit pour comprendre exactement où vit chaque valeur. Supprimez l'option scraper et la Crawling API retourne le HTML rendu, que vous chargez dans cheerio et lisez par sélecteur CSS. Ce sont les sélecteurs qu'Amazon utilise sur une page produit standard.
const cheerio = require('cheerio'); function parseHtml(html) { const $ = cheerio.load(html); const images = []; $('#altImages img').each((_, el) => { const src = $(el).attr('src'); if (src) images.push(src); }); return { title: $('#productTitle').text().trim() || null, price: $('.a-price .a-offscreen').first().text().trim() || null, rating: $('#acrPopover').attr('title') || null, reviewCount: $('#acrCustomerReviewText').text().trim() || null, availability: $('#availability').text().trim() || null, mainImage: $('#landingImage').attr('src') || null, images, }; }
Chaque champ correspond à un véritable élément sur la page. Le titre se trouve dans #productTitle ; le prix visible est le texte hors écran à l'intérieur du premier bloc .a-price, qu'Amazon garde comme une chaîne formatée avec devise ; la note se trouve dans l'attribut title de #acrPopover ("4.3 out of 5 stars") ; le compteur de notes est le texte de #acrCustomerReviewText ; la ligne de stock se trouve dans #availability ; et les vignettes de galerie sont les balises img sous #altImages, avec la photo principale à #landingImage. Lire chaque champ de manière défensive, avec un retour à null, empêche qu'un élément manquant casse toute l'analyse.
Les identifiants d'éléments et les noms de classes d'Amazon (#productTitle, .a-price, #acrPopover, et les autres) changent entre les mises en page, les régions et les catégories de produits. Traitez les sélecteurs ci-dessus comme un modèle de départ, pas comme un contrat. Lorsqu'un champ revient à null, réinspectez la page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur. C'est exactement la maintenance que le parseur automatique vous évite, ce qui en fait le chemin par défaut ci-dessus.
Étape 4 : Assembler et exporter en JSON
Connectez maintenant la récupération, l'extraction et un export JSON dans un seul script exécutable. Cette version utilise le parseur automatique comme chemin principal et écrit l'enregistrement final dans un fichier pour que vous puissiez l'intégrer dans une base de données, un moteur de comparaison ou un tracker de prix.
const fs = require('fs'); const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); function extractProduct(parsed) { return { title: parsed.name || null, price: parsed.price || null, rating: parsed.customerReview || null, reviewCount: parsed.customerReviewCount || null, availability: parsed.inStock ? 'In Stock' : 'Unavailable', mainImage: parsed.mainImage || null, images: parsed.images || [], }; } async function main() { const productUrl = 'https://www.amazon.com/dp/B099MPWPRY'; const response = await api.get(productUrl, { scraper: 'amazon-product-details' }); if (response.statusCode !== 200) { console.error(`Request failed: ${response.statusCode}`); return; } const parsed = JSON.parse(response.body).body; const product = extractProduct(parsed); fs.writeFileSync('product.json', JSON.stringify(product, null, 2)); console.log('Saved product.json'); console.log(product); } main().catch((error) => console.error('Error:', error));
Exécutez le script complet avec node scraper.js. Il récupère la page, mappe les champs analysés avec extractProduct, écrit un product.json soigné et affiche l'enregistrement dans la console. Pour utiliser la solution de repli cheerio à la place, supprimez l'option scraper de l'appel api.get et passez response.body directement à la fonction parseHtml de l'étape 3.
À quoi ressemble la sortie
Le product.json exporté est un seul enregistrement propre que vous pouvez stocker, comparer à une exécution précédente ou charger dans un tracker.
{ "title": "PHILIPS A4216 Wireless Sports Headphones", "price": "$24.99", "rating": "4.3 out of 5 stars", "reviewCount": "2,184 ratings", "availability": "In Stock", "mainImage": "https://m.media-amazon.com/images/I/61abc123.jpg", "images": [ "https://m.media-amazon.com/images/I/41def456.jpg", "https://m.media-amazon.com/images/I/51ghi789.jpg" ] }
Passer à grande échelle avec plusieurs produits
Un produit est une démo ; un vrai travail passe en revue une liste. Comme chaque page de produit standard partage le même parseur et les mêmes sélecteurs, vous collectez un ensemble d'URLs de produits (ou d'ASINs Amazon, qui correspondent directement aux URLs /dp/<ASIN>) et les parcourez en boucle, en réutilisant la même logique extractProduct pour chacun.
async function scrapeMany(asins) { const records = []; for (const asin of asins) { const url = `https://www.amazon.com/dp/${asin}`; const response = await api.get(url, { scraper: 'amazon-product-details' }); if (response.statusCode === 200) { const parsed = JSON.parse(response.body).body; records.push(extractProduct(parsed)); } } return records; } scrapeMany(['B099MPWPRY', 'B08PZHYWJS']).then((rows) => { console.log(`Collected ${rows.length} products`); });
Pour découvrir les URLs en premier lieu, scrapez une page de recherche ou de catégorie Amazon pour les liens de produits et alimentez-les dans cette boucle. Cette étape de page de recherche est un sujet à part entière, couvert dans notre guide sur la façon de scraper les pages de recherche Amazon avec la Crawling API. Si vous préférez ignorer complètement les sélecteurs et la logique de tarification, notre tutoriel sur la façon de scraper les prix Amazon avec l'IA montre une approche pilotée par un modèle pour les mêmes données.
Rester non bloqué
La Crawling API gère le rendu et la rotation des adresses IP pour vous, mais quelques habitudes maintiennent la santé des grands travaux, et elles s'appliquent à toute cible commerciale difficile.
- Cadencez vos requêtes. Marteler Amazon dans une boucle serrée est le moyen le plus rapide d'être limité en débit. Espacez les requêtes et ajoutez un délai court entre les produits plutôt que de crawler à pleine vitesse.
- Misez sur la rotation. Un pool d'adresses IP résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels afin qu'aucune ne déclenche une limite de débit. La Crawling API fait cela pour vous ; si vous construisez votre propre stack, le Smart AI Proxy vous offre la même rotation comme point de terminaison clé en main.
- Surveillez les codes de statut. Une exécution qui commence à retourner des défis ou des réponses non-200 vous indique que le débit actuel ou le niveau d'adresses IP n'est plus suffisant. Traitez cela comme un signal pour ralentir, pas du bruit à ignorer.
Pour le guide plus complet, voir comment scraper des sites web sans être bloqué. Amazon est aussi une cible fréquente pour les travaux de scraping web e-commerce plus larges, où ce même schéma récupération-puis-extraction s'applique aux autres marketplaces.
Est-il légal de scraper Amazon ?
La question de savoir si le scraping d'Amazon est autorisé dépend des Conditions d'utilisation d'Amazon, de votre juridiction et de ce que vous faites des données. Les conditions d'Amazon restreignent l'accès automatisé, de sorte que le scraping peut aller à l'encontre de ces conditions quelle que soit la prudence de vos outils. Aucun code ici ne change cela ; il rend seulement la partie technique fonctionnelle. Lisez les Conditions d'utilisation d'Amazon et son robots.txt, et traitez les deux comme la limite de ce que vous collectez.
Quelques lignes à retenir. Collectez uniquement des données de produits publics : le titre, le prix, la note, le nombre d'avis, la disponibilité et les images que tout le monde peut voir sans compte. Respectez les attentes de débit déclarées d'Amazon et gardez votre volume de requêtes suffisamment bas pour ne pas surcharger ses serveurs. Ne scrapez rien derrière une connexion et ne collectez pas de données personnelles sur les évaluateurs au-delà du texte d'avis public déjà affiché sur la page. Les médias protégés par le droit d'auteur, y compris les images de produits, appartiennent à leur propriétaire : référencez-les, mais ne les redistribuez pas comme si elles vous appartenaient. Si vous prévoyez de réutiliser les données commercialement, obtenez une autorisation ou un accord de données plutôt que de supposer que le silence vaut consentement.
Pour un accès sanctionné à grande échelle, Amazon propose des canaux officiels tels que la Product Advertising API pour les affiliés et la Selling Partner API pour les vendeurs, et ce sont les bons outils lorsque vous avez besoin d'une structure garantie, d'un volume ou de droits commerciaux. Ce guide est délibérément limité aux pages de produits publics car c'est la ligne qui rend le travail défendable. Il ne couvre rien derrière une connexion, les données d'acheteur ou de vendeur, ou toute tentative de contourner l'authentification. Si votre projet a besoin de plus que des données de produits publics, les API officielles d'Amazon ou un accord de licence sont le bon chemin, pas un scraper plus sophistiqué.
Points clés
- Les requêtes ordinaires sont bloquées. Amazon affiche certaines parties de la page côté client et défie le trafic automatisé, vous avez donc besoin du rendu et d'une adresse IP fiable ensemble, ce que la Crawling API fournit en un seul appel.
-
Le parseur automatique est le chemin le moins fragile. Passer
scraper: 'amazon-product-details'retourne le titre, le prix, la note, le stock et les images en JSON structuré sans sélecteurs à maintenir. -
cheerio est la solution de repli. Supprimez l'option scraper pour obtenir du HTML brut, puis lisez
#productTitle,.a-price,#acrPopover,#availabilityet les éléments d'image vous-même lorsque vous avez besoin d'un champ que le parseur n'expose pas. -
Passez à grande échelle en bouclant sur des URLs ou des ASINs. La même fonction
extractProducts'exécute sur une liste, et un scraper de page de recherche lui fournit les URLs de départ. - Restez sur les données publiques. Respectez les Conditions d'utilisation et le robots.txt d'Amazon, préférez la Product Advertising API officielle ou la Selling Partner API pour un usage à volume ou commercial, et ne touchez jamais aux connexions ou aux données personnelles des évaluateurs.
Foire aux questions
Pourquoi une requête ordinaire échoue-t-elle sur Amazon ?
Amazon affiche certaines parties du catalogue avec JavaScript et signale agressivement le trafic automatisé, de sorte qu'un client HTTP brut obtient souvent une page incomplète, un CAPTCHA ou un blocage au lieu des données produit. Pour obtenir une page complète de manière fiable, vous devez qu'elle soit rendue et récupérée depuis une adresse IP fiable et rotative, ce que la Crawling API gère pour vous.
Dois-je utiliser le parseur automatique ou cheerio ?
Utilisez le parseur automatique (scraper: 'amazon-product-details') par défaut : il retourne des champs structurés et il n'y a pas de sélecteurs à maintenir lorsqu'Amazon change sa mise en page. Recourez à la solution de repli cheerio uniquement lorsque vous avez besoin d'un champ spécifique que le parseur n'expose pas, ou lorsque vous voulez voir exactement où une valeur se trouve dans le HTML brut.
Quels champs de produit puis-je extraire ?
Depuis une page de produit publique standard, vous pouvez extraire le titre, le prix actuel, la note moyenne, le nombre d'avis, la disponibilité, et les URL d'image principale et de galerie. Le parseur automatique retourne également des extras comme la devise, le nom du vendeur et l'ASIN parent. Vous pouvez tout collecter en JSON structuré ou CSV pour le suivi des prix, les moteurs de comparaison ou la recherche concurrentielle.
Mes sélecteurs continuent de retourner null ?
Cela signifie généralement que le balisage d'Amazon a changé. Ses identifiants d'éléments et noms de classes (#productTitle, .a-price, #acrPopover, et les autres) diffèrent entre les mises en page, les régions et les catégories, donc un sélecteur qui fonctionnait le mois dernier peut casser. Réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur, ou passez au parseur automatique, qui absorbe ces changements pour vous.
Comment éviter d'être bloqué lors du scraping d'Amazon ?
Gardez votre taux de requêtes par adresse IP bas, ajoutez un délai entre les produits et routez via des adresses IP résidentielles rotatives afin qu'aucune adresse unique ne déclenche une limite de débit. La Crawling API gère la rotation et un pool d'adresses IP fiables pour vous ; si vous construisez votre propre stack, c'est la partie sur laquelle investir. Surveillez les codes de statut et ralentissez lorsque vous commencez à voir des défis.
Puis-je scraper les données personnelles des évaluateurs ou des vendeurs ?
Non, et ce guide ne le couvre pas. Restez sur les champs de produits publics affichés sur la page. Les données de compte, tout ce qui est derrière une connexion, et les détails personnels sur les évaluateurs ou les vendeurs au-delà du texte d'avis public sont hors de portée et vont à l'encontre des conditions d'Amazon. Pour un accès sanctionné, le bon chemin est l'API officielle d'Amazon ou un accord de données.
Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.
Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.
