我正在用nokogiri这样抓网页:
doc = Nokogiri::HTML(File.read(html))
doc.each do |node|
case node.name
when 'h1'
Puts node.text
when 'h2'
puts node.text
when 'h3'
puts node.text
when 'h4'
puts node.text
when 'h5'
puts node.text
end
end
有很多h5的。我不想全部列出它们,而是将它们组合在一起,只显示它们各自h4下面的第一个和最后一个。
答案 0 :(得分:0)
您可以定义一个标志来检测它是否是第一个fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
...
}
条目。
如果是第一个,则打印文本。然后将文本存储在变量中以便稍后使用。
如果级别从h5重置,则必须写入最后一个节点文本。
最后,您必须编写最后一个节点文本。
这样的事情:
h5
如果只有一个,则此代码将重复h5文本。但是根据您的描述,您的数据并非如此。
免责声明:未经测试的代码,缺少测试html;)
如果用计数器替换布尔标志,那么你也可以用一个h5节点捕获边缘情况。
示例:
doc = Nokogiri::HTML(File.read(html))
first_flag = true
last_h5 = nil
doc.each do |node|
#there was a h5 and now we have new version
if first_flag == false and node.name != 'h5'
puts last_h5
first_flag = true
end
case node.name
when 'h1'
puts node.text
when 'h2'
puts node.text
when 'h3'
puts node.text
when 'h4'
puts node.text
when 'h5'
puts node.text if first_flag
first_flag = false
last_h5 = node.text
end
end
#Write the last entry
if first_flag == false and last_h5
puts last_h5
end