bar_1

contents_map

2014年5月4日日曜日

Ruby関連HTML/Webスクレイピング・ライブラリまとめ 2014年版

2014年5月時点で、HTML/Webスクレイピングに使える Ruby 関連のライブラリたちについて、前回 (2010年) のまとめとの差分とともに、概要をまとめた。各々のライブラリの特徴と入手先、HP、インストール方法、ライセンスなどについて簡単に説明している。
今回扱っているのは、nokogiri, Mechanize, Selenium-webdriver, Capybara-webkit, poltergeist の 5 つ。Ruby 以外にも、PhantomJS, Yahoo!Pipes, ScraperWiki, kimono についても取り上げた。
一覧をまとめたのち、比較と評価、おすすめの用途について簡潔に述べる。



背景

2010年に「Ruby関連HTML/Webスクレイピング・ライブラリまとめ」として書いた記事では、次のような 6 つのライブラリを扱った: Hpricot (執筆当時のバーション 0.8.2。以下同様), Mechanize (1.0.0), ScrAPI toolkit (1.2.0), ScRUBYt! (0.4.06), nokogiri (1.4.3.1).
このうち、
  • Hpricot は、2014年5月現在、2 年前に開発を中止している (“Hpricot is over”)
  • ScrAPI toolkit は、2.0.0 が 3 年前にリリースされ、Ruby 1.9 系統をサポートしている。しかし、もう Ruby は 2.0 系統が主流と見ていいのではないか。
  • ScRUBYt! は、Hpricot と Mechanize, Ruby は 1.8 系統を前提とし、URLはリンク切れが目立つ。
であることが分かった。
よって、本記事ではこれらについては省く。
以下、前回の記事からの若干の補遺をおこないつつ、2014年5月現在最新のRuby関連HTML/Webスクレイピング・ライブラリの状況についてまとめる

nokogiri (1.6.1; 1.6.2.rc2)

nokogiri は、パーサである。前回からは管理者、ホスト場所が変わったようだ。
  • 説明
    Nokogiri は、HTML, XML, SAX, そして Reader のパーサのひとつ。Nokogiri
    の多くの機能の中には、XPath や CSS3 セレクタを通じてドキュメント内を
    検索できるものもある。(README.rdoc)
  • アップデート状況 2008-2014.
  • RubyGems.org https://rubygems.org/gems/nokogiri
  • インストール [sudo] gem install nokogiri
  • ソースコード https://github.com/sparklemotion/nokogiri
  • ライセンス The MIT License

Mechanize (2.7.3; 2.7.4.beta2)

Mechanize は、ヘッドレスなブラウザシミュレータである。ただし、JavaScript の処理はできない。バーション 1.0.0 から Hpricot ではなく nokogiri を採用している。現在はコードの管理も、nokogiri と同じ人たちがやっているようだ。
  • 説明
    Mechanize ライブラリは、Web サイト操作の自動化のために使われる。
    Mechanize は、自動でクッキーの格納・送信をし、リダイレクトをたどり、
    そしてリンクを追ったりフォームをサブミットしたりできる。フォームの
    フィールドたちは、値を埋めてサブミットできる。Mechanize はまた、履歴
    としてあなたが訪れたサイトたちのトラックを、保持することもできる。
    (README.rdoc)
  • アップデート状況 2005-2014.
  • RubyGems.org https://rubygems.org/gems/mechanize
  • インストール [sudo] gem install mechanize
  • ソースコード https://github.com/sparklemotion/mechanize
  • ライセンス The MIT License

selenium-webdriver (Selenium Client & WebDriver) (2.41.0)

Selenium については、前回の記事に入れるべきだった。Selenium はスクレイパーというよりは、Web サイトのテスト自動化のためのデバイス(ブラウザ)・ドライバとその API ライブラリだが、スクレイピングにも使うことができる。
Selenium は、ブラウザを直にコントロールするアプローチである。しかし いわゆる ヘッドレス (headless は首なしで、ここでの意味は画面表示なしということ) にもできる。対応ブラウザは、代表的なもの: Firefox, Chrome, IE はサポートされている。
ドライバ操作のためのクライアント言語は Ruby の他にも、Java, C#, Python, JavaScript (node.js) がある。
Selenium IDE (操作を記録して、テストケースの形としてコードを吐いてくれるブラウザ側のプラグイン) と、一緒に使うと、要素の指定コードを簡単につくれて、おすすめ (Excel でマクロの記録をするときのような感じで)。

Capybara (2.2.1), capybara-webkit (1.1.1)

もとは、Rails のインテグレーション・テストに使われていたそうだ。
Cucamber や capybara-webkit とともに 使うことで、Rails や JavaScript を使ったサイトのテストにも使えるそうだ (ただし capybara-webkit 使用時は、qt の用意も必要)。

poltergeist (1.4.0)

Poltergeist は、後述の PhantomJS のラッパーで Capybara と組み合わせて使う。
capybara-webkit よりも qt がないぶんいいかも?
  • 説明
    Poltergeist (ポルターガイスト) は、Capybara のためのドライバで、
    ヘッドレスな WebKit ブラウザとしてテストできるようにするもの。
    PhantomJSベース。(RubyGems.orgより)
  • アップデート状況 2013-2013
  • RubyGems.org https://rubygems.org/gems/poltergeist
  • インストール [sudo] gem install poltergeist
  • ソースコード https://github.com/teampoltergeist/poltergeist
  • ライセンス MIT

Ruby 以外、Web サービス

PhantomJS (v1.9)

Mechanize と似ているが、JavaScript を直にあつかう他、さらにいろんな機能を備えたものに、PhantomJS がある。ヘッドレス とは、画面表示を行わないブラウザということ。WebKit は、Mac OS X の標準ブラウザ Safari や Google が提供してるブラウザ Chrome が使っている HTML レンダラー。
使用例としては、テスティング・操作自動化・スクリーンキャプチャ・ネットワークモニタリングが挙げられている。X11 や qt など GUI ライブラリも使用していないので、レンタルサーバなんかでも、使える、とのこと。
  • 説明
    PhantomJS は、JavaScript API を使ったヘッドレス型の WebKit。高速で、
    いろんなWeb標準技術: DOM のハンドリング, CSS セレクタ, JSON, Canvas,
    SVG たちをネイティブにサポートしている。(HP の説明より)
  • アップデート状況 2010-2014
  • URL http://phantomjs.org/
  • ライセンス BSD
  • ソースコード https://github.com/ariya/phantomjs/
  • インストール Mac なら brew install phantomjs. もしくはダウンロードして解凍

Webサービス系

Yahoo!Pipes (2007-) US Yahoo! のサービス。GUI でHTMLの要素をいじれる。ただし、少し処理時間が重い。
ScraperWiki () は、スクレイパーコードを共有したり、編集したり、データを蓄積したりできるサイト。

ScraperWikiは、もともとイギリスで、どの議員がどの法案に賛成または反対票を投じたかを議会のサイトから創業者の一人が2003年頃にスクレイプしたことを起源に持ちます。
なんだそうな。

比較と評価

お手軽にスクレイピングしたい場合は、素のままの nokogiri、もしくは Mechanize を使うのがいいだろう。
ところが、これらは JavaScript が使われたサイト (とくに MS の.aspが使われているサイトとか) で、うまく機能しない場合がある。Cookie を使ったある種のプロテクトを掛けているようなサイトもある (筆者はこれでMechanizeを放棄した)。
こうなったときは、ブラウザの動作を完全にエミュレートするものを使うしかない。
Selenium か、リモートホストでやることが念頭にあるならば X (というかウィンドウシステム) との依存がない capybara+poltergeist の組み合わせを使うのがいいかも 。
Ruby を考慮に入れないのであれば、PhantomJS はかなり良さ気に見える。
プログラミングしたくない場合は、Web 系のスクレイピング・サービスを使ってみるのもいい。ただ、速度については遅いと思う (Yahoo!Pipes だけを使ってみた時の感想)。
※なお筆者は Capybara, PhantomJS についてはまだ触ったことがない。

0 件のコメント:

コメントを投稿

何かありましたら、どうぞ: