变成Nokogiri HTML解析方法

时间:2014-11-20 02:41:27

标签: html ruby regex nokogiri

我试图解析一个大而复杂的HTML文档,并且缺少CSS中的任何类或ID。我想我可以让Nokogiri为我做这项工作。

我将有许多不同结构的页面,所以我认为我必须使用我给出的结构来找到附近和相关的元素。具体来说,它在具有名称 - 值对的表格单元格中发布。使用唯一的名称,我猜我可以提取值。

该页面有一些表格。表具有可变数量的行。我想使用以下内容:

<tr class="boxInside">
<td>
    <strong>
        Number of Employees:
    </strong>
</td>
<td>
    15&nbsp;
</td>

所以我正在看这样的事情:

page.css('<strong>\s*Number of Employees:\s*<\/strong>')

在提取第二个分组时使用regexp将是我的目标。我希望将其作为变量引入,如下所示:

page.css('<strong>\s*#{searchstring}\s*<\/strong>')

我似乎无法做到正确。有任何见解赞赏。使用没有Nokogiri的真正正则表达式更加令人困惑。

1 个答案:

答案 0 :(得分:0)

这将找到嵌入在行中的所有<strong>标记并返回文本:

require 'nokogiri'

page = Nokogiri::HTML(<<EOT)
<tr class="boxInside">
<td>
    <strong>
        Number of Employees:
    </strong>
</td>
<td>
    15&nbsp;
</td>
EOT

page.css('tr.boxInside strong').map(&:text) # => ["\n        Number of Employees:\n    "]

要使用CSS选择器,您必须遵循选择对象的规则。您不能只输入HTML标记。我建议在许多教程或参考站点之一阅读它们。

如果您知道所需内容始终是距行开头给定偏移量的单元格,则始终可以对css返回的结果NodeSet进行切片。