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

如何使用Nokogiri按原文档顺序获取p与h2元素的文本?

问题:Nokogiri按文档原始顺序获取p和h2标签文本

我正在尝试用Nokogiri解析HTML文件,当前执行代码如下:

html_file = URI.open(url).read
html_doc = Nokogiri::HTML(html_file)
puts html_doc.search("p", "h2").map(&:text)

执行后会先返回所有p标签的文本,再返回所有h2标签的文本,无法保持它们在原HTML文档中的出现顺序。我尝试了下面的代码,但没有效果:

puts html_doc.search("p" || "h2").map(&:text)
解决方案

你需要用CSS选择器的逗号语法来同时匹配p和h2标签,这样Nokogiri会按照元素在文档中的原始顺序返回结果。

原因在于:

  • search("p", "h2")会先查询所有p标签,再查询所有h2标签,最后合并两个结果集,所以顺序是先全p后全h2
  • "p" || "h2"是Ruby的逻辑或运算,结果只会是"p",相当于只查询p标签,自然达不到预期

正确代码如下:

html_file = URI.open(url).read
html_doc = Nokogiri::HTML(html_file)
puts html_doc.search("p, h2").map(&:text)

这样就能按元素在原HTML文档中的出现顺序,依次输出p和h2标签的文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:15:47