Sunflat のブログ

ソフトウェア開発についての話題が多いかも

Webスクレイピング

最近、Webスクレイピング(ウェブサイトを自動巡回して、ウェブページのデータを必要な部分だけ抽出して利用すること)をするツールを作ったので、スクレイピングに使えそうなライブラリ等のまとめ。

スクレイピング部分はRubyで、GUI部分はJavaで書いたので、RubyJavaを行ったり来たりで面倒だった。全部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ツリーを作成してくれる。

XPathCSSを組み合わせた感じの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!

http://scrubyt.org/

結果として欲しいテキストを例示することによって、HTMLページ内からその要素を抽出するQuery(XMLツリー内でのパス)を自動生成するツール(多分)。
発想は面白いけど、まだ不安定な感じ。今回は使ってない。

Selenium

http://www.openqa.org/selenium/

JavaScriptを使って、InternetExplorerやFireFoxを自動で操作するツール。
スクレイピングというよりは、Webサイトの自動テスト用。


Selenium IDEというFireFoxプラグインを使えば、Webページ内の要素をクリックするだけで、簡単にスクリプトが書ける。
今回は使ってないけど、便利そう〜。いつか使おう

rjb (Ruby Java Bridge)

http://rjb.rubyforge.org/

RubyからJavaを呼び出すライブラリ。シンプルで使いやすい。
RubyクラスにJavaインタフェースをbindすることにより、JavaからRubyへコールバックすることも可能。
RubyのStringとJavaのStringを相互変換してくれるのだが、JavaからRubyへコールバックする時のみ、引数のStringを変換してくれないみたい?(謎)

jEdit

http://www.jedit.org/

Javaで書かれてテキストエディタRuby用のプラグインを入れると、構文強調したり、Rubyソースコードを解析して関数一覧リストとかを作ってくれる。
GUIが一般的なWindowsアプリケーションと違うのでとまどうけど、慣れれば結構使える?

jEditのConsoleでRubyを実行すると、Ruby内でランタイムエラーが発生した時に、ソースコードの行数を表示してくれるのだが、Windowsでは改行コードの関係でうまくパースしてくれないみたい。Plugin OptionでError Patterns(Generic)の正規表現パターンの行頭に"\s*"を付けたら直った。