繁体   English   中英

Nokogiri HTML嵌套元素提取类和文本

[英]Nokogiri HTML Nested Elements Extract Class and Text

我有一个基本的页面结构,其中的元素(span的)嵌套在其他元素(div的和span的)之下。 这是一个例子:

html = "<html>
  <body>
    <div class="item">
         <div class="profile">
      <span class="itemize">
         <div class="r12321">Plains</div>
          <div class="as124223">Trains</div>
           <div class="qwss12311232">Automobiles</div>
      </div>
      <div class="profile">
        <span class="itemize">
          <div class="lknoijojkljl98799999">Love</div>
           <div class="vssdfsd0809809">First</div>
            <div class="awefsaf98098">Sight</div>
      </div>
    </div>
  </body>
</html>"

请注意,类名称是随机的。 另请注意,html中有空格和制表符。

我想提取孩子并最终得到一个像这样的哈希:

page = Nokogiri::HTML(html)
itemhash = Hash.new
page.css('div.item div.profile span').map do |divs|
  children = divs.children
  children.each do |child|
    itemhash[child['class']] = child.text
  end
end

结果应类似于:

 {\"r12321\"=>\"Plains\", \"as124223\"=>\"Trains\", \"qwss12311232\"=>\"Automobiles\", \"lknoijojkljl98799999\"=>\"Love\", \"vssdfsd0809809\"=>\"First\", \"awefsaf98098\"=>\"Sight\"}

但是我最终陷入了这样的混乱:

 {nil=>\"\\n\\t\\t\\t\\t\\t\\t\", \"r12321\"=>\"Plains\", nil=>\" \", \"as124223\"=>\"Trains\", \"qwss12311232\"=>\"Automobiles\", nil=>\"\\n\\t\\t\\t\\t\\t\\t\", \"lknoijojkljl98799999\"=>\"Love\", nil=>\" \", \"vssdfsd0809809\"=>\"First\", \"awefsaf98098\"=>\"Sight\"}

这是因为HTML中的选项卡和空格。 我对HTML的生成方式没有任何控制权,因此我正在尝试解决此问题。 我已经尝试过noblanks,但这是行不通的。 我也尝试过gsub,但这只会破坏我的标记。

如何在完全忽略空格和制表符的同时提取这些嵌套元素的类和值?

PS:我对Nokogiri并不挂念-因此,如果另一个宝石可以做得更好,我就可以玩。

children方法将返回所有子节点,包括文本节点,即使它们为空。

要仅获取子元素,可以执行显式XPath查询(或等效的CSS),例如:

children = divs.xpath('./div')

您还可以使用children_elements方法 ,该方法将更接近于您正在执行的方法,并且仅返回作为元素的子代:

children = divs.element_children

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM