Extraire un prix d'une page produit Amazon semble trivial jusqu'à ce que vous tentiez de l'automatiser à grande échelle. La page est rendue côté client, le balisage varie selon les mises en page, et le même produit peut afficher simultanément un prix promotionnel, un prix catalogue, un coupon et un prix d'abonnement. L'ancienne réponse était un tas de sélecteurs CSS ou de XPath fragiles qui se cassaient dès qu'Amazon publiait une modification. L'IA change le calcul : au lieu de décrire où se trouve le prix dans le DOM, vous transmettez le contenu de la page à un modèle et lui dites ce que vous voulez en langage naturel.
Ce guide vous montre comment scraper les prix d'Amazon avec l'IA de façon fiable. Utilisez la Crawling API pour récupérer et rendre la page produit publique en Markdown propre, puis transmettez ce contenu à un grand modèle de langage qui renvoie le prix et les champs connexes sous forme de JSON structuré. La séparation est l'essentiel du principe : Crawlbase gère la récupération et le rendu derrière un vrai navigateur et une IP fiable, le modèle gère la lecture et la structuration. Chaque outil fait la partie pour laquelle il est réellement performant.
Pourquoi associer l'IA à une couche de récupération
Un modèle de langage est performant pour lire du contenu désorganisé et retourner des données structurées quand vous le demandez. Ce qu'il ne peut pas faire, c'est récupérer une page web. Il n'a ni client HTTP, ni navigateur, ni pool de proxys, ni moyen de passer les défenses anti-bot qui gardent un site comme Amazon. Donnez-lui une URL et il ne peut pas l'ouvrir ; donnez-lui le HTML brut que vous avez scrapé vous-même et il extraira depuis ce que vous avez réellement récupéré, ce qui sur Amazon est généralement une coque presque vide ou une page CAPTCHA.
C'est ce vide que la couche de récupération comble. Amazon rend les prix et la disponibilité dans le navigateur, et il détecte rapidement le trafic automatisé, donc un simple requests.get renvoie typiquement un 200 sans aucune des données que vous cherchez. Vous avez besoin d'un navigateur qui exécute le JavaScript de la page et d'une IP que le site perçoit comme un vrai visiteur. Vous pouvez construire cela vous-même avec un navigateur sans interface graphique plus des proxys résidentiels rotatifs, mais maintenir cette infrastructure en bon état représente l'essentiel du travail. La Crawling API regroupe les deux en un seul appel : envoyez une URL avec un token JavaScript, elle rend la page et renvoie du contenu prêt, idéal pour le modèle.
Maintenez la frontière claire. Crawlbase récupère et rend la page Amazon en Markdown propre. Le modèle extrait le prix et les champs connexes de ce contenu. Le modèle ne touche jamais au réseau dans cette conception, et Crawlbase n'essaie jamais de comprendre les données. Brouiller ces deux tâches est la raison la plus courante pour laquelle ces pipelines semblent fragiles.
Est-il légal de scraper les prix Amazon ?
Cela dépend des conditions d'utilisation d'Amazon, de votre juridiction et de ce que vous faites avec les données. Les conditions d'Amazon restreignent l'accès automatisé, donc le scraping peut aller à l'encontre de ces conditions quel que soit le soin apporté à vos outils. Aucun code ici ne change cela ; il rend simplement la partie technique fonctionnelle. Traitez la question juridique comme une vraie question, pas une formalité.
Quelques lignes à respecter. Collectez uniquement les données publiques : les prix, titres, évaluations et disponibilité que n'importe qui peut voir sur une page produit sans se connecter. Respectez le robots.txt d'Amazon et ses attentes déclarées en matière de débit, et maintenez votre volume de requêtes suffisamment bas pour ne pas solliciter excessivement les serveurs. Si vous prévoyez de réutiliser les données commercialement, obtenez une autorisation ou un accord de données officiel plutôt que de supposer que le silence vaut consentement. Et ne collectez jamais de données personnelles, y compris tout ce qui est lié à des comptes clients individuels ou des avis attribuables à des personnes identifiables.
Ce tutoriel est délibérément limité aux données publiques de produits car c'est la ligne qui rend le travail défendable. Il ne couvre rien derrière une connexion, les données de compte ou de commande, les flux de paiement, ni aucune tentative de contournement de l'authentification. Si votre projet nécessite plus que des pages produits publiques, la bonne approche est une API officielle ou un accord de données avec Amazon, pas un scraper plus sophistiqué.
Ce que vous allez construire
Un petit script Python fonctionnel qui prend une URL de produit Amazon, récupère la page rendue via la Crawling API sous forme de Markdown propre, envoie ce Markdown à un modèle de langage avec une invite d'extraction, et écrit le résultat structuré dans un fichier JSON. Nous le pointerons sur une vraie page produit, mais le même script fonctionne sur n'importe quelle URL Amazon publique que vous y substituez.
Configurer l'environnement
Vous avez besoin de Python 3.8 ou ultérieur. Confirmez votre version, créez un environnement virtuel pour isoler les dépendances du projet, puis installez les bibliothèques.
python --version python -m venv amazon_env source amazon_env/bin/activate pip install openai crawlbase python-dotenv
Sous Windows, activez l'environnement avec amazon_env\Scripts\activate à la place de la ligne source. Trois dépendances font le travail : crawlbase est le client officiel pour la Crawling API, openai est le client pour le modèle de langage, et python-dotenv charge vos clés depuis un fichier local pour qu'elles ne se retrouvent jamais codées en dur dans le script.
Vous avez besoin de deux identifiants. Obtenez une clé API pour votre fournisseur de modèle depuis leur tableau de bord, et obtenez un token JavaScript (JS) Crawlbase depuis votre tableau de bord Crawlbase après inscription. Stockez les deux dans un fichier .env dans votre dossier de projet.
OPENAI_API_KEY=your_model_api_key_here CRAWLBASE_JS_TOKEN=your_crawlbase_js_token_here
Crawlbase propose deux types de tokens. Le token normal récupère du HTML statique ; le token JavaScript (JS) rend d'abord la page dans un vrai navigateur. Amazon charge ses prix côté client, donc le token JS est le bon choix ici. Utiliser le token normal sur une page rendue côté client renvoie la même coque vide qu'une récupération simple, et le modèle ne peut pas extraire un prix qui n'a jamais été là.
Étape 1 : Récupérer la page Amazon rendue
La Crawling API peut renvoyer la page déjà convertie en Markdown, ce qui est exactement ce que vous voulez avant de l'envoyer à un modèle de langage. Le Markdown supprime la navigation, les scripts et le bruit de style, laissant le contenu lisible. Cela réduit le nombre de tokens que vous envoyez au modèle, ce qui rend l'appel moins coûteux et l'extraction plus précise. Passez format: 'markdown' et l'API vous remet du texte propre au lieu de HTML brut.
import os from dotenv import load_dotenv from crawlbase import CrawlingAPI load_dotenv() api = CrawlingAPI({"token": os.environ["CRAWLBASE_JS_TOKEN"]}) url = "https://www.amazon.com/dp/B0CHX1W1XY" def fetch_markdown(target_url): options = {"format": "markdown", "ajax_wait": "true", "page_wait": 3000} response = api.get(target_url, options) return response["body"].decode("utf-8") page_markdown = fetch_markdown(url) print(page_markdown[:500])
Les deux options d'attente sont importantes pour une cible rendue côté client comme Amazon. ajax_wait demande à l'API d'attendre que le contenu asynchrone ait fini de se charger, et page_wait attend un nombre fixe de millisecondes après le chargement pour que les éléments de prix à rendu tardif apparaissent avant la capture de la page. Trois secondes est un bon point de départ ; augmentez-les si le prix revient manquant. Exécutez ceci et vous devriez voir du vrai balisage produit en sortie, pas une coque vide, ce qui confirme que le rendu fonctionne avant que vous n'écriviez une seule ligne de logique d'extraction.
Un modèle IA lit les pages, il ne les récupère pas. La Crawling API comble cet écart en un seul appel : passez un token JS, elle rend la page Amazon dans un vrai navigateur, fait tourner les IP résidentielles côté serveur, et renvoie du HTML propre ou du Markdown prêt pour les LLM, vous évitant d'exploiter vous-même une flotte sans interface graphique et un pool de proxys. Pointez-la sur une page produit publique sur le niveau gratuit d'abord.
Étape 2 : Envoyer le contenu au modèle et demander du JSON
Avec le Markdown propre en main, vous décrivez les champs que vous voulez dans une invite et laissez le modèle effectuer l'extraction. L'astuce pour un pipeline fiable est de forcer la sortie JSON. Le client OpenAI prend en charge un format de réponse JSON, donc définissez-le et le modèle renvoie du JSON analysable au lieu de prose enveloppée dans des délimiteurs de code. Ce seul paramètre supprime la majeure partie de la fragilité dont les gens se plaignent avec l'extraction par LLM.
from openai import OpenAI client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) def extract_fields(content): prompt = f"""You are a data extraction tool. From the Amazon product page content below, extract the product title, current price, list price, currency, rating, review count, and availability. Return only JSON with keys: title, price, list_price, currency, rating, reviews, availability. Use null for any field not present. CONTENT: {content} """ response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"}, ) return response.choices[0].message.content raw_json = extract_fields(page_markdown) print(raw_json)
Quelques éléments rendent cette invite efficace. Elle indique le rôle ("outil d'extraction de données") pour que le modèle reste concis, elle nomme les clés exactes que vous voulez pour que le schéma soit stable entre les exécutions, et elle dit au modèle d'utiliser null pour les champs manquants pour qu'un produit sans prix catalogue ne perturbe pas la sortie. Passer du Markdown plutôt que du HTML brut signifie que le modèle concentre son attention sur le contenu, pas sur la structure. Si vous avez besoin d'un schéma plus riche, listez davantage de clés et décrivez celles qui sont ambiguës ; le modèle gère les objets imbriqués et les tableaux sans cérémonie supplémentaire.
Étape 3 : Analyser et sauvegarder le résultat structuré
Parce que vous avez demandé un format de réponse JSON, le texte de réponse est déjà du JSON valide. Analysez-le en dictionnaire Python et écrivez-le sur disque. Enveloppez l'analyse dans un try/except pour qu'une réponse malformée rare enregistre le texte brut au lieu de faire planter l'exécution.
import json def save_json(raw, path="amazon_price.json"): try: data = json.loads(raw) except json.JSONDecodeError: print("Model did not return valid JSON:") print(raw) return with open(path, "w") as f: json.dump(data, f, indent=2) print(f"Saved {path}") save_json(raw_json)
Le script complet
Voici tout assemblé en un seul fichier exécutable. Remplissez vos deux identifiants dans .env, changez l'URL pour le produit qui vous intéresse, et ajustez les clés d'invite pour les champs dont vous avez besoin.
import os import json from dotenv import load_dotenv from crawlbase import CrawlingAPI from openai import OpenAI load_dotenv() api = CrawlingAPI({"token": os.environ["CRAWLBASE_JS_TOKEN"]}) client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) url = "https://www.amazon.com/dp/B0CHX1W1XY" def fetch_markdown(target_url): options = {"format": "markdown", "ajax_wait": "true", "page_wait": 3000} response = api.get(target_url, options) return response["body"].decode("utf-8") def extract_fields(content): prompt = f"""You are a data extraction tool. From the Amazon product page content below, extract the product title, current price, list price, currency, rating, review count, and availability. Return only JSON with keys: title, price, list_price, currency, rating, reviews, availability. Use null for any field not present. CONTENT: {content} """ response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"}, ) return response.choices[0].message.content def main(): markdown = fetch_markdown(url) raw = extract_fields(markdown) try: data = json.loads(raw) except json.JSONDecodeError: print("Model did not return valid JSON:", raw) return with open("amazon_price.json", "w") as f: json.dump(data, f, indent=2) print(json.dumps(data, indent=2)) if __name__ == "__main__": main()
À quoi ressemble le résultat
Exécutez-le avec python amazon_scraper.py et vous obtenez des données structurées propres écrites dans amazon_price.json et affichées dans la console.
{ "title": "Echo Dot (5th Gen) Smart speaker with Alexa", "price": "$34.99", "list_price": "$49.99", "currency": "USD", "rating": "4.7", "reviews": "128,540", "availability": "In Stock" }
Remarquez ce que vous n'avez pas écrit : aucun sélecteur CSS, aucun XPath, aucune logique d'analyse par champ pour démêler le prix promotionnel du prix catalogue. Vous avez décrit les champs et le modèle les a trouvés. Pointez le même script sur un produit différent, voire sur une page de résultats de recherche, et il s'adapte sans modification de code, ce qui est le véritable avantage de l'approche d'extraction de données par IA par rapport aux sélecteurs réglés à la main. Pour le même modèle avec un modèle différent, consultez comment exploiter Gemini AI pour le scraping web.
Mise à l'échelle vers de nombreux produits
Une page est une démonstration ; un vrai travail de surveillance des prix s'exécute sur une liste de produits. La forme reste la même : bouclez sur les URL, récupérez chacune via la Crawling API, extrayez avec le modèle, et collectez les lignes. Deux choses à garder à l'esprit quand vous montez en charge. Le modèle facture par token, donc envoyer du Markdown plutôt que du HTML complet maintient le coût bas à chaque appel, et la Crawling API a son propre débit pour que vous n'ayez pas à gérer des proxys ou des instances de navigateur vous-même.
urls = [ "https://www.amazon.com/dp/B0CHX1W1XY", "https://www.amazon.com/dp/B09B8V1LZ3", ] results = [] for u in urls: markdown = fetch_markdown(u) raw = extract_fields(markdown) try: row = json.loads(raw) row["url"] = u results.append(row) except json.JSONDecodeError: print(f"Skipped {u}: invalid JSON") with open("prices.json", "w") as f: json.dump(results, f, indent=2)
Si vous scrapez Amazon spécifiquement et de façon répétée, il vaut la peine de comparer cela avec la Crawling API, qui renvoie du JSON pré-analysé pour les sites pris en charge, Amazon inclus, sans LLM dans la boucle. C'est plus rapide et moins coûteux pour ce cas bien balisé. L'approche IA de ce guide est le recours flexible pour les mises en page inhabituelles, les produits ponctuels ou les champs qu'aucun parseur dédié n'expose. Pour comprendre pourquoi le Markdown est la bonne forme d'entrée pour un modèle, consultez le Markdown prêt pour les LLM pour le scraping web.
Limites à connaître avant de déployer
Le pipeline IA plus Crawlbase est flexible, mais ce n'est pas le bon outil pour tous les cas. Gardez ces points à l'esprit.
Le coût en tokens s'accumule. Le modèle facture par token envoyé et reçu. Envoyer du HTML complet au lieu du Markdown peut multiplier votre facture sans bénéfice, donc compressez toujours l'entrée. Pour les pages très volumineuses, extrayez uniquement la section pertinente avant l'appel au modèle.
C'est plus lent que l'analyse basée sur des règles. Un aller-retour avec un LLM prend plus de temps qu'un passage de sélecteur BeautifulSoup ou Cheerio. Pour les tâches à haute fréquence et faible latence comme la surveillance des prix à la seconde, un parseur dédié ou la Scraper API gagne. L'approche IA brille quand les mises en page varient ou changent souvent.
Les modèles peuvent se tromper. Les pages Amazon sont denses et répétitives, donc un modèle peut occasionnellement prendre le prix d'un produit connexe ou confondre le prix promotionnel avec le prix catalogue. Forcer la sortie JSON et nommer des clés exactes réduit beaucoup cela, mais pour tout ce qui est critique, validez le dictionnaire analysé contre un schéma attendu avant de lui faire confiance.
Pour rester non bloqué à grand volume, la Crawling API gère la rotation des IP et le rendu pour vous. Si vous préférez acheminer votre propre trafic via un pool rotatif, le Smart AI Proxy vous donne la même rotation d'IP résidentielles sous forme de point de terminaison proxy. Dans tous les cas, le guide complet se trouve dans comment scraper des sites web sans être bloqué, et le contexte e-commerce plus large dans le scraping web e-commerce.
Points clés
- Divisez le travail. Crawlbase récupère et rend la page Amazon ; le modèle extrait le prix et les champs connexes. Aucun outil ne fait le travail de l'autre, et cette séparation est ce qui rend le pipeline fiable.
-
Utilisez le token JS et le format Markdown. Le token JS rend les prix côté client d'Amazon ;
format: 'markdown'renvoie du contenu propre et peu gourmand en tokens, idéal comme entrée pour un modèle. - Forcez la sortie JSON. Définissez le format de réponse comme objet JSON et nommez vos clés exactes pour que le résultat soit analysable à chaque exécution.
- Aucun sélecteur nécessaire. Vous décrivez les champs en langage naturel, donc le même script s'adapte aux différentes mises en page de produits sans réécrire le code d'extraction.
- Restez sur les données publiques. Respectez les CGU et le robots.txt d'Amazon ; pas de comptes, pas de données de commande, pas de contournement d'authentification, et optez pour la Scraper API quand la vitesse compte.
Foire aux questions
Un modèle IA peut-il scraper les prix Amazon seul ?
Pas la partie récupération. Un modèle de langage lit et structure le contenu que vous lui donnez, mais il n'a ni client HTTP, ni navigateur, ni pool de proxys, donc il ne peut pas ouvrir une URL Amazon ni passer les défenses anti-bot. Vous le combinez avec une couche de récupération comme la Crawling API, qui rend la page et renvoie du Markdown propre ; le modèle extrait ensuite le prix et d'autres champs de ce contenu.
Pourquoi convertir la page Amazon en Markdown avant de l'envoyer au modèle ?
Le Markdown supprime la navigation, les scripts et le bruit de style, laissant le contenu lisible. Cela réduit le nombre de tokens que vous envoyez au modèle, ce qui réduit le coût et améliore la précision car le modèle concentre son attention sur les détails réels du produit plutôt que sur la structure. La Crawling API peut renvoyer du Markdown directement avec format: 'markdown', donc vous n'avez pas besoin d'une étape de conversion séparée.
Ai-je besoin du token normal ou du token JS pour Amazon ?
Utilisez le token JS. Amazon rend ses prix côté client, donc le token normal renvoie une coque vide et le modèle n'a rien à extraire. Le token JS rend d'abord la page dans un vrai navigateur, de sorte que le prix et la disponibilité sont présents lorsque le contenu atteint le modèle.
Dois-je plutôt utiliser la Scraper API pour Amazon ?
Souvent, oui. La Crawling API renvoie du JSON pré-analysé pour Amazon sans LLM dans la boucle, ce qui est plus rapide et moins coûteux pour la surveillance régulière des prix. L'approche IA de ce guide est le recours flexible pour les mises en page inhabituelles, les produits ponctuels ou les champs que le parseur n'expose pas. De nombreuses équipes utilisent la Scraper API pour le volume principal et le pipeline IA pour les cas particuliers.
Est-il légal de scraper les prix d'Amazon ?
Cela dépend des conditions d'utilisation d'Amazon, de votre juridiction et de votre objectif, et leurs conditions restreignent l'accès automatisé. Limitez-vous strictement aux données publiques de produits telles que les prix, titres et évaluations, respectez le robots.txt et les attentes en matière de débit, et ne touchez jamais aux comptes, données de commande, flux de paiement ou authentification. Pour une réutilisation commerciale, obtenez une autorisation ou un accord de données officiel plutôt que de vous appuyer sur un scraper.
Comment éviter d'être bloqué lors du scraping des prix Amazon ?
Maintenez votre taux de requêtes par IP bas, variez les produits que vous récupérez au lieu de marteler une URL, et acheminez via des IP résidentielles rotatives pour qu'aucune adresse unique ne déclenche une limite de débit. La Crawling API gère la rotation et un pool d'IP fiables pour vous ; si vous construisez votre propre infrastructure, c'est la partie dans laquelle investir. Surveillez les codes de statut et reculez quand vous commencez à voir des défis.
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.
