Rubyでのスクレイピング・クローラー開発記録(データベース系サイトのデータ収集用)

Rubyでのスクレイピング・クローラー開発記録(データベース系サイトのデータ収集用)

データベース系サイト用にデータ収集クローラーを開発してみることにしました。その記録をこちらに記載していきます。

この記事は随時追記していくタイプの記事です。

 

↓はデータベース系サイトの開発記録です。ここから派生した開発です。

https://normalblog.net/system/cakephp_search_site/

 

https://normalblog.net/system/ruby_crawler/

↑こちらの書籍を参考・羅針盤として進めていきたいと思います。

2016/10/25の開発記録

クローラーの初歩wgetを実践しました。

https://normalblog.net/system/comand/

wgetの次はRubyでクローラー開発に入るのでrbenvのインストールをしました。

https://normalblog.net/system/install/

2016/10/28の開発記録

rubyの勉強をしました。

https://normalblog.net/system/mymemo/

2016/11/27-28の開発記録

上の参考書籍ベースでrubyの勉強をして以下に追記しました。

https://normalblog.net/system/mymemo/

rss出力のサンプル作成をした。

2016/12/9の開発記録

書籍ベースで10分クローラー(まだ第1章)を作成

2016/12/28の開発記録

書籍ベースでopen-uriを実践

2016/12/29の開発記録

Nokogiri、Anemoneをインストール

https://normalblog.net/system/nokogiri-install/

https://normalblog.net/system/crawler-anemone/

amazonの書籍ランキングをAnemoneで取得するサンプルを実施。

2016/12/30の開発記録

amazonの書籍ランキングをAnemoneでRSSから取得するサンプルを実施。

ブラウザタイプのクローラーを作成する準備。

https://normalblog.net/system/poltergeist-install/

https://normalblog.net/system/selenium-webdriver/

https://normalblog.net/system/phantomjs-install/

2017/1/30の開発記録

WindowsのブラウザでクローリングしたかったのでWindowsへ入れ直す。

windowsへのRubyをインストールした。

http://rubyinstaller.org/downloads/

windowsへのwebsocket-driverをインストールした。

https://normalblog.net/system/windows-websocket-driver/

PhantomJSをWindowsへインストールした。

https://normalblog.net/system/phantomjs-install/

poltergeistをWindowsへインストールした。

https://normalblog.net/system/poltergeist-install/

windowsへのpoltergeistのインストールに必要だったwindowsへのRubyDevKitもインストールした。

https://normalblog.net/system/windows-ruby-devkit/

windowsへのselenium-webdriverもインストールした。

 

全部インストールしたのにamazonのログインクローラーがエラーになる。

今度はこれの調査から。

C:\Users\test\works\sakura\src\crawler\capybara>ruby login-amazon.rb
C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib/selenium/web
driver/common/service.rb:59:in `binary_path': Unable to find Mozilla geckodrive
r. Please download the server from https://github.com/mozilla/geckodriver/releas
es and place it somewhere on your PATH. More info at https://developer.mozilla.o
rg/en-US/docs/Mozilla/QA/Marionette/WebDriver. (Selenium::WebDriver::Error::WebD
riverError)
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver/common/service.rb:49:in `initialize'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver/firefox/w3c_bridge.rb:31:in `new'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver/firefox/w3c_bridge.rb:31:in `initialize'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver/common/driver.rb:52:in `new'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver/common/driver.rb:52:in `for'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-3.0.5/lib
/selenium/webdriver.rb:82:in `for'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/capybara-2.12.0/lib/capybara
/selenium/driver.rb:22:in `browser'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/capybara-2.12.0/lib/capybara
/selenium/driver.rb:55:in `visit'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/capybara-2.12.0/lib/capybara
/session.rb:252:in `visit'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/capybara-2.12.0/lib/capybara
/dsl.rb:52:in `block (2 levels) in <module:DSL>'
 from login-amazon.rb:17:in `login'
 from login-amazon.rb:28:in `<main>'

2017/2/12の開発記録

2週間ぶりになってしまった・・・

↑のエラーのままだったので調べました。

結局geckodriveのパスを指定しても治らず、そもそもseleniumが新しくなるとgeckodriveを使用するようになったようで、seleniumがver2系だとgeckodriveを使わないようです。

という事で

$ gem install selenium-webdriver-2.53.4

をしてみて再度実行しました。

$ ruby selenium-yahoo-test.rb
C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:90:in `connect_until_stable': unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:55:in `block in launch'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/socket_lock.rb:43:in `locked'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/launcher.rb:51:in `launch'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/firefox/bridge.rb:43:in `initialize'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `new'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver/common/driver.rb:53:in `for'
 from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/selenium-webdriver-2.53.4/lib/selenium/webdriver.rb:84:in `for'
 from selenium-yahoo-test.rb:4:in `<main>'

が、またエラー。

何故か良くわからないのですが、再び

$ gem install selenium-webdriver

で最新のものをインストールしたら治りました。

2017/2/13-16の開発記録

ひたすら対象サイトのクローラー作りに励んでいるところです。(本来したかった対象サイトではなく収集したいサイトで練習中です)

結局今回参考にしようとした書籍通りだと環境が難しかったのでqiitaに出ている色々な情報をあさりました。

mechanizeを使うと簡単でした。何かできたら別途書きます。

https://normalblog.net/system/mechanize-install/

2017/2/19,21,22,24の開発記録

写真を載せてくれているサービスを先ずクローリングしてみようとしたのですが、javascriptを使用しており、capybara・mechanize・seleniumを駆使してやってみようとしましたが、javascriptを読み込んでかつ写真を保存するのが難しくて、事例が見つけられず色々試してみてみたものの、八方ふさがりでわかりませんでした。

この写真サービスのクローリングは諦めて、本来のデータベース構築用に向けて対象サイトをmechanizeでクローリングして画像収集したらあっさりと出来ました。こっちのサイトもjavascriptでのポップアップだと思ったのですがそうではなかったので簡単でした。

今ゆっくりとクローリングしてcsvに出力している作業中です。

明日からはデータベースにクローリングデータの投入作業になります。全部投入したらこのクローリングシステムは一旦終了です。

終わりが見えてきた・・・。

ひとまず完了

クローリングして収集したデータ投入が2月で終わりましたので完了にします。

簡易的なクローラーでしたが、これで色々なサイトを作る事になってもデータ収集というスキルが少し身に着ける事が出来ました。

環境のバージョンが本とは変わっていたりなどで、なかなか本通りに進める事が出来ませんでしたが、web上で「スクレイピング」「クローラー」「capybara」「mechanize」「selenium」と検索すると参考情報が多数出てくる時代でしたので、通勤時間に片っ端から読んでいってようやく1つの正解手法にたどり着く事が出来ましたので、本当にやって良かったです。

スクレイピングサンプルはこちら↓

https://normalblog.net/system/ruby-mechanize/

ではデータ投入先のこちらに戻ります。↓

https://normalblog.net/system/cakephp_search_site/

Comments

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

コメントを残す

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