Las reseñas de productos de Amazon son una rica fuente de datos sobre la opinión de los clientes, señales de mejora de productos e inteligencia competitiva. La eliminación directa de reseñas de Amazon no es confiable debido a la agresiva detección de bots y los desafíos de CAPTCHA. La API de Scavio proporciona un punto final de reseñas que devuelve datos de reseñas estructurados para cualquier ASIN, incluida la calificación de estrellas, el título de la reseña, el cuerpo de la reseña, el nombre del revisor, la fecha y el estado de la compra verificada. Este tutorial muestra cómo obtener reseñas, filtrar por calificación y preparar datos para el análisis de opiniones.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Un ASIN de Amazon para buscar reseñas
Guia paso a paso
Paso 1: Obtener reseñas de un producto ASIN
PUBLICAR en el punto final de Scavio Amazon con las reseñas de acciones y su ASIN. La respuesta incluye una serie de reseñas.
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", [])Paso 2: Filtrar por calificación de estrellas
Segmente las reseñas por calificación para analizar los comentarios positivos y negativos por separado.
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)Paso 3: Extraer texto de revisión de PNL
Cree una lista de organismos de revisión para realizar aportaciones a un modelo de análisis de opiniones o un canal de extracción de temas.
texts = [r["body"] for r in reviews if r.get("body")]
print(f"Collected {len(texts)} review texts for NLP")
print(texts[0][:200])Paso 4: Calcular la distribución de calificaciones
Cuente las reseñas por calificación de estrellas para comprender la distribución general del sentimiento sobre el producto.
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")Ejemplo en 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)Ejemplo en 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);Salida esperada
{
"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
}
]
}