You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言rvest爬取Goodreads作者、评分及评论数问题求助

问题分析与解决方法

为什么只获取到J.K. Rowling?

主要有两个核心原因:

  • 你用了html_nodes()(复数选择器)定位唯一的div#bookAuthors元素,虽然不会报错,但用html_element()(单数选择器)更贴合场景,能避免后续处理的潜在问题。
  • 旧版html_text()在处理嵌套元素文本时,没法很好地合并子节点内容(比如插画师的文本被放在子span标签里)。rvest 1.0.0+版本的html_text2()更智能,能保留元素间的空格和标点,正确拼接所有文本。

调整后的作者爬取代码:

url <- 'https://www.goodreads.com/book/show/3.Harry_Potter_and_the_Sorcerer_s_Stone?from_search=true&from_srp=true&qid=6Kzw6iKKur&rank=1'
library(rvest)
library(stringr)

authors <- read_html(url) %>% 
  html_element('div#bookAuthors') %>%  # 单数选择器定位唯一元素
  html_text2() %>%  # 更精准的文本提取
  trimws()  # 去除前后多余空格

print(authors)
# 输出:"J.K. Rowling, Mary GrandPré (Illustrator)"

如何获取评分数量和评论数量?

Goodreads给评分、评论数这类核心数据加了data-testid属性,用这个属性定位比类名更稳定(类名可能随页面样式更新变化)。具体实现如下:

获取评分数量

ratings_count <- read_html(url) %>%
  html_element('span[data-testid="ratingsCount"]') %>%
  html_text() %>%
  str_remove_all(",") %>%  # 移除数字里的逗号分隔符
  as.numeric()

print(ratings_count)
# 输出类似:8898507

获取评论数量

reviews_count <- read_html(url) %>%
  html_element('span[data-testid="reviewsCount"]') %>%
  html_text() %>%
  str_remove_all(",") %>%
  as.numeric()

print(reviews_count)
# 输出类似:1234567

额外提示

  • 爬取Goodreads时别太频繁请求,避免被封IP,可以加个请求间隔(比如Sys.sleep(2))。
  • 页面结构可能随时间变化,如果上述选择器失效,直接用浏览器F12开发者工具看最新元素结构,调整选择器就行。

内容的提问来源于stack exchange,提问作者Christina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:49:10