7

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
}
4

1 に答える 1

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))}
于 2013-02-13T21:13:30.670 に答える