2007-02-26

_ 最近の夢想

mechanizeは便利だけれど、 いろいろと不満があって。

元々Mechanizeって、 PerlのWWW::Mechanize が最初で、 Pythonのmechanize はPerlのをごっそり移植したのが始まり(最近は結構違ってしまっている)、だと思う。 Rubyのmechanize は多分Perlの方を中心にパクっているんだと思うが、 さっぱり敬意 経緯が示されていないので、本当のところは知らない。

私はPython版mechanizeしか真面目に使ったことはないのだけれど、 mechanizeの問題点は(どの実装かにもよるけど)、 次のようなものである。

  • XPathやCSS Selectorとの相性が悪い。clickするのにXPathで指定したりできない(と思う)。
  • 微妙にもっさり重い。
  • JavaScriptが分からない。

第一の問題は、ただタグを取ってきたいだけなら、 ソースを適当なパーザに放りこめばいいのだけど、 それだと結果がmechanizeにフィードバックできないのが辛い。 ここんところがちゃんとインテグレートされて欲しい。 っつーか、mechanizeの独自APIは覚えることが増えて面倒だから、 なくなってもいい。

第二の問題は、結局この手の作業にPerl/Python/Rubyのような言語で最適化するのは辛いからだと思う。 書きやすく、拡張しやすいのはいいんだけど、 やっぱりエンジンはC辺りで書いててくれたら、もうちょっと軽快な気がする。 一個しか使わないんだったら気にならないレベルなんだけど、 100個ぐらい使おうとすると、かなり痛い。 っつーか、 一個でいいなら、 こういうの でいいんでね?と最近思う。

第三の問題は、昨今のJavaScriptぐりぐりページに対応するのに、 いまさらJavaScript無視なブラウザでは相当な限界があるから、 本当に困る。

それで、 どうせならJavaScriptを初めから意識して作ったmechanizeみたいなのがあったらいいんでない?とか思った。 で、思っていると、 最近の HttpUnit はJavaScriptもサポートしているってことに気づいた。 しかしJavaなんだよな... 他の言語とバインディングが作れれば、別にいいか。 どのぐらいの性能が出て、 どのぐらいJavaScript使いまくりのページに対処できるのか、 一度試してみんといかんな。

[]