刮擦一流的节点,但不使用rvest的子级

时间:2019-06-06 20:55:14

标签: r rvest

对此有很多疑问,但是找不到我想要的答案。

希望使用类.quoteText提取特定的文本,该类对我的代码有效,但是还提取.quoteText内的所有子节点:

url <- "https://www.goodreads.com/quotes/search?page=1&q=simone+de+beauvoir&utf8=%E2%9C%93"

quote_text <- function(html){

  path <- read_html(html)

  path %>% 
    html_nodes(".quoteText") %>%
    html_text(trim = TRUE) %>% 
    str_trim(side = "both") %>% 
    unlist()
}

quote_text(url)

结果包含文本,但也包含每个子节点!

enter image description here

这是检查器工具显示的内容。我要查找的是突出显示的行,而不是同一代码下的子行。

必须有一种方法只能刮掉那条线,不是吗?还是我需要收集该行,并用str_extract /正则表达式删除其余行?

enter image description here

1 个答案:

答案 0 :(得分:2)

看起来CSS选择器不仅仅支持获取所选节点的立即文本,而xpath却支持。我们可以调整您的功能,以仅使用

提取文本
quote_text <- function(html){

  path <- read_html(html)

  path %>% 
    html_nodes(xpath=paste(selectr::css_to_xpath(".quoteText"), "/text()") %>%
    html_text(trim = TRUE) %>% 
    str_trim(side = "both") %>% 
    unlist()
}

我将CSS选择器转换为xpath一个,然后附加“ / text()”以获取元素的文本节点。