我有一個http://www.example.com/startpage的起始頁面,其中有1220個列表按標準方式分頁,例如每頁20個結果。使用銀蓮花和nokogiri屏幕抓取所需的幫助
我有代碼工作,解析結果的第一頁,並遵循其網址中包含「example_guide/paris_shops」的鏈接。然後我使用Nokogiri來提取最終頁面的特定數據。一切正常,20個結果寫入文件。
但是我似乎無法弄清楚如何讓Anemone抓取下一頁結果(http://www.example.com/startpage?page=2),然後繼續解析該頁面然後是第3頁(http://www.example.com/startpage?page=3)等。
所以我想問問,如果有人知道我怎麼才能讓海葵開始在一個頁面上,解析該頁面上的所有鏈接(和特定數據的下一級數據),然後按照分頁到結果的下一頁,所以海葵可以再次開始解析,等等。鑑於分頁鏈接與結果中的鏈接不同,海葵不會遵循它們。
目前我加載結果的第一頁的網址,讓它完成,然後粘貼到結果的第二頁的下一個網址等等。非常手動和低效,尤其是獲得數百頁。
任何幫助將不勝感激。
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
感謝格雷格 - 這應該幫助我開始。我使用海葵來輕鬆抓取與「on_pages_like」相匹配的頁面。我猜Nokogiri也可以做到這一點,所以將圍繞文檔捅了一下,看看我得到了什麼。再次 - thx尋求幫助 – ginga 2010-10-02 11:53:47
從您對網頁佈局的描述中,您無需查找下一頁信息;他們使用標準的下一頁鏈接,只需將頁碼填入字符串並檢索即可。 Nokogiri可以很容易地找到下一頁的鏈接,但它看起來並不是必要的,所以如果可以避免的話,不要浪費時間。這個頁面上堆棧溢出可能有所幫助:http://stackoverflow.com/questions/2807500/following-a-link-using-nokogiri-for-scraping – 2010-10-02 16:49:13
這個伎倆爲我工作... – Avishai 2011-10-26 14:47:37