如何使用<br>分隔符提取文本?



如何从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会找到有问题的标签,然后我可以获取我想要的特定标签,并继续处理。

相关内容

  • 没有找到相关文章

最新更新