You need to enable JavaScript to run this app. 使用rvest选择无class或id属性div元素及组合调用异常解决
优惠活动
大模型
产品
解决方案
定价
更多

使用rvest选择无class或id属性div元素及组合调用异常解决

rvest 选中无class/id属性div节点的正确实现

链式调用返回空集的原因

你之前的链式写法返回空集,本质是对rvest中html_nodes()的匹配逻辑理解有误:当向html_nodes()传入已经提取完成的节点集时,函数会在这些节点的所有后代子节点中匹配选择器,而非对当前节点集本身的每个节点做条件过滤。
你第一步通过page %>% html_nodes("div:not([class])")得到的结果是:带id的tag div、两个无任何属性的div。这些div节点内部没有嵌套的div子节点,后续再调用html_nodes("div:not([id])")自然找不到匹配内容,返回空集。

可行的实现方案

  • 最简洁的写法是将两个过滤条件直接合并到单条CSS选择器中,在初始查询时完成双重判断,不需要分两次调用:
    page %>% html_nodes("div:not([class]):not([id])")
    
    这条选择器会直接选中同时满足「无class属性」、「无id属性」的div节点,正好排除前两个带属性的div。
  • 如果需要在已经提取完成的全量div节点集中做二次筛选,可以基于rvest的属性提取规则直接做向量过滤,不需要重复调用节点查找函数:
    # 先提取所有div节点
    all_divs <- page %>% html_nodes("div")
    # 筛选既无class也无id属性的节点
    target_divs <- all_divs[
      is.na(html_attr(all_divs, "class")) & 
      is.na(html_attr(all_divs, "id"))
    ]
    
    该方法的判断逻辑是:rvest中如果节点不存在对应属性,html_attr()会返回NA,利用这个特征做向量化匹配,不需要依赖额外第三方包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 00:45:04