如何在Nokogiri中正确解析这个糟糕的HTML?

时间:2012-06-30 08:42:31

标签: html ruby nokogiri

我正在尝试使用Nokogiri解析此HTML:

<div class="times">
<span style="color:"><span style="padding:0 ">&lrm;</span><!--  -->16:45&lrm;</span>
<span style="color:"><span style="padding:0 "> &nbsp;&lrm;</span><!--  -->19:30&lrm;</span> 
<span style="color:"><span style="padding:0 "> &nbsp;&lrm;</span><!--  -->22:10&lrm;</span>
</div>

我只想得到时间,插入数组。

我设置了一个这样的gsub:

 block.css('div.times span').text.gsub(" ","").gsub("&nbsp","")

然后我最终得到了一根弦,我有点卡住了。有没有一种有效的方法呢?

2 个答案:

答案 0 :(得分:2)

最简单的可能是:

block.at('div.times').text.scan /\d{2}:\d{2}/

答案 1 :(得分:1)

您可以做的一件事是将空格留在字符串中,然后使用String#split将其转换为数组:

block.css('div.times span').text.gsub("&nbsp","").split(' ')

在这种情况下,您可能还需要去除从左到右的标记,我认为您不需要替换不间断的空格,因此您可以尝试这样做:

block.css('div.times span').text.gsub("\u200e", '').split(' ')

\u200e是从左到右的标记。)

使用Nokogiri的替代方法是使用xpath而不是CSS,这将使您能够直接选择所需的文本节点,然后使用map转换为字符串数组:

block.xpath('//div[@class="times"]/span/text()').map(&:text)