如何使用Ruby下载图片?

我想用Ruby下载这张图片。 我怎么做?

http://sofzh.miximages.com/ruby/218926700_ecedc5fef7_o.jpg 

我正在使用Mac OS。

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

尝试使用Mechanize gem:

开头: sudo gem install mechanize安装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获取图像url,只返回实际的图像名称:

 File.basename("http://sofzh.miximages.com/ruby/pic.jpg") # returns the image name pic.jpg 

如果要在一个页面上下载所有图像,可以使用image_downloader gem:

 require 'rubygems' require 'image_downloader' downloader = ImageDownloader::Process.new('www.test.com','img_dir/') downloader.parse(:any_looks_like_image => true) downloader.download() 
 %x(wget http://sofzh.miximages.com/ruby/218926700_ecedc5fef7_o.jpg) 

要么

 `wget http://sofzh.miximages.com/ruby/218926700_ecedc5fef7_o.jpg` 

最简单的方法是要求open-uri并将其与前一个答案一起使用,或者使用也提供的Net :: HTTP模块及其get方法。

为了使事情更清洁,我建议您在保存图像时使用文件名称。 我在保存批量图像时遇到了问题,因为它们没有正确格式化。 图像保存如下:

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

这就是为什么你应该使用图像名称作为文件名,如下所示:

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

File.basename获取图像url,只返回实际的图像名称:

 File.basename("http://sofzh.miximages.com/ruby/pic.jpg") # returns the image name pic.jpg 

以同样的方式下载其他任何东西。 网:: HTTP