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

rvest::html_elements嵌套调用不遵循节点集限制是否为预期行为?

这是XPath语法的标准行为,并非rvest的漏洞。

XPath中以//开头的表达式属于绝对路径查询,无论你在哪个节点集上执行查询,都会默认从整个HTML文档的根节点开始匹配元素,所以你从筛选出的div节点集上查询//p时,依然会返回整个文档内所有的p元素,才会出现超出预期的结果。

如果要限定仅在当前节点集的范围内检索后代元素,需要使用相对路径,在//前加.指代当前节点上下文即可,修改后的代码如下:

html %>% 
  html_elements(xpath="//div") %>% 
  html_elements(xpath = ".//p") %>% 
  html_text()
# 运行输出:[1] "This is a nested paragraph"

补充几个常用的XPath相对路径规则,方便后续使用:

  • 直接写标签名,如xpath = "p":仅匹配当前节点的直接子级p元素
  • xpath = ".//p":匹配当前节点所有后代层级(子、孙、更深层级)的p元素
  • xpath = "./p":效果等价于直接写p,仅匹配直接子级p元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:27:04