【发布时间】:2015-10-15 09:49:28
【问题描述】:
我需要抓取一个没有定义太多类的页面,以便我将信息组合在一起。
这显示了我要抓取的内容:
<h2 class="header">
<a class="header" href="index.php?id=45>Product 1</a>
</h2>
<p>There are no active items attached to this product.</p>
<h2 class="header">
<a class="header" href="index.php?id=43">Product 2</a>
</h2>
<table class="description_header" cellspacing="0">
<tbody>
<tr>
<td> ... </td>
</tr>
</tbody>
</table>
<div class="subbar"></div>
<table class="tablehandler_list" cellspacing="0">
<tbody>
<tr>
<th> Col 1 </td>
<th> Col 2 </td>
<th> Col 3 </td>
<th> Col 4 </td>
</tr>
<tr>
<td> Info 1 </td>
<td> Info 2 </td>
<td> Info 3 </td>
<td> Info 4 </td>
</tr>
</tbody>
</table>
我的产品标题下没有任何内容,而产品标题则包含与之关联的数据。
我使用带有 mongoid 的 Rails 4,目标是使用上述数据创建一个哈希,如下所示:
{"Product" => "Product 1"}
{"Product" => "Product 2", "Col 1" => "Info 1", "Col 2" => "Info 2", "Col 3" => "Info 3"}
我虽然 CSS 相邻兄弟选择器可以帮助我,它确实有助于找到正确的标题,但它只返回第二个标签。如果我使用
page.search("h2.header + p")
它只会给我<p> 标签,我也想从h2.header 了解产品。
有没有一种方法可以为我提供同一级别的下一个标签?例如,这样我可以查找带有page.search("h2.header") 的标题,然后检查后面的标签。
【问题讨论】:
-
Nokogiri 的文档解释了这一切,尤其是“Nokogiri::XML::Node”文档。
-
好的,谢谢。不久前,我在 Nokogiri 文档中发现了这一点以及更多内容。阅读完所有这些后,我的问题似乎很愚蠢。我将发布一个简化的答案。
标签: ruby-on-rails web-scraping mechanize