PerlのWebクライアントライブラリ
先日、Web::ScraperというPerlモジュールを初体験したのですが、これが非常に便利です。「今日のCPANモジュール」で紹介されているように、対話式のコマンドラインインターフェースがあって、これで実験しながらスケルトンを作成できるのも便利。Web::ScraperはHTMLの解析に強いのですが、クローリングに強いWWW::Mechanizeと組み合わせるとその素晴らしさは筆舌に尽くし難いものがあります。
ちょっと感動したので、今まで自分が使ったことのある、PerlのWebクライアントライブラリの系譜をまとめてみました。これを、以下のように理解して、使い分けています。
- クローリングのトレンドはWWW::Mechanize、Plagger、Gungho辺りを使い分け
- クローリング系ライブラリの基本はLWPとHTTP::*、どのライブラリでもこれらの知識は必要(たぶん必須)
- HTMLパースのトレンドはHTML::TreeBuilder::XPathを中心に、使えるところではWeb::Scraper
- ほんのちょっとのHTMLパーシングや特定のコメントタグ間(たとえばgoogle_ad_section)を抜き出したい時はHTML::TokeParserかHTML::TokeParser::Simple
図のコメントは私の個人的な使用感、使い分けについても、多分こうだろうと思うのですが、最近のPerl界の動向を追いかけられてないので、もしかしたらもう違うかもしれません。ただまず間違いないところでは、本気でPerlでWebクライアントする気なら「HTTP::LiteとかLWP::Simpleいいよね、パースは正規表現で」とか言ってないで、LWPを使い始め、その先の世界に踏み込むのです。絶対便利だから。
余談だけど、Web::Scraperは一昨日使い始めたのだけど、コードを晒してWassrで突っ込みをもらって修正して、で一気に理解できました。「わからないことは、決して恥ずかしいことじゃない」の話そのまま。
Wassrで悲鳴をあげてはtokuhiromさんに「Web::Scraper::Filterのドキュメントなんて現存しないから」とコードを教えてもらい、コードを晒せば「Scraper入れ子でok」とotsuneさんに添削され、自分で調べてたらいつまでも「わかんねーよー」と悲鳴をあげ続けるところを3時間でマスターしました。しかしこういうことには、今使ってるTumblrとかVoXは、トラックバックやオープンなコメントのやり取りができない分、弱いな。