2014-10-03 68 views
0

我有一個片段,可以在URL中成功抓取圖像,事情是,我想從各種網站收集大量圖像,並且我不能每次都手動放置URL 。刮一個頁面的所有URL

由於我是新手,所以你們怎麼面對這個?什麼是颳去每個網址的最佳方式? 我需要URL中的CSV或其他東西嗎?它是自動的嗎?

我的腳本

URL = 'http://www.sitasde.com' 

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

    def make_absolute(href, root) 
    URI.parse(root).merge(URI.parse(href)).to_s 
    end 

    Nokogiri::HTML(open(URL)).xpath("//img/@src").each do |src| 
    uri = make_absolute(src,URL) 
    File.open(File.basename(uri),'wb'){ |f| f.write(open(uri).read) } 
    end 

回答

0

您需要指定一種模式。你可以檢測所有的錨鏈接(),並將這些鏈接添加到隊列中(就像在數組中一樣)。一旦完成了在當前頁面上抓取圖像,將其從數組中移除,移動到數組中的下一頁,重複相同的過程(查找所有鏈接,將它們推送到數組,在當前鏈接上保存圖像,從數組中刪除當前鏈接)。重複此操作,直到數組長度> 0。

但是可能會出現問題,例如大型網站的內存問題。所以你也可以設置時間限制和內存限制。或者在您的代碼本身中添加一個限制。像限制到同一個網站,並設置數組的最大限制爲100。如果你正在做的部分,保持這些URL的記錄,所以你今後不要再刮。

我會建議使用數據庫來跟蹤挖掘的URL。