Ruby 如何使用<;提取文本;br>;分隔符?
如何从该HTML代码中提取:Ruby 如何使用<;提取文本;br>;分隔符?,ruby,parsing,nokogiri,Ruby,Parsing,Nokogiri,如何从该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
<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 ...
和Nokogiri/Ruby一起
我可以在div和其他元素之间进行提取,但是当我想要的文本的每个部分之间没有div,但只有br时,如何进行提取?首先,您可以使用以下xpath:
doc = Nokogiri::HTML(html)
doc.xpath("//div[@class='div3.1']/h2[not(@class = 'notopgap')]").map(&:text)
它将匹配要提取的两个
标记。提取另一个条目更为复杂。我的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 THIS\n "
h2[2].text # => "FINALLY I WANT THIS TOO"
需要“nokogiri”
doc=Nokogiri::HTML(“文本:想要这个\n”
h2[2]。文本#=>“最后我也想要这个”
从这一点上,很容易清理“TEXT:WANT THIS\n”
我知道我将有多个点击,因此,与其尝试使用XPath获得我想要的位置,一个简单的CSS将找到有问题的标记,然后我可以获取我想要的特定标记,并继续处理。您想要什么和不想要什么的区别是什么?特别是什么决定了您想要“TEXT:want THIS”但不想要“我不要这个"?区别在于
文本:…直到下一个
!因此您希望文本后面跟一个
,而不是后面跟一个
?您的逻辑一点也不清楚。很好,您提供了示例输入和所需的输出,但您没有清楚地传达某些区域的特殊性以及其他方面rs不是。与你的回答无关:我喜欢你的Gravatar冗余\:参见“冗余”
;-)@JamWaffles,哈哈,你是第一个注意到的。
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 THIS\n "
h2[2].text # => "FINALLY I WANT THIS TOO"