2009-07-02 95 views
24

我想使用Ruby下載此圖片。我怎麼做?如何使用Ruby下載圖片?

http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg 

我正在使用Mac OS。

+0

操作系統無關緊要。 – waqas 2013-08-03 19:50:06

回答

50

require "open-uri" 

open("your-url") {|f| 
    File.open("whatever_file.jpg","wb") do |file| 
    file.puts f.read 
    end 
} 


+1

你需要添加「require'open-uri'」才能工作。 – Keltia 2009-07-02 13:26:35

+0

是的,我忘了在第一個版本中添加它。 – Geo 2009-07-02 13:27:55

0
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg) 

`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg` 
0

最簡單的方法是要求open-uri,使用與以前的答案,或使用還提供的Net :: HTTP模塊,其get方法。

2

如果你想下載一個網頁上的所有圖片,您可以使用image_downloader寶石:

require 'rubygems' 
require 'image_downloader' 

downloader = ImageDownloader::Process.new('www.test.com','img_dir/') 

downloader.parse(:any_looks_like_image => true) 

downloader.download() 
15

嘗試使用機械化寶石:

開始:sudo gem install mechanize安裝機械化。

然後:

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
link = 'http://www.asite.com/pic.jpg' 
agent.get(link).save "images/pic.jpg" 

編輯: 爲了使事情變得更清潔,我建議當你保存圖像使用文件的名稱本身。我有一個保存批量圖像的問題,因爲它們的格式不正確。圖像保存這樣的:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

這就是爲什麼你應該使用映像名稱類似這樣的文件名:

agent.get(src).save "images/#{File.basename(url)}" 

File.basename採用圖片的網址,只是返回的實際圖像名稱:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg 
0

爲了使事情更清潔,我建議您在保存圖像時使用文件名。我有一個保存批量圖像的問題,因爲它們的格式不正確。圖像保存這樣的:

#pic.jpg(1) 
#pic.jpg(2) 
#etc. 

這就是爲什麼你應該使用映像名稱類似這樣的文件名:

src = 'http://www.asite.com/pic.jpg'  
agent.get(src).save "#{folder}/#{File.basename(src)}" 

File.basename採用圖片的網址,只是返回的實際圖像名稱:

File.basename("http://www.asite.com/pic.jpg") 
# returns the image name 
pic.jpg