Les avis de produits Amazon sont une source riche de données sur le sentiment des clients, de signaux d'amélioration des produits et de veille concurrentielle. Gratter directement les avis Amazon est peu fiable en raison de la détection agressive des bots et des défis CAPTCHA. L'API Scavio propose un endpoint reviews qui renvoie des données structurées d'avis pour tout ASIN, incluant la note en étoiles, le titre de l'avis, le corps de l'avis, le nom de l'évaluateur, la date et le statut d'achat vérifié. Ce tutoriel montre comment récupérer des avis, filtrer par note et préparer les données pour une analyse de sentiment.
Prérequis
- Python 3.8 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Un ASIN Amazon pour lequel récupérer les avis
Parcours
Étape 1: Récupérer les avis pour un ASIN de produit
Effectuez un POST vers l'endpoint Scavio Amazon avec l'action reviews et votre ASIN. La réponse inclut un tableau reviews.
def get_reviews(asin: str) -> list[dict]:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
response.raise_for_status()
return response.json().get("reviews", [])Étape 2: Filtrer par note en étoiles
Segmentez les avis par note pour analyser séparément les retours positifs et négatifs.
def filter_by_stars(reviews: list[dict], stars: int) -> list[dict]:
return [r for r in reviews if r.get("rating") == stars]
negative = filter_by_stars(reviews, 1) + filter_by_stars(reviews, 2)
positive = filter_by_stars(reviews, 4) + filter_by_stars(reviews, 5)Étape 3: Extraire le texte des avis pour le NLP
Construisez une liste des corps d'avis pour les fournir à un modèle d'analyse de sentiment ou à un pipeline d'extraction de sujets.
texts = [r["body"] for r in reviews if r.get("body")]
print(f"Collected {len(texts)} review texts for NLP")
print(texts[0][:200])Étape 4: Calculer la distribution des notes
Comptez les avis par note en étoiles pour comprendre la distribution globale du sentiment pour le produit.
from collections import Counter
distribution = Counter(r.get("rating") for r in reviews)
for stars in sorted(distribution):
print(f"{stars} star: {distribution[stars]} reviews")Exemple Python
import os
from collections import Counter
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def get_reviews(asin: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"})
r.raise_for_status()
return r.json().get("reviews", [])
def summarize(reviews: list[dict]) -> None:
dist = Counter(r.get("rating") for r in reviews)
for stars in sorted(dist, reverse=True):
print(f"{stars}*: {dist[stars]} reviews")
texts = [r["body"] for r in reviews if r.get("body")]
print(f"\n{len(texts)} reviews with text available for NLP")
if __name__ == "__main__":
reviews = get_reviews("B09G9FPHY6")
summarize(reviews)Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function getReviews(asin) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "amazon", query: asin, marketplace: "US" })
});
const data = await res.json();
return data.reviews || [];
}
async function main() {
const reviews = await getReviews("B09G9FPHY6");
const dist = reviews.reduce((acc, r) => {
acc[r.rating] = (acc[r.rating] || 0) + 1; return acc;
}, {});
Object.entries(dist).sort().reverse().forEach(([s, c]) => console.log(`${s}*: ${c}`));
}
main().catch(console.error);Sortie attendue
{
"reviews": [
{
"title": "Great sound quality",
"body": "The bass response is excellent and the ANC works well...",
"rating": 5,
"reviewer": "John D.",
"date": "2026-02-14",
"verified_purchase": true
},
{
"title": "Good but battery life could be better",
"body": "I love the comfort and sound but 20 hours isn't enough...",
"rating": 3,
"reviewer": "Sarah M.",
"date": "2026-01-28",
"verified_purchase": true
}
]
}