如何从HTML代码中提取:
<body>
<div class="div1">
<div class="div2">
<div class="div3">
<div class="div3.1">
<h2 class="notopgap">HEADER</h2>
<br>DONT WANT THIS TEXT
<br><a href='mailto:info@mylink.pt'>info@mylink.pt</a>
<br><h2>I WANT THIS TEXT</h2>
<br>TEXT: WANT THIS
<br>DONT WANT THIS
<a name='#lev3'></a>
<h2>FINALLY I WANT THIS TOO</h2><br>
<div class="div3.1.1">
BUNCH OF TEXT ...
以下文本:
WANT THIS TEXT
WANT THIS
FINALLY I WANT THIS TOO
和野村/鲁比在一起?
我可以在div和其他元素之间提取,但当我想要的文本的每个部分之间都没有div,只有br时,我该怎么做呢?
首先,您可以使用以下xpath:
doc = Nokogiri::HTML(html)
doc.xpath("//div[@class='div3.1']/h2[not(@class = 'notopgap')]").map(&:text)
这将与您要提取的两个<h2>
标记相匹配。提取另一个条目更为复杂。我的xpath功夫在这方面有所欠缺,因为它与你不想捕捉的文本处于同一水平。
我可能会退回到与文本匹配。
text = doc.xpath("//div[@class='div3.1']").text()
text.scan(/TEXT:(.*)n/).flatten
我更喜欢保持简单:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<body>
<div class="div1">
<div class="div2">
<div class="div3">
<div class="div3.1">
<h2 class="notopgap">HEADER</h2>
<br>DONT WANT THIS TEXT
<br><a href='mailto:info@mylink.pt'>info@mylink.pt</a>
<br><h2>I WANT THIS TEXT</h2>
<br>TEXT: WANT THIS
<br>DONT WANT THIS
<a name='#lev3'></a>
<h2>FINALLY I WANT THIS TOO</h2><br>
<div class="div3.1.1">
EOT
h2 = doc.search('h2')
h2[1].text # => "I WANT THIS TEXT"
doc.search('br')[3].next_sibling.text # => "TEXT: WANT THISn "
h2[2].text # => "FINALLY I WANT THIS TOO"
从这一点上,清理"TEXT: WANT THISn "
是很容易的。
我知道我会有多个点击,所以与其尝试使用XPath到达我想要的位置,一个简单的CSS会找到有问题的标签,然后我可以获取我想要的特定标签,并继续处理。