用nokogiri解析一些棘手的HTML

时间:2013-03-09 21:45:41

标签: html ruby nokogiri

我正在尝试用Nokogiri解析这个HTML,但我被卡住了。

<b>Dudule Francis</b>
<br>
<b>Tél. : </b>
01 02 03 04 05
<br>
<b>Fax : </b>
10 90 80 70 60

我想提取第一个电话号码01 02 03 04 05。它位于</b><br>之间,且仅在<b>Tél. : </b>被发现时才会显示。如果有人得到了线索,我就会打开。

3 个答案:

答案 0 :(得分:3)

noko = Nokogiri::HTML(html_text)
noko.xpath("//b[text() = 'Tél. : ']").each do |b|
  puts b.next_sibling.content.strip
end
# 01 02 03 04 05

答案 1 :(得分:1)

简单方法:

doc.at('b[text()="Tél. : "]').next.text

如果由于某种原因你想确保它在b和下一个br之间:

doc.at('b[text()="Tél. : "] + br').previous.text

答案 2 :(得分:1)

我发现很多时候CSS很容易理解,虽然CSS本身通常不能查看节点的文本,迫使我们使用XPath,Nokogiri使用jQuery的扩展为我们提供了一些额外的帮助: / p>

doc.at('b:contains("Tél.")').next_sibling.text.strip
"01 02 03 04 05"