Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Mechanize和Nokogiri保存图像?_Ruby_Nokogiri_Mechanize - Fatal编程技术网

Ruby 使用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

我正在使用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
}

要从特定位置获取图像,请执行以下操作:

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中保存图像。也许有更好的解决方案吗?希望这不是试图击败验证码。