使用Ruby Mechanize来擦除所有连续页面

我正在寻找帮助,以最好的方式循环网站上的连续页面,同时从每个页面抓取相关数据。

例如,我想去一个特定的网站(以下例子中的craigslist),从第一页抓取数据,转到下一页,抓取所有相关数据等,直到最后一页。

在我的脚本中,我使用了一个while循环,因为它似乎对我来说最有意义。 但是,它似乎没有正常工作,只是从第一页抓取数据。

熟悉Ruby / Mechanize的人可以指出我正确的方向,完成这项任务的最佳方法是什么。 我花了无数个小时试图解决这个问题,觉得我错过了一些非常基本的东西。

在此先感谢您的帮助。

 require 'mechanize' require 'pry' # initialze agent = Mechanize.new { |agent| agent.user_agent_alias = 'Mac Safari'} url = "http://charlotte.craigslist.org/search/rea" page = agent.get(url) # Create an empty array to dump contents into property_results = [] # Scrape all successive pages from craigslist while page.link_with(:dom_class => "button next") != nil next_link = page.link_with(:dom_class => "button next") page.css('ul.rows').map do |d| property_hash = { title: d.at_css('a.result-title.hdrlnk').text } property_results.push(property_hash) end page = next_link.click end 

更新:我发现了这个,但仍然没有骰子:

Ruby Mechanize:关注链接

@pguardiario

 require 'mechanize' require 'httparty' require 'pry' # initialze agent = Mechanize.new url = "http://charlotte.craigslist.org/search/rea" page = agent.get(url) #create Empty Array property_results = [] # Scrape all successive pages from craigslist while link = page.at('[rel=next]') page.css('ul.rows').map do |d| property_hash = { title: d.at_css('a.result-title.hdrlnk').text } property_results.push(property_hash) end link = page.at('[rel=next]') page = agent.get link[:href] end pry(binding) 

每当你看到[rel=next] ,你想要遵循的是:

 page = agent.get url do_something_with page while link = page.at('[rel=next]') page = agent.get link[:href] do_something_with page end