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を入れました。

