2011-10-28 32 views
6

我爲自己創建了一個小應用程序,我運行Ruby腳本並將所有圖像保存在我的博客中。保存網站中的所有圖像文件

我無法弄清楚如何保存圖像文件後,我已經確定他們。任何幫助將非常感激。

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

url = '[my blog url]' 
doc = Nokogiri::HTML(open(url)) 

doc.css("img").each do |item| 
    #something 
end 
+0

這是否真的與鐵軌有關? –

回答

25
URL = '[my blog url]' 

require 'nokogiri' # gem install nokogiri 
require 'open-uri' # already part of your ruby install 

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

使用代碼轉換爲絕對路徑從這裏:How can I get the absolute URL when extracting links using Nokogiri?

+0

我使用這個時出現錯誤。 「由於轉換錯誤,輸出轉換失敗,字節0xFF 0xC3 0x98 0xC3」 – Farhad

-1
system %x{ wget #{item['src']} } 

編輯:這是假設你是Unix系統,wget的:) 編輯2:更新後的代碼從引入nokogiri抓住IMG SRC。

+0

這不處理相對圖像路徑。 – Phrogz

1

假設src屬性是一個絕對的URL,也許是這樣的:

if item['src'] =~ /([^\/]+)$/ 
    File.open($1, 'wb') {|f| f.write(open(item['src']).read)} 
end 
+0

/(^ \ /] +)$ /是什麼意思? –

+0

@ZackShapiro這是一個正則表達式,它匹配「一個或多個不是正斜槓的字符,只要它們觸及字符串的末尾」;在這種情況下,@pguardiario正在使用它來獲取文件名,以便可以使用'$ 1'來保存具有該名稱的文件。這是我的答案中'File.basename(uri)'的一個令人討厭的形式。 – Phrogz

1

提示:有一個簡單的使用Scrapifier寶石從頁​​面頭部/身體獲取圖像的方式。最酷的是,你也可以定義你想要它返回的圖像類型(jpg,png,gif)。

試試看:https://github.com/tiagopog/scrapifier

希望您能喜歡。