Ruby Mechanizeを使用したスクレイピングのサンプル・例を記載します。
一括での画像収集も出来ました。
見出し
img src の jpg png を imgディレクトリに保存する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# -*- 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 のパスを表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# -*- 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 |
ログインをしてから該当クラスの画像を一括保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# -*- 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ディレクトリに保存するがリンク切れなどで存在しない画像は飛ばす
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# -*- 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名を指定する場合
1 |
page.images_with(:class => "test_class") |
idとclassを合わせて指定する場合
1 |
page.images_with(:id => /test_id/, :class => "test_class") |
注意点
スクレイピング先に負荷がかかるのでsleepを入れました。