Ruby 使用Mechanize和Nokogiri保存图像?
我正在使用Mechanize和Nokogiri收集一些数据。我需要保存一张在每次请求时随机生成的图片 在我的尝试中,我被迫下载所有图片,但我唯一真正想要的是位于Ruby 使用Mechanize和Nokogiri保存图像?,ruby,nokogiri,mechanize,Ruby,Nokogiri,Mechanize,我正在使用Mechanize和Nokogiri收集一些数据。我需要保存一张在每次请求时随机生成的图片 在我的尝试中,我被迫下载所有图片,但我唯一真正想要的是位于div#specific中的图片 此外,是否可以从中生成Base64数据,而无需保存或重新加载其源 require 'rubygems' require 'mechanize' require 'nokogiri' a = Mechanize.new { |agent| agent.keep_alive = true a
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
}
要从特定位置获取图像,请执行以下操作:
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))}
如果我没有弄错,以这种方式保存图像会重新加载src吗?我需要在不重新加载src的情况下保存映像或获取base64。不会重新加载。与internet浏览器不同,Mechanize不会自动下载图像或任何其他资产。它只加载html文档。然后在文档中找到所需的图像url并显式下载图像。有没有方法不重新加载图像就可以下载图像?也许使用另一个gem?@charliexx我想你误解了机械化和浏览器的工作原理。victmask是正确的。为此非常感谢;)我想使用您展示的enocoding在mongodb中保存图像。也许有更好的解决方案吗?希望这不是试图击败验证码。