Scraper les prix Amazon : le plugin et le spider cloud
Il y a deux façons d’obtenir les données de prix d’Amazon, et celle qu’il vous faut dépend du volume. Pour une fiche produit ou une recherche par mot-clé, le plugin Amazon renvoie tout en JSON propre en un seul appel. Pour des millions de pages selon un planning, vous faites tourner votre propre spider Scrapy dans notre spider cloud, chaque requête étant déjà routée par la même API anti-bot. Ce guide couvre les deux, et la ligne qui les sépare.
Deux problèmes coulent la plupart des scrapers de prix Amazon, et il vaut mieux les nommer avant d’écrire du code :
- Le mur anti-bot. Une simple requête HTTP vers une page produit
/dp/reçoit le “Robot Check” d’Amazon ou un 503, pas le prix. Il vous faut une empreinte de navigateur réelle et une IP de sortie propre, en rotation. - La devise. Celle-ci est plus discrète et piège beaucoup de monde. Amazon fixe le prix de chaque page dans la devise du lieu de livraison qu’il déduit de votre IP de sortie. Scrapez
amazon.comdepuis un datacenter au Danemark et le prix revient en DKK, ou vous obtenez une page “ne peut pas être expédié à votre adresse” sans aucun prix. Le scraping a “fonctionné”, c’est juste que le chiffre est faux.
Le plugin résout les deux pour vous. Commençons par là.
Scraper un produit Amazon en JSON
Le endpoint produit prend un ASIN (ou une URL de produit complète) et renvoie les champs qu’on veut vraiment : titre, marque, prix et devise, prix catalogue et remise, disponibilité, note, nombre d’avis, vendeur, caractéristiques en puces, catégories et images.
curl -X POST "https://api.scrapeunblocker.com/marketplace/amazon-product?asin=B0BSHF7WHW&marketplace=amazon.com" \
-H "x-scrapeunblocker-key: YOUR_API_KEY"
{
"asin": "B0BSHF7WHW",
"title": "Apple 2023 MacBook Pro Laptop M2 Pro chip",
"brand": "Apple",
"price": 1999.00,
"currency": "USD",
"listPrice": 2499.00,
"savingsPercent": 20,
"availability": "In Stock",
"inStock": true,
"rating": 4.7,
"reviewCount": 386,
"images": ["https://m.media-amazon.com/images/I/61fd2oCrvyL.jpg"]
}
Remarquez que la devise est USD, pas ce que l’IP de sortie s’est trouvée être. C’est tout l’intérêt : proxy_country prend par défaut le pays d’origine du marché - amazon.com vers US, amazon.de vers DE, amazon.co.uk vers GB - et la requête est fixée à une sortie ISP dans ce pays. Le prix est dans la devise que vos utilisateurs attendent, sans rien à configurer. Si vous voulez une région de livraison précise, passez proxy_country vous-même.
Rechercher sur Amazon par mot-clé
Le endpoint de recherche prend un mot-clé et renvoie les cartes de résultats - ASIN, titre, prix, prix catalogue, note, nombre d’avis, une URL de produit propre et les indicateurs sponsorisé / Prime. C’est la moitié découverte : rechercher pour obtenir des ASIN, puis récupérer le détail complet de chacun via le endpoint produit.
import requests
BASE = "https://api.scrapeunblocker.com/marketplace"
HEAD = {"x-scrapeunblocker-key": "YOUR_API_KEY"}
# Trouver des produits, du moins cher au plus cher
search = requests.post(
f"{BASE}/amazon-search",
params={"keyword": "wireless headphones", "sort": "price_asc"},
headers=HEAD, timeout=180,
).json()
for card in search["results"][:5]:
print(card["asin"], card["price"], card["currency"], card["rating"])
# Puis récupérer le produit complet du moins cher
top = search["results"][0]["asin"]
product = requests.post(
f"{BASE}/amazon-product",
params={"asin": top},
headers=HEAD, timeout=180,
).json()
print(product["title"], product["priceRaw"], product["availability"])
Vous pouvez filtrer avec min_price / max_price, trier par price_asc, price_desc, avg_review ou newest, et paginer avec page. Certaines cartes reviennent avec price: null - c’est Amazon qui diffère le prix sur la page de recherche, ou un article qui n’affiche que des options d’achat. Ces cartes restent dans la liste au lieu d’être supprimées, pour que vous voyiez toujours la page complète.
Avec un SDK
Chaque SDK officiel expose les deux méthodes, vous ne construisez donc pas la requête vous-même :
// Node.js
const product = await su.amazonProduct({ asin: "B0BSHF7WHW" });
const results = await su.amazonSearch("wireless headphones", { sort: "price_asc" });
# Python
product = su.amazon_product(asin="B0BSHF7WHW")
results = su.amazon_search("wireless headphones", sort="price_asc")
Ruby (amazon_search) et PHP (amazonSearch) ont la même paire. Tous fixent la sortie au pays du marché, la devise est donc gérée de la même façon.
Quand vous avez besoin d’échelle : un spider dans le cloud
Le plugin est le bon outil pour une fiche produit, une recherche, une vérification de prix, un tableau de bord qui rafraîchit quelques milliers de SKU. Quand vous passez à des centaines de milliers ou des millions de pages selon un planning - une catégorie entière suivie chaque jour, le catalogue complet d’un concurrent, l’historique des prix sur chaque marché - vous voulez un crawler, pas une boucle d’appels. C’est à ça que sert le spider cloud.
Il fait tourner votre propre projet Scrapy sur notre infrastructure, et l’important pour Amazon est que chaque requête passe déjà par la même API anti-bot que le plugin. Vous écrivez du Scrapy ordinaire - spiders, items, pipelines - et le mur anti-bot et la rotation des sorties sont gérés en dessous. Vous ne construisez pas de gestion de proxies, de logique de réessai ni de fingerprinting ; vous écrivez le parsing.
Un spider de prix Amazon minimal ressemble à n’importe quel autre spider Scrapy :
import scrapy
class AmazonPriceSpider(scrapy.Spider):
name = "amazon_prices"
def start_requests(self):
for asin in self.settings.get("ASINS", []):
yield scrapy.Request(
f"https://www.amazon.com/dp/{asin}",
meta={"asin": asin},
)
def parse(self, response):
price = response.css("#corePriceDisplay_desktop_feature_div "
".a-price-whole::text").get()
yield {
"asin": response.meta["asin"],
"title": response.css("#productTitle::text").get(default="").strip(),
"price": price,
"scraped_at": self.crawler.stats.get_value("start_time"),
}
Vous le déployez avec une commande depuis la racine du projet :
su-cloud deploy --notes "amazon price spider"
Le moyen le plus rapide d’y arriver est notre template starter Spider Cloud sur GitHub - un projet Scrapy prêt à l’emploi avec un spider d’exemple fonctionnel et tout le flux deploy -> run -> lecture de vos données déjà câblé. Cliquez sur Use this template, ajoutez votre token, et vous aurez un spider qui tourne dans le cloud en quelques minutes ; ensuite, remplacez l’exemple par votre spider Amazon.
À partir de là, vous achetez le parallélisme dont vous avez besoin, vous le mettez sur un planning (quotidien, horaire) et vous lisez les items en JSON pendant que le job tourne encore. Jobs, logs, compteurs d’items en direct et statistiques sont tous dans le tableau de bord. Le spider cloud est notre propre équivalent d’un service Scrapy hébergé, avec la couche anti-bot intégrée plutôt que rajoutée - la même couche, que vous appeliez le plugin ou que vous fassiez tourner un spider au travers.
Lequel choisir ?
- Un produit, une recherche, une vérification de prix, un tableau de bord modeste - le plugin. Un appel, du JSON en retour, la bonne devise, aucune infrastructure.
- Un catalogue entier, une catégorie suivie selon un planning, un historique de prix sur des millions de pages - un spider Scrapy dans le spider cloud. Vous écrivez le crawl ; nous gérons le blocage et l’échelle.
Les deux lisent les mêmes pages qu’un acheteur voit, avec votre clé ScrapeUnblocker et rien d’autre - pas de compte Selling Partner, pas d’approbation de la Product Advertising API, pas de lien d’affiliation. Commencez avec le plugin dans le tableau de bord et passez au cloud quand le volume l’exige.
Essayez ScrapeUnblocker gratuitement
Taux de réussite de plus de 95 % · à partir de 0,55 € pour 1 000 appels · 500 requêtes gratuites à l'inscription.