Extraiga reseñas de empresas de Google a través de una API SERP buscando el nombre de una empresa y analizando el panel del gráfico de conocimiento que contiene calificaciones de estrellas, recuentos de reseñas y fragmentos de reseñas individuales. La extracción directa de Google Maps requiere automatización del navegador, rotación de proxy y mantenimiento constante del selector. Una API SERP devuelve los mismos datos de revisión que JSON estructurado desde una única solicitud POST. Este tutorial extrae reseñas de cualquier negocio y compara el enfoque con el scraping directo.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Un nombre comercial para buscar
Guia paso a paso
Paso 1: Buscar el negocio
Consulte Google a través de Scavio utilizando el nombre y la ubicación de la empresa para activar el panel del gráfico de conocimiento.
import os, requests, json
API_KEY = os.environ['SCAVIO_API_KEY']
def search_business(name: str, location: str = '') -> dict:
query = f'{name} {location} reviews' if location else f'{name} reviews'
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
resp.raise_for_status()
return resp.json()
data = search_business('Starbucks', 'Times Square New York')
print(f'Keys in response: {list(data.keys())}')Paso 2: Extraer reseñas de gráficos de conocimiento
Analice la sección del gráfico de conocimiento de la respuesta para extraer la calificación general, el recuento de reseñas y los fragmentos de reseñas.
def extract_reviews(data: dict) -> dict:
kg = data.get('knowledge_graph', {})
reviews_data = {
'name': kg.get('title', kg.get('name', '')),
'rating': kg.get('rating', ''),
'review_count': kg.get('reviews', kg.get('review_count', '')),
'type': kg.get('type', ''),
'address': kg.get('address', ''),
}
# Extract individual review snippets if available
reviews = kg.get('reviews', kg.get('user_reviews', []))
if isinstance(reviews, list):
reviews_data['snippets'] = [{
'text': r.get('text', r.get('snippet', '')),
'rating': r.get('rating', ''),
'author': r.get('author', ''),
} for r in reviews[:5]]
return reviews_data
reviews = extract_reviews(data)
print(json.dumps(reviews, indent=2))Paso 3: Analizar resultados orgánicos para páginas de revisión
Consulte también los resultados orgánicos para ver las páginas de agregación de reseñas que contienen datos de reseñas adicionales.
def extract_review_links(data: dict) -> list:
results = data.get('organic_results', [])
review_links = []
review_signals = ['review', 'rating', 'stars', 'feedback', 'testimonial']
for r in results:
text = f"{r.get('title', '')} {r.get('snippet', '')}".lower()
if any(signal in text for signal in review_signals):
review_links.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', '')[:200],
})
return review_links
links = extract_review_links(data)
for link in links:
print(f"{link['title'][:50]}: {link['url']}")Paso 4: Comparar con raspado directo
Resalte las diferencias entre la extracción de reseñas basada en API y el scraping directo de Google Maps en términos de confiabilidad y costo.
def review_report(business: str, location: str = '') -> dict:
data = search_business(business, location)
reviews = extract_reviews(data)
review_links = extract_review_links(data)
report = {
'business': reviews.get('name', business),
'rating': reviews.get('rating', 'N/A'),
'review_count': reviews.get('review_count', 'N/A'),
'review_snippets': len(reviews.get('snippets', [])),
'review_pages_found': len(review_links),
'method': 'SERP API (1 API call, structured JSON)',
'alternative': 'Direct scraping (browser + proxy + selector maintenance)',
'api_cost': '$0.005 per query',
}
print(f"{report['business']}: {report['rating']} ({report['review_count']} reviews)")
print(f"Snippets: {report['review_snippets']}, Review pages: {report['review_pages_found']}")
return report
review_report('Blue Bottle Coffee', 'San Francisco')Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def get_reviews(business, location=''):
query = f'{business} {location} reviews'.strip()
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}).json()
kg = data.get('knowledge_graph', {})
return {'name': kg.get('title', ''), 'rating': kg.get('rating', ''), 'reviews': kg.get('reviews', '')}
print(get_reviews('Blue Bottle Coffee', 'San Francisco'))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function getReviews(business, location = '') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${business} ${location} reviews`})
});
const kg = (await r.json()).knowledge_graph || {};
return {name: kg.title, rating: kg.rating, reviews: kg.reviews};
}
getReviews('Blue Bottle Coffee', 'San Francisco').then(console.log);Salida esperada
Business review data extracted from Google knowledge graph via SERP API, including rating, review count, and individual review snippets without browser scraping.