La investigación de ajuste del mercado de productos solía requerir la contratación de un profesional independiente para leer cientos de reseñas. Un agente de minería de reseñas hace esto en minutos. Este tutorial crea uno que recopila reseñas de Amazon, Walmart y Google para una categoría y luego agrupa las quejas en temas críticos.
Requisitos previos
- Python 3.10+
- Una clave API de Scavio
- Una credencial LLM para agrupación
- Una categoría de producto
Guia paso a paso
Paso 1: Extraer reseñas de Amazon
Los más vendidos en la categoría.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def amazon_reviews(category):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'amazon', 'query': category, 'marketplace': 'US'})
asins = [p['asin'] for p in r.json().get('products', [])[:10]]
revs = []
for a in asins:
rv = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'amazon_reviews', 'query': a}).json()
revs += rv.get('reviews', [])
return revsPaso 2: Extraiga reseñas de Walmart para validación cruzada
Misma categoría, diferente plataforma.
def walmart_reviews(category):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'walmart', 'query': category})
return r.json().get('products', [])[:10]Paso 3: Filtrar por reseñas negativas
Las reseñas de 1 a 3 estrellas contienen el dolor.
def negatives(reviews):
return [r for r in reviews if r.get('rating', 5) <= 3]Paso 4: Puntos débiles del clúster con un LLM
Agrupe los textos de revisión por temas.
def cluster(reviews, llm):
prompt = 'Cluster these reviews into 5 pain-point themes:\n' + '\n'.join(r['text'] for r in reviews[:100])
return llm.generate(prompt)Paso 5: Informe de salida
Los 5 temas principales con citas representativas.
def report(themes):
for t in themes:
print(f'{t["name"]} ({t["count"]}): {t["quote"]}')Ejemplo en Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def mine(category):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'amazon', 'query': category, 'marketplace': 'US'})
reviews = []
for p in r.json().get('products', [])[:5]:
rv = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'amazon_reviews', 'query': p['asin']}).json()
reviews += [x for x in rv.get('reviews', []) if x.get('rating', 5) <= 3]
return reviews
print(len(mine('standing desk')))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function mine(category) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'amazon', query: category, marketplace: 'US' })
});
const products = (await r.json()).products?.slice(0, 5) || [];
const reviews = [];
for (const p of products) {
const rv = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'amazon_reviews', query: p.asin })
});
reviews.push(...((await rv.json()).reviews || []).filter(x => x.rating <= 3));
}
return reviews;
}Salida esperada
Top 5 pain-point themes for a category with representative quotes. Typical output for 'standing desk': wobble, assembly time, motor noise, price vs. feel, short cable.