2013-06-04 71 views
2

我正在尋找一些關於爲圖片刮取網站的指針(這可能會超出我目前的技能水平)。我有一個我正在下載的檔案圖像數據庫(請參閱,例如,http://digitarq.dgarq.gov.pt/viewer?id=2300366)。每個項目記錄都有一組TIFF圖像,我可以通過訪問每個記錄的圖像逐一下載(請參閱文檔查看器上的下載按鈕)。使用Ruby刮取圖片數據庫

我希望做的是刮掉項目頁面以找到每個TIFF圖像,並將它們下載到我的本地硬盤以用於研究目的。我想我遇到的困難是我不清楚如何獲取這些下載鏈接。沿左側的TIFF鏈接使用JavaScript來查詢數據庫並拉出新圖像。我發現它很容易的開始刮這些網址:

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

BASE_URL = "http://digitarq.dgarq.gov.pt" 
ITEM_URL = "#{BASE_URL}/viewer?id=2300366" 

# Parse the page for items 
page = Nokogiri::HTML(open(ITEM_URL)) 

item_id = "2F2603B150884299A0161DCA31F2CA71" 
page_items = page.css('#ViewerControl1_UpdatePanelMain #ViewerControl1_divLeftColumn table') 

page_items[1..-2].each do |item| 
    hrefs = item.css('td a') 
    puts hrefs 
end 

下一個步驟是,我認爲,刮下載按鈕,查詢的TIFF圖像數據庫,並保存到本地。可以想像,這樣的:

def scrape_for_download(archive_item) 
    archive_item = Nokogiri::HTML(open(URL) 
    download_item = page.css('#ViewerControl1_HyperLinkDownload') 
    download_item.each do |download| 
     File.open("#{item}", "w") do |output| 
      output.puts output.read 
     end 
    end 
end 

這是第1刮刀我已經寫在那裏,我不得不處理JavaScript和數據庫,所以它證明了一個有趣的挑戰。這看起來像我在正確的軌道上?有沒有更好的圖書館比Nokogiri做這樣的事情?或者,我甚至有可能完成這項工作?

+1

我推薦機械化。它將Nokogiri和HTML包裝成一個更加「類似網頁瀏覽器」的API。 –

+1

如果是出於研究目的,並且如果您在學校,您是不是可以找到聯繫網站所有者的方式,並且可以通過FTP獲得更直接的圖像訪問權限?爲了合法的目的,似乎訪問將被授予。如果沒有,請使用瀏覽器查看頁面,而不啓用JavaScript。每個圖像名稱都在那裏,並且可以通過Nokogiri搜索輕鬆訪問。找出映像目錄的完整路徑,添加映像名稱,並且您應該能夠使用OpenURI訪問它們。 –

+1

機械化會需要一些額外的工作,因爲它不執行JavaScript。您需要解構JavaScript(它只是在發佈表單之前填充了幾個隱藏的表單域),但另一個選擇是使用像Watir或Selenium這樣的瀏覽器驅動程序。 –

回答

0

我們最終使用了Selenium的Mark Thomas的suggestion,它的工作非常出色。謝謝!