【发布时间】:2013-11-17 09:41:48
【问题描述】:
我正在尝试学习如何构建一个可以下载到本地目录的自定义屏幕抓取工具,并且我正在关注 Danny Ngyuen 的“The Great Bastards Guide”。我有一个书中没有解决的问题:如果我要抓取的页面在其分页方案中没有可见的最后页码怎么办?
一些网站会限制在其结果中显示的页面数量,直到您接近尾声,例如 Google。当last_page_number 在主索引上不可见时,我将如何定义它。或者,当我只有一个下一页链接时,是否有更好的方法让 Nokogiri 通过分页?
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'fileutils'
BASE_URL = 'http://explore.data.gov'
BASE_DIR = '/catalog/raw/?&limit=100&page='
LOCAL_DIR = 'data-hold/datagov-pages'
FileUtils.makedirs(LOCAL_DIR) unless File.exists?LOCAL_DIR
# get metainfo from first page:
page = Nokogiri::HTML(open(BASE_URL+BASE_DIR + '1'))
# write the HTML for page 1 to disk
File.open("#{LOCAL_DIR}/1.html", 'w'){|f| f.write(page.to_html)}
last_page_number = page.css("a.end.lastLink.button")[0]['href'].match(/page=(\d+)/)[1].to_i
puts "Iterating from 2 to #{last_page_number}"
for pg_number in 2..last_page_number do
puts "Getting #{pg_number}"
File.open("#{LOCAL_DIR}/#{pg_number}.html", 'w') do |f|
f.write( open("#{BASE_URL}#{BASE_DIR}#{pg_number}").read )
end
end
【问题讨论】:
标签: ruby-on-rails ruby pagination nokogiri