[英]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.