Ruby Mechanizeを使用したスクレイピングのサンプル・例

Ruby Mechanizeを使用したスクレイピングのサンプル・例

Ruby Mechanizeを使用したスクレイピングのサンプル・例を記載します。

一括での画像収集も出来ました。

img src の jpg png を imgディレクトリに保存する

# -*- coding: utf-8 -*-

require 'mechanize'

module Crawler
 class Normalblog
  def saveImage
   agent = Mechanize.new
   agent.user_agent = 'Windows Mozilla'
   page = agent.get('http://normalblog.net/system')

   page.images_with(:src => /(jpg)|(png)/).each do |img|
    sleep(5)
    img_str = img.to_s
    m = img_str.match(/([^\/]+jpg)|([^\/]+png)/)
    img.fetch.save_as("./img/" + m[0])
   end
  end
 end
end

crawler = Crawler::Normalblog.new
crawler.saveImage

img src のパスを表示する

# -*- coding: utf-8 -*-

require 'mechanize'

module Crawler
 class Normalblog
  def dispImage
   agent = Mechanize.new
   agent.user_agent = 'Windows Mozilla'
   page = agent.get('http://normalblog.net/system')

   page.search('img').each do |img|
    sleep(5)
    src = img.get_attribute(:src)
    puts src
   end
  end
 end
end

crawler = Crawler::Normalblog.new
crawler.dispImage

ログインをしてから該当クラスの画像を一括保存

# -*- coding: utf-8 -*-

require 'mechanize'

module Crawler
 class testSite
  def login
   agent = Mechanize.new
   agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
   agent.user_agent = 'Windows Mozilla'

   page = agent.get('https://testtest.com')
   response = page.form_with(:action => '/') do |form|
    formdata = {
     :mail => 'メール',  # mailはname
     :password => 'パス', # passwordはname
    }
    form.field_with(:name => 'mailaddress').value = formdata[:mail]
    form.field_with(:name => 'passwd').value = formdata[:password]
   end.submit

   agent.get('https://testtest.com') do |page|
    # 該当のクラスを指定
    page.search('.test_class').each do |item|
     item.images_with(:src => /(JPG)|(PNG)/).each do |img|
      sleep(3)
      img_str = img.to_s
      m = img_str.match(/([^\/]+JPG)|([^\/]+PNG)/)
      img.fetch.save_as("./img/" + m[0])
     end
    end
   end
  end
 end
end

crawler = Crawler::testSite.new
crawler.login

img src の jpg png を imgディレクトリに保存するがリンク切れなどで存在しない画像は飛ばす

# -*- coding: utf-8 -*-

require 'mechanize'

module Crawler
 class Test
  def saveImage
   agent = Mechanize.new
   agent.user_agent = 'Windows Mozilla'
   page = agent.get('http://testtest.com')

   page.images_with(:src => /(jpg)|(png)/).each do |img|
    begin
     sleep(10)
     img_str = img.to_s
     m = img_str.match(/([^\/]+jpg)|([^\/]+png)/)
     img.fetch.save_as("./img/" + m[0])
    rescue Mechanize::ResponseCodeError => e
     puts 'ResponseCodeError!! ' + img_str
    end
   end
  end
 end
end

crawler = Crawler::Test.new
crawler.saveImage

images_with

class名を指定する場合

page.images_with(:class => "test_class")

idとclassを合わせて指定する場合

page.images_with(:id => /test_id/, :class => "test_class")

注意点

スクレイピング先に負荷がかかるのでsleepを入れました。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です