【问题标题】:Extracting multiple-line content under header tags提取标题标签下的多行内容
【发布时间】:2014-10-10 06:47:51
【问题描述】:

我发布了一个类似的问题,没有考虑正文中的多行。我有一个像这样的html,我想提取(使用Nokogiri)的“身体”:

html = %q|
    <div class="content">
      <h1>Title 1</h1>
        Lorem ipsum 1

      <h2>Title 2</h2>
        Lorem ipsum 2

      <h3>Title 3</h3>
        <p>paragraph content 1</p>
        <b>Lorem ipsum 3</b>
        <p>paragraph content 2</p>

      <h1>Title 4</h1>
        Lorem ipsum 4

      <h2>Title 5</h2>
        Lorem ipsum 5
   </div>
   |

我想提取每个标题标题下的正文内容并将它们放入一个数组中,如下所示:

[
  "Lorem ipsum 1",
  "Lorem ipsum 2",
  "<p>paragraph content 1</p><b>Lorem ipsum 3</b><p>paragraph content 2</p>",
  "Lorem ipsum 4",
  "Lorem ipsum 5"
]

但是,当我这样做时:

Nokogiri::HTML(html).
  css("div").
  children.
  reject{|e| e.name =~ /\Ah\d\z/}.
  map{|e| e.to_html.strip}.reject(&:empty?)

我得到了这个数组:

[
  "Lorem ipsum 1",
  "Lorem ipsum 2",
  "<p>paragraph content 1</p>",
  "<b>Lorem ipsum 3</b>",
  "<p>paragraph content 2</p>",
  "Lorem ipsum 4",
  "Lorem ipsum 5"
]

有没有办法提取多行“正文”内容以显示我想要的数组?

【问题讨论】:

  • 你的问题与多行无关,它与头部后面的多个DOM节点有关。

标签: ruby regex nokogiri


【解决方案1】:
Nokogiri::HTML(html)
.css("div").children
.slice_before{|e| e.name =~ /\Ah\d\z/}
.map{|a| a.drop(1).map{|e| e.to_html.strip}.join}.reject(&:empty?)

【讨论】:

  • 啊,我现在明白了。你太棒了,sawa。我非常感谢您的帮助!一如既往地感谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多