How do I download a picture using Ruby?

2019-01-10 19:34发布

问题:

I want to download this picture using Ruby. How do I do that?

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

I am using Mac OS.

回答1:


require "open-uri"

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




回答2:

Try using the Mechanize gem:

Start with: sudo gem install mechanize to install Mechanize.

Then:

require 'rubygems'
require 'mechanize'

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

EDIT: To make things cleaner I would suggest you use the File's name itself when you save the image. I had an issue saving bulk images because they were not formated correctly. The images were saved like this:

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

Thats why you should probably use the image name as the file name like this:

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

File.basename takes the image url and just returns the the actual image name:

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


回答3:

If you want to download all the images on one page, you can use the 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()


回答4:

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

or

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


回答5:

The easiest way would be to require open-uri and use that with the previous answer or use the also supplied Net::HTTP module with its get method.



回答6:

To make things cleaner I would suggest you use the File's name itself when you save the image. I had an issue saving bulk images because they were not formated correctly. The images were saved like this:

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

Thats why you should probably use the image name as the file name like this:

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

File.basename takes the image url and just returns the the actual image name:

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


回答7:

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.



回答8:

The same way you download anything else. Net::HTTP



标签: ruby http