【问题标题】:CSS selector Goodreads user ratingCSS 选择器 Goodreads 用户评分
【发布时间】:2020-01-03 02:58:07
【问题描述】:

网址:https://www.goodreads.com/book/show/27841061-nevernight 目标:提取个人用户评分

当我检查用户评分时,我看到了这一点。

<span class="staticStars notranslate" title="did not like it">

如果我可以提取标题,我可以映射评级。

rate_map = {'did not like it': 1,
'it was ok': 2,
'liked it': 3,
'really liked it': 4,
'it was amazing': 5}

url = 'https://www.goodreads.com/book/show/27841061-nevernight'
gr_list <- read_html(url)
gr_list %>%  html_node('.staticStars .notranslate') %>%  
  html_attr('title')

我得到的代码结果是“NA”。

谁能告诉我我做错了什么? 谢谢。

【问题讨论】:

标签: r web-scraping css-selectors rvest


【解决方案1】:

css 选择器.staticStars .notranslate 表示您正在寻找一个具有类notranslate 的节点嵌套在一个具有类staticStars 的节点中。也就是说,它会匹配这样的东西

<span class="staticStars"><span class="notranslate">foo</span></span>

如果要匹配具有两个类的节点,则需要确保选择器之间没有空格。你可以这样做

url <- 'https://www.goodreads.com/book/show/27841061-nevernight'
gr_list <- read_html(url)
gr_list %>%  html_nodes('.staticStars.notranslate') %>% 
  html_attr('title')

#  [1] NA                NA                "did not like it"
#  [4] "did not like it" "it was amazing"  "it was amazing" 
#  [7] "it was amazing"  "it was amazing"  "it was amazing" 
# [10] "did not like it" "it was amazing"  "really liked it"
# [13] "did not like it" "it was amazing"  "it was amazing" 
# [16] "it was amazing"  "did not like it" "it was amazing" 
# [19] "it was amazing"  "it was amazing"  "it was amazing" 
# [22] "it was amazing"  "it was amazing"  "it was amazing" 
# [25] "it was amazing"  "it was amazing"  "it was amazing" 
# [28] "it was amazing"  "it was amazing"  "liked it" 

【讨论】:

  • 那是我的错误。输出仍然是 NA
  • 嗯,第一个节点没有标题。如果您将html_node 更改为html_nodes,您将获得所有节点,并且您会看到大多数节点都有标题。
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2020-12-14
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 2015-09-11
  • 2014-08-28
相关资源
最近更新 更多