我正在使用Mechanize和Nokogiri来收集一些数据。我需要保存每个请求随机生成的图片。
在我的尝试中,我被迫下载所有图片,但我唯一想要的是位于div#specific
内的图片。
此外,是否可以从中生成Base64数据,而无需保存或重新加载源?
require 'rubygems'
require 'mechanize'
require 'nokogiri'
a = Mechanize.new { |agent|
agent.keep_alive = true
agent.max_history = 0
}
urls = Array.new()
urls.push('http://www.domain.com');
urls.each {|url|
page = a.get(url)
doc = Nokogiri::HTML(page.body)
if doc.at_css('#specific')
page.images.each do |img|
img.fetch.save('picture.png')
end
end
}
答案 0 :(得分:26)
要从特定位置获取图像:
agent = Mechanize.new
page = agent.get('http://www.domain.com')
images = page.search("#specific img")
保存图片:
agent.get(images.first.attributes["src"]).save "path/to/folder/image_name.jpg"
要在不保存的情况下编码图像:
encoded_image = Base64.encode64 agent.get(images.first.attributes["src"]).body_io.string
我这样做只是为了确保编码的图像可以被解码回来:
File.open("images/image_name.jpg", "wb") {|f| f.write(Base64.decode64(encoded_image))}