Tony Wang6 min de lecturaCómo hacer scraping de Goodreads en 2026 (API y Python)
Scrapea Goodreads en 2026 — books, ratings, reviews, autores y listas por DIY, no-code o API estructurada, ya que Amazon retiró su API.
La forma más rápida de scrapear Goodreads en 2026 es llamar a una API estructurada que devuelve JSON normalizado — detalle de books, ratings, reviews, perfiles de autor y rankings de listas — en lugar de parsear el HTML de Goodreads tú mismo. Esto pesa más aquí que en la mayoría de plataformas de esta serie: Amazon cerró la Goodreads Developer API a nuevos solicitantes en diciembre de 2020, así que no existe una vía oficial, de pago o enterprise para volver a entrar. Esta guía cubre DIY, no-code y una API estructurada, además de la realidad legal por delante.
¿Por qué scrapear Goodreads?
Goodreads es el dataset público de ratings y reviews de books más grande de la web, que alimenta:
- Enriquecimiento de catálogo de books — asociar title canónico, autor, rating y datos de género a una app de lectura o a un dataset interno.
- Recomendación y descubrimiento — construir features de "libros similares" o de recomendación por género a partir de datos de ratings y estanterías.
- Investigación de recepción — seguir cómo se mueven el rating promedio y el volumen de reviews de un book tras su lanzamiento o una adaptación mediática.
- Seguimiento de autor y bibliografía — seguir el catálogo completo, citas y el sentimiento de los lectores hacia un autor a lo largo del tiempo.
- Monitoreo de listas y tendencias — observar los rankings de Listopia y las estanterías por género para ver qué están leyendo realmente los lectores.
¿Es legal scrapear Goodreads?
Opción 1: DIY en Python (y por qué se rompe)
Como no hay API, un enfoque DIY significa parsear directamente las páginas de books, autores y reviews renderizadas por el servidor de Goodreads:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.goodreads.com/book/show/2767052-the-hunger-games",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Rating, review count, and description live in a mix of embedded JSON
# and page markup that shifts across Goodreads' redesigns
Funciona en la demo y luego se rompe:
- El robots.txt bloquea activamente rutas clave. Las reglas del user-agent por defecto de Goodreads prohíben
/search,/review/show,/apiy/work, entre otras — un crawler ingenuo que sigue la navegación normal tropieza con ellas rápido. - Sin markup estable, y sin API a la que recurrir. La estructura de páginas de Goodreads cambia con cada rediseño, y a diferencia de la mayoría de plataformas de esta serie no hay un endpoint oficial al que cambiar cuando el scraping se rompe.
- Anti-bot a escala Amazon. Goodreads pertenece a Amazon desde 2013 y vive detrás de infraestructura a nivel Amazon — las IPs de datacenter y los clientes ingenuos reciben rate-limit o bloqueo.
- Reviews y editions se paginan por separado. La lista completa de reviews de un book y su lista completa de editions viven cada una en sus propias subpáginas paginadas, así que una sola carga de página nunca te da un registro completo.
Opción 2: Herramientas no-code
Algunos marketplaces de scrapers no-code y extensiones de navegador ofrecen templates predefinidos de Goodreads para exportaciones puntuales — útiles para una sola lista de lectura o un lote pequeño de titles. Son un parche razonable para un proyecto hobby, pero son incómodas de correr en un schedule, no exponen un contrato de datos limpio, y cargan con la misma exposición a los ToS y al anti-bot que un script DIY, porque scrapean las mismas páginas por debajo.
Opción 3: Una API estructurada de Goodreads
Para un workflow repetible y con permisos bien delimitados, una Goodreads scraping API devuelve JSON normalizado sin páginas que parsear ni un programa de developers muerto que esperar. Busca un book para obtener su id:
curl "https://api.crawlora.net/api/v1/goodreads/search?q=hunger+games" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "hunger games",
"results": [
{
"id": "2767052",
"title": "The Hunger Games",
"author": "Suzanne Collins",
"author_id": "153394",
"average_rating": 4.35,
"ratings_count": 10177818,
"pages": 374,
"uri": "https://www.goodreads.com/book/show/2767052-the-hunger-games"
}
]
}
}
Luego resuelve el id y pide detalle del book, reviews y datos del autor en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/goodreads"
hits = requests.get(f"{base}/search", headers=h, params={"q": "hunger games"}).json()["data"]["results"]
book_id, author_id = hits[0]["id"], hits[0]["author_id"]
book = requests.get(f"{base}/book/{book_id}", headers=h).json()["data"]
reviews = requests.get(f"{base}/book/{book_id}/reviews", headers=h, params={"limit": 20}).json()["data"]
author = requests.get(f"{base}/author/{author_id}", headers=h).json()["data"]
El detalle del book llega como JSON normalizado (campos reales — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"id": "2767052",
"title": "The Hunger Games",
"series": "The Hunger Games #1",
"genres": ["Young Adult", "Dystopia", "Fiction"],
"pages": 374,
"publisher": "Scholastic Press",
"publication_date": "2008-10-14",
"isbn13": "9780439023481",
"rating": {
"average": 4.35,
"ratings_count": 10177796,
"reviews_count": 272857,
"distribution": { "one_star": 133619, "five_star": 5602217 }
}
}
}
Los perfiles de autor devuelven bio, géneros y rating agregado; las bibliografías del autor, sus citas y las listas Listopia siguen todas la misma forma: entra un id, sale JSON normalizado:
{
"data": {
"id": "153394",
"name": "Suzanne Collins",
"birth_date": "August 11, 1962",
"genres": ["Fiction", "Science Fiction & Fantasy", "Young Adult"],
"average_rating": 4.3,
"ratings_count": 21497265
}
}
/goodreads/author/{id}/books pagina por la bibliografía completa de un autor, /goodreads/book/{id}/editions devuelve cada edition de una obra (formato, editorial, ISBN, fecha de publicación), /goodreads/genre/{name} devuelve los books top de una estantería de género, y /goodreads/list/{id} devuelve un ranking Listopia. Guarda una fila por book (o por review, por edition) y vuelve a correrlo con un schedule.
Qué puedes recolectar
Metadata pública de books, autores y listas: resultados de búsqueda (id, title, autor, rating, número de páginas); detalle del book (descripción, series, géneros, formato, editorial, fecha de publicación, ISBN/ISBN13, promedio y distribución de rating); editions del book en distintos formatos; reviews de books visibles públicamente (reviewer, rating, texto, conteos de likes/comments); perfiles de autor (bio, fecha de nacimiento, géneros, rating agregado); la lista completa de books de un autor; citas del autor; rankings de estanterías por género; y rankings de listas Listopia. Solo datos públicos — nada de estanterías privadas, progreso de lectura ni información a nivel de cuenta.
Limitaciones y desafíos comunes
- No existe fallback de API. A diferencia de la mayoría de plataformas de esta serie, no hay un endpoint oficial al que cambiar si un enfoque de scraping se rompe — Goodreads retiró su programa de developers en 2020 y no lo ha reabierto.
- El robots.txt y los ToS restringen ambos el acceso automatizado. Limita cualquier proyecto a páginas públicas de books, ratings y reviews, evita las rutas prohibidas y nunca republiques en bloque el texto completo de las reviews.
- Anti-bot a escala Amazon. Espera rate-limiting y bloqueos ante requests ingenuos o desde IPs de datacenter.
- Fan-out por book. Las reviews completas y las editions se paginan cada una por separado, así que un registro completo de un book requiere varias llamadas, no una.
- Solo datos públicos. Esto recolecta lo que Goodreads ya muestra públicamente — nunca una forma de saltarte un muro de login o de acceder a datos de estanterías privadas.
Dónde se usa esto
- Catálogos de apps de lectura — asociar title canónico, autor y datos de rating a un producto de descubrimiento o seguimiento de books.
- Motores de recomendación — impulsar el descubrimiento de "libros similares" y por género a partir de patrones de ratings y estanterías.
- Investigación editorial y de recepción — seguir tendencias de rating y reviews de un title en torno a su lanzamiento o a noticias de adaptación.
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de search, book y author en el Playground, revisa el schema en los API docs y consulta el pricing. Goodreads es el patrón de "obra creativa + reviews públicas" para books — la misma forma que IMDb cubre para cine y TV, y Discogs cubre para música. Si estás siguiendo la recepción más allá de los books, how to scrape Trustpilot reviews cubre el mismo patrón de rating/review para negocios. El resto del catálogo de books y audio también está cubierto — how to scrape Apple Books para ebooks y audiobooks, y how to scrape manga data para la misma metadata de title en el lado del manga. Ver también how to choose a web scraping API e is web scraping legal.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Cómo hago scraping de Goodreads?
Envía una consulta de búsqueda o un id de Goodreads a una API estructurada de Goodreads y recibe detalle del book, ratings, reviews, perfiles de autor y rankings de listas como JSON — sin login ni parseo de HTML.
¿Goodreads tiene una API pública?
No. Amazon dejó de emitir nuevas developer keys de la API de Goodreads el 8 de diciembre de 2020 y ha ido retirando el programa desde entonces — no existe ninguna vía legal y vigente hacia una API oficial de Goodreads, a ningún precio.
¿Es legal hacer scraping de Goodreads?
Los Terms of Use y el robots.txt de Goodreads restringen ambos la recolección automatizada. Como no existe una API oficial, la única opción programática es un scraping bien acotado a páginas públicas de books, ratings y reviews que respete esas restricciones; consigue permiso por escrito para uso comercial a gran escala.
¿Puedo obtener ratings y reviews de books de Goodreads?
Sí — el endpoint de detalle del book devuelve el rating promedio y la distribución completa de ratings, y el endpoint de reviews devuelve reviews visibles públicamente con reviewer, rating, texto y conteos de likes/comments.
¿Puedo scrapear la bibliografía completa de un autor de Goodreads?
Sí — el endpoint de books de autor pagina por cada book atribuido a un id de autor, junto con la bio del perfil, géneros y rating agregado.
¿Qué no obtengo al scrapear Goodreads?
Solo hay datos públicos disponibles — nada de estanterías privadas, progreso de lectura ni información a nivel de cuenta, y el texto completo de reviews nunca debería republicarse en bloque.
¿En qué se diferencia el scraping de Goodreads del de IMDb o Discogs?
Los tres siguen el mismo patrón de "obra creativa más reviews públicas" — IMDb para cine/TV, Discogs para música, Goodreads para books — pero Goodreads es único en esta serie porque desde 2020 no tiene ningún fallback de API oficial.