Webスクレイピング
最近、Webスクレイピング(ウェブサイトを自動巡回して、ウェブページのデータを必要な部分だけ抽出して利用すること)をするツールを作ったので、スクレイピングに使えそうなライブラリ等のまとめ。
スクレイピング部分はRubyで、GUI部分はJavaで書いたので、RubyとJavaを行ったり来たりで面倒だった。全部Javaで書いちゃえばよかったかなぁ…
ちなみに作ったのは、広告代理店のWebページから、広告一覧と掲載用テキストを自動取得するツール。
WWW::Mechanize
http://mechanize.rubyforge.org/
Ruby用の、HTTPクライアントライブラリ。仮想的なWebブラウザをプログラムから操作して、ウェブサイトを自動巡回できる。
フォームの読み取りやリンクの抽出などもできて、自動巡回スクリプトがサクっとかける。
ちなみにJavaだと、Commons HTTP Client(http://jakarta.apache.org/commons/httpclient/)が良いと思う。(フォーム読み取り機能とかは無い)
hpricot
http://code.whytheluckystiff.net/hpricot/
ruby用のHTMLパーサ。WWW::Mechanizeが使っている。
ちゃんと書かれていないHTMLページをうまく解析して、XMLツリーを作成してくれる。
XPathとCSSを組み合わせた感じのQuery言語で、XMLツリーの中の要素を簡単に取得可能。
参考: http://mono.kmc.gr.jp/~yhara/d/?date=20070205
ちなみにJavaだと、JTidyが良いのかな? 試してない。
参考:http://www-06.ibm.com/jp/developerworks/java/050331/j_j-jtp03225.html
scRUBYt!
結果として欲しいテキストを例示することによって、HTMLページ内からその要素を抽出するQuery(XMLツリー内でのパス)を自動生成するツール(多分)。
発想は面白いけど、まだ不安定な感じ。今回は使ってない。
Selenium
http://www.openqa.org/selenium/
JavaScriptを使って、InternetExplorerやFireFoxを自動で操作するツール。
スクレイピングというよりは、Webサイトの自動テスト用。
Selenium IDEというFireFoxプラグインを使えば、Webページ内の要素をクリックするだけで、簡単にスクリプトが書ける。
今回は使ってないけど、便利そう〜。いつか使おう
rjb (Ruby Java Bridge)
RubyからJavaを呼び出すライブラリ。シンプルで使いやすい。
RubyクラスにJavaインタフェースをbindすることにより、JavaからRubyへコールバックすることも可能。
RubyのStringとJavaのStringを相互変換してくれるのだが、JavaからRubyへコールバックする時のみ、引数のStringを変換してくれないみたい?(謎)