Ruby on rails Mechanize page.search基于相邻标记

Ruby on rails Mechanize page.search基于相邻标记,ruby-on-rails,web-scraping,mechanize,Ruby On Rails,Web Scraping,Mechanize,我需要抓取一个没有定义很多类的页面,这些类允许我将信息分组在一起 这显示了我正在努力解决的问题: 此产品没有附加任何活动项 ... 第1列 第2列 第3列 第4列 信息1 信息2 信息3 信息4 我的产品标题下没有任何内容,产品标题下有与之相关的数据 我将Rails 4与mongoid一起使用,目标是使用上述数据创建一个哈希,如下所示: {"Product" => "Product 1"} {"Product" => "Product 2", "Col 1" => "

我需要抓取一个没有定义很多类的页面,这些类允许我将信息分组在一起

这显示了我正在努力解决的问题:


此产品没有附加任何活动项

... 第1列 第2列 第3列 第4列 信息1 信息2 信息3 信息4
我的产品标题下没有任何内容,产品标题下有与之相关的数据

我将Rails 4与mongoid一起使用,目标是使用上述数据创建一个哈希,如下所示:

{"Product" => "Product 1"}  
{"Product" => "Product 2", "Col 1" => "Info 1", "Col 2" => "Info 2", "Col 3" => "Info 3"} 
我认为CSS相邻同级选择器可以帮助我找到正确的标题,但它只返回第二个标记。如果我使用

page.search("h2.header + p")
它只会给我
标签,我也想从
h2.header
中了解产品


是否有一种方法可以在同一级别上为我提供下一个标记?通过这种方式,我可以使用
page.search(“h2.header”)
查找标题,然后检查后面的标签。

我想我的问题是,我在谷歌上搜索的是关于Mechanise而不是Nokogiri的问题的答案

我的解决方案的一个非常简化的版本如下:

doc = Nokogiri::HTML(html)
products = Hash.new
products["Products"] = {}
headers = Array.new
tmp_prods = Hash.new
h2 = doc.xpath('//h2[@class="header"]').reject {|i| i.next.name == "p"}
h2.map do |e|
    products["Products"][e.text] = {}
    e.next.next.next.xpath('./tbody/tr/th').map {|th| headers.push( th.text.strip ) }
    e.next.next.next.xpath('./tbody/tr/td').map.with_index {|td, index| tmp_prods[headers[index]] = td.text.strip }
    products["Products"][e.text].merge!(tmp_prods)
end
我以散列结束:

产品 =>{“产品”=>{“产品2”=>{“列1”=>“信息1”,“列2”=>“信息2”,“列3”=>“信息3”,“列4”=>“信息4”}}


Nokogiri的文档解释了这一切,特别是“”文档。是的,谢谢。不久前,我在Nokogiri文档中发现了这一点以及更多。看完这些之后,我的问题似乎有点傻。我会发布一个简单的答案。