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

网页爬取:如何选择嵌套结构中无div子元素的底层div

如何选择嵌套结构中最底层的div(不含div子元素的div)

问题场景

爬取的网站HTML结构如下(无class/id):

<div>
  <div>
    <div>
      Some content
    </div>
  </div>
  <div>
    Other content
  </div>
</div>

使用doc.css('div div')选择时,嵌套的div会被重复匹配,调用doc.css('div div').map(&:text)会返回两次"Some content",无法获取唯一的最底层内容。

解决方案

要选择不包含div子元素的div(即最底层的目标div),可以用以下两种方法:

  • CSS选择器方案:使用:not(:has(div))伪类组合,直接过滤掉包含子div的容器:

    doc.css('div:not(:has(div))').map(&:text)
    

    该选择器会精准匹配所有没有div子元素的div,返回结果为["Some content", "Other content"],无重复内容。

  • XPath兼容方案:如果你的解析器不支持:has()伪类(如旧版Nokogiri),可以改用XPath表达式:

    doc.xpath('//div[not(div)]').map(&:text)
    

    效果与CSS方案完全一致,同样能选中最底层的目标div。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:32:36