簡體   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