サーバサイドJavaScriptとjQueryでスクレイピング
jQuery でスクレイピングできたらセレクタ使えるし便利かなーと思ったりしたんですが、Rhino と env-js を使うと超簡単にできたのでレポートしてみます。
Rhino と env-js って何ぞい?
Rhino ってのは Java で書かれた JavaScript エンジンです。Rhino を使うとコマンドラインから JavaScript を実行できます。
Rhino には DOM が無いので単体では jQuery を実行することはできませんが、env-js という DOM ライブラリを使用するとこの辺はクリアできます。
env-js の中に jQuery を使ったサンプルがいくつか入ってますので、Java とか JavaScript とか詳しい方はそちらを見てもらった方が早いと思います。
使ってみる
まず env-js をビルドしないといけないのでその辺の手順から説明します。
とりあえず Rhino は Java で書かれてますので、動かすのに Java が要ります。あと env-js をコンパイルするのに ant が必要です。持ってなかったら以下のリンクからダウンロードして適当にインスコしてください。
インスコしたら github から env-js を clone し、Rhino 用の env-js をコンパイルします。
$ cd env-js
$ ant
Buildfile: build.xml
...
ant の実行が終わると、dist/env.rhino.js というのができます。これが Rhino 用の env-js です。
env-js には Rhino 本体と jQuery が添付されています。rhino/js.jar が Rhino、plugins/jquery.js が jQuery です。
env-js のソースツリーのまま使っても問題ありませんが、説明がややこしいので実行に必要なファイルを全部どこか適当なディレクトリにコピーします。実際にスクレイピングする際はこの辺はよしなにしてください。
cp dist/env.rhino.js rhino/js.jar plugins/jquery.js WHERE
cd WHERE
以上で準備は終わりです。早速 jQuery でサーバサイドスクレイピングしてみましょう。
動かしてみる
大筋を理解するために簡単な HTML をスクレイピングするコードを書いてみます。
まず HTML はこれ。exam1.html として保存してください。
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<ul>
<li><a href="http://www.google.co.jp/">Google</a></li>
<li><a href="http://www.yahoo.co.jp/">Yahoo</a></li>
</ul>
</body>
</html>
次に exam1.html をスクレイピングする JavaScript です。exam1.js として保存してください。
JavaScript では HTML ファイルから a タグを読み込み (a タグのテキスト, URL) の並びで CSV に出力しています。
// importPackage で Rhino から Java のクラスを直接使える
importPackage(java.io);
// env-js と jQuery をロード
load('env.rhino.js');
load('jquery.js');
// exam1.html を読み込む
window.location = 'exam1.html';
// document.ready を手動で起動する必要あり