【问题标题】:Scrape first class node but not child using rvest使用 rvest 刮取第一类节点但不是子节点
【发布时间】:2019-06-07 05:10:59
【问题描述】:

对此有很多问题,但看不到我正在寻找的答案。

希望提取特定文本,使用我的代码可以使用的 .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)

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

这就是检查器工具带来的。我正在寻找的是突出显示的行,而不是同一代码下的子行。

一定有办法只刮掉那条线,不是吗?还是我需要收集该行,然后用str_extract / regex 删除其余行?

【问题讨论】:

    标签: r rvest


    【解决方案1】:

    看起来 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()”以获取元素的文本节点。

    【讨论】:

    • 谢谢你,就像一个魅力。我将使用相同的技术来保留作品的标题和文本。干杯!
    • 查看不同的 .smallText 节点(“喜欢”),我可以再次使用上面的 xpath= 提取喜欢的数字,但它包括所有。如何选择特定节点?我添加了 #html_nodes(xpath = paste(selectr::css_to_xpath(".smallText"), ".a")) %>%
    • 评论不是提出新问题的好地方。如果您遇到不同的问题,您可以开始新帖子。如果您不尝试提取直接文本,那么您可能不需要css_to_xpath 的东西。也许path %&gt;% html_nodes("a.smallText") %&gt;% html_text() 是您要找的?
    • 哎呀,你的建议奏效了。问题就在那里,如果你愿意,我可以给它一个 ^(或者只是关闭它)
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多