2013-03-09 67 views
0

我想解析这个与Nokogiri的HTML,但我卡住了。解析一些棘手的HTML与nokogiri

<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>被发现时。如果有人得到线索,我是开放的。

+1

谢谢@sawa的干净,抱歉;) – Erowlin 2013-03-09 21:59:19

回答

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 
+0

哇,它的工作。谢谢。 但我想了解这个语法:// b [text()='Tél。 :'] 没有得到[文字()='电话。 :'] – Erowlin 2013-03-09 22:16:28

+1

'[text()='something']'意思是“文本内容等于'something' – 2013-03-09 22:18:04

+0

简单...重读所有Noko文档。再次感谢你 – Erowlin 2013-03-09 22:19:49

1

最简单的办法:

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

如果你想确保它的b和下一局之间的一些原因:

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

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

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