Tôi muốn tải xuống ảnh này bằng Ruby. Làm thế nào để làm điều đó?Làm cách nào để tải xuống ảnh bằng Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Tôi đang sử dụng Mac OS.
Tôi muốn tải xuống ảnh này bằng Ruby. Làm thế nào để làm điều đó?Làm cách nào để tải xuống ảnh bằng Ruby?
http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
Tôi đang sử dụng Mac OS.
require "open-uri"
open("your-url") {|f|
File.open("whatever_file.jpg","wb") do |file|
file.puts f.read
end
}
Cùng cách bạn tải xuống bất kỳ thứ gì khác. Net::HTTP
%x(wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg)
hoặc
`wget http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg`
đây không phải là di động. – Geo
có thể. Nhưng anh ấy hỏi một thứ có thể hoạt động trên Mac. –
Điều này không hoạt động trên hệ điều hành MacOS. Không, trừ khi bạn cài đặt cụ thể 'wget'. Bạn đã đề xuất 'curl' (mặc định), nó có thể chấp nhận được hơn. – user137369
Cách đơn giản nhất sẽ được yêu cầu open-uri
và sử dụng rằng với câu trả lời trước hoặc sử dụng cũng cung cấp mô-đun Net :: HTTP với method get của nó.
Nếu bạn muốn tải về tất cả các hình ảnh trên một trang, bạn có thể sử dụng đá quý 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()
Hãy thử sử dụng đá quý mechanize:
Bắt đầu với: sudo gem install mechanize
để cài đặt mechanize.
Sau đó:
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
link = 'http://www.asite.com/pic.jpg'
agent.get(link).save "images/pic.jpg"
EDIT: Để làm cho mọi việc dọn dẹp tôi sẽ đề nghị bạn sử dụng tên của tập tin bản thân khi bạn lưu hình ảnh. Tôi đã gặp sự cố khi lưu hình ảnh hàng loạt vì chúng không được định dạng chính xác. Các hình ảnh được lưu như thế này:
#pic.jpg(1)
#pic.jpg(2)
#etc.
Thats lý do tại sao bạn nên sử dụng tên hình ảnh như tên tập tin như thế này:
agent.get(src).save "images/#{File.basename(url)}"
File.basename mất url hình ảnh và chỉ trả về các thực tế tên hình ảnh:
File.basename("http://www.asite.com/pic.jpg")
# returns the image name
pic.jpg
Để làm cho mọi thứ sạch hơn, tôi khuyên bạn nên sử dụng tên của Tệp khi bạn lưu hình ảnh. Tôi đã gặp sự cố khi lưu hình ảnh hàng loạt vì chúng không được định dạng chính xác. Các hình ảnh được lưu như thế này:
#pic.jpg(1)
#pic.jpg(2)
#etc.
Thats lý do tại sao bạn nên sử dụng tên hình ảnh như tên tập tin như thế này:
src = 'http://www.asite.com/pic.jpg'
agent.get(src).save "#{folder}/#{File.basename(src)}"
File.basename mất url hình ảnh và chỉ trả về các thực tế tên hình ảnh:
File.basename("http://www.asite.com/pic.jpg")
# returns the image name
pic.jpg
Hệ điều hành không quan trọng. – waqas