如何使用Ruby下载图片?

时间:2009-07-02 13:22:53

标签: ruby http

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

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

我正在使用Mac OS。

8 个答案:

答案 0 :(得分:54)


require "open-uri"

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


答案 1 :(得分:16)

尝试使用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获取图片网址,只返回实际图片名称:

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

答案 2 :(得分:2)

如果您想在一个页面上下载所有图像,可以使用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()

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分: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

答案 6 :(得分:0)

There is a gem called down which is simple to use.

Firstly, install this gem by gem install down.

Then:

require "down"
file = Down.download("http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg")

You can read more on this gem in its github repo https://github.com/janko-m/down.

答案 7 :(得分:-4)

与下载其他内容的方式相同。 Net::HTTP