【发布时间】:2011-04-19 16:37:33
【问题描述】:
我有一个http://www.example.com/startpage 的起始页,其中有 1220 个列表,按标准方式按分页方式分解,例如每页 20 个结果。
我的代码可以解析结果的第一页,并遵循其 url 中包含“example_guide/paris_shops”的链接。然后我使用 Nokogiri 提取最后一页的特定数据。一切正常,将 20 个结果写入文件。
但是我似乎无法弄清楚如何让 Anemone 爬到结果的下一页 (http://www.example.com/startpage?page=2),然后继续解析该页面并然后是第三页 (http://www.example.com/startpage?page=3) 等等。
所以我想问一下是否有人知道我如何让 anemone 在页面上开始,解析该页面上的所有链接(以及特定数据的下一级数据),然后按照分页到下一个结果页面,因此海葵可以再次开始解析,依此类推。鉴于分页链接与结果中的链接不同,Anemone 当然不会跟随它们。
目前我正在加载结果第一页的 url,让它完成,然后粘贴到结果第二页的下一个 url 等等。非常手动且效率低下,尤其是获取数百页。
任何帮助将不胜感激。
require 'rubygems'
require 'anemone'
require 'nokogiri'
require 'open-uri'
Anemone.crawl("http://www.example.com/startpage", :delay => 3) do |anemone|
anemone.on_pages_like(/example_guide\/paris_shops\/[^?]*$/) do | page |
doc = Nokogiri::HTML(open(page.url))
name = doc.at_css("#top h2").text unless doc.at_css("#top h2").nil?
address = doc.at_css(".info tr:nth-child(3) td").text unless doc.at_css(".info tr:nth-child(3) td").nil?
website = doc.at_css("tr:nth-child(5) a").text unless doc.at_css("tr:nth-child(5) a").nil?
open('savedwebdata.txt', 'a') { |f|
f.puts "#{name}\t#{address}\t#{website}\t#{Time.now}"
}
end
end
【问题讨论】:
标签: ruby screen-scraping nokogiri