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