Rubyでスクレイピングをする際に調べたこと


基本的なライブラリ

Open-URI
    * http/ftpに簡単にアクセスするためのライブラリ
    * Kernel#openを定義
    * ファイルのopenと同様にURLを扱える
Nokogiri(静的なものに限る)
    * HTML/XMLの構文解析器(パーサー)
    * ほぼデファクトスタンダード
    * XPath or CSSセレクタでHTML中の要素を選択
    * UTF-8以外の文字コードを扱う場合は注意
Mecanize(動的・ステートフルなクローラ)
    * 対話型の為、ログインしてデータをクローリングするなどに使用出来るが、javascriptには対応していない。

クローラーフレームワーク

Anemone(静的・ステートレスなクローラ、イマイチ感あり)
    * Ruby製のフレームワーク
    * データ収集/解析/保存のすべての機能がある
    * 6年ほどメンテされていない
    * ScrapyのあるRubyが羨ましい今日このごろ
Selenium(jsを使った動的なページの取得の際に使う)
    * ログインページへのログイン(http://iwathi3.hatenablog.com/entry/web_scraping_Ruby_Selenium)
    * Seleniumの弱点(https://qiita.com/justin999/items/55fbfd5d4f9fc8e5e77d)
        * 手軽だが遅い
        * ページを一回一回レンダリングするので時間がかかる。
            * Headress Chromeを使えばあまり関係ない?
        * ローカルで動かすのとサーバー上で動かすのに環境が違う
        * chrome driverのインストールが面倒
Capybara(javascriptが必要なページのクローラ)+Selenium
    * 基本的にはUIテストツール
    * ブラウザを使うのでjsにも対応可能
    * スクレイピング部分はNokogirを使用
    * CapybaraをラッパーにしたMasqueというクローラー
    * ブラウザ代わりに、PhantomJSを使うのもあり
cosmiccrawler
    * 並列処理を得意とするクローラー
    * 並列処理の実装は、EventMachine
    * EventMachineのめんどくさい処理を隠蔽してくれる

補助的なライブラリ

CocProxy
    * ほぼピュアRubyで実装されたプロキシサーバ
    * 開発用途でクローラー作成時に便利
    * 訪問済みサイトをキャッシュしてくれる
    * 訪問先サイトに無駄に負荷をかけずに試行錯誤できる

参考: