monthly gimite

試験運用中。

REXML→scrapiでやたらと速くなった

secondlifeさんの記事を読んで、とあるWebページから情報を抽出する*1ためにREXMLでごにょごにょしてたやつをscrapiで書き直してみました。

ソースも簡潔になったんですが、なんかむちゃくちゃ速くなりました。具体的には、1MB程度のHTMLファイルを解析するのに3分ぐらいかかってたのが、7秒になりました。

REXML版はDOM Treeを作るところがボトルネックみたいです。scrapi版もHTMLParser使ってるんで、両方ともPure Rubyなんですけどね…。

そーいやこの手のものを作るときって、「DOM Treeを作成→XPathで検索」より「正規表現でそれっぽい部分を探す→その辺だけ解析*2」の方が速そうな気がしますけど、そういうのをXPathを与えるだけで自動でやってくれるようなライブラリなんてないんでしょうか。

*1:のをスクレイピングというらしい。

*2://li というXPathならまず/