我正在寻找有关在网站上连续浏览网页的最佳方式的帮助,同时从每个页面抓取相关数据。
例如,我想去一个特定的网站(下面的示例中的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
更新: 我找到了这个,但仍然没有骰子:
@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)
答案 0 :(得分:1)
每当您看到[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