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

如何用rvest结合XPath实现网页爬虫缺失值填充NA?

解决用XPath实现rvest缺失值填充NA的问题

你遇到的核心问题是XPath路径的相对/绝对写法错误——你用了以/开头的绝对路径,这会从整个HTML文档的根节点开始查找,而不是从当前遍历的article节点下查找子元素,所以才会出现不符合预期的结果。

修正后的代码

library(rvest)
library(purrr)

xx <- read_html("https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page=14")
xx %>% 
  html_nodes(xpath = "/html/body/main/section[2]/div/article") %>% 
  map_df(~list(
    title = html_nodes(.x, xpath = "./header/h3/a") %>% 
      html_text() %>% 
      {if(length(.) == 0) NA else .},
    length = html_nodes(.x, xpath = "./a/time") %>% 
      html_text() %>% 
      {if(length(.) == 0) NA else .}
  ))

关键说明

  • 把XPath路径开头的/改成./,表示从当前节点(也就是每个article元素)开始查找子元素,这和你原来用CSS选择器的上下文完全一致。你也可以省略./直接写header/h3/a,因为在html_nodes(.x, xpath = ...)的调用中,默认就是相对当前节点的上下文。
  • 缺失值填充的逻辑和你原来用CSS的写法完全一致,保持{if(length(.) == 0) NA else .}即可,确保当某个节点不存在时,返回NA而不是空值。

这样修改后,就能实现和原来CSS选择器版本完全相同的效果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:54