[Perl] Web::Scraperが便利

PerlでHTMLから任意の部分を抽出するいわゆる”スクレイピング”を行うための手段やモジュールは数多存在しますが、中でも最近知った「Web::Scraper」というモジュールはなかなか使えます。

これまでスクレイピングを行う際は HTML::TreeBuilder を主に使っていたのですが、その場合は次のようなコードを書いてました。

use HTML::TreeBuilder;

my $tree = HTML::TreeBuilder->new();
$tree->parse($html);

my $title = $tree->look_down(_tag => 'h1')->as_text();
my $body  = $tree->look_down(_tag => 'div', id => 'abc')->look_down(_tag => 'div', class => 'xyz')->as_HTML(q{"&}, undef, {});

同様の処理をWeb::Scraperで行うとこんな感じ。

use Web::Scraper;

my $scrape = scraper {
process 'h1',              'title'  => 'TEXT';
process 'div.abc div.xyz', 'body'   => 'HTML';
}->scrape($html);

my $title = $scrape->{title};
my $body  = $scrape->{body};

抽出条件をCSSセレクタ方式で書けるので、見た目にもスッキリしたソースになります。

Web::Scraper自身はPure Purlなのでレンタルサーバでも手軽に利用できるのが良いですね。

追記 (2009/04/26)

古いPerl環境やレンタルサーバに於いてWeb::Scraperで抽出した文字が化けることがありました。

Web::Scraperが依存するHTML::TreeBuilderのバージョンが古い為に起こる現象のようなので、アップデート可能な環境であれば最新化しておきましょう。レンタルサーバをお使いでモジュール更新が難しい場合は、CPANから最新のHTML::TreeBuilderを取得してuse libしてやることでも回避可能です。

    この記事へのコメント

    メールアドレスが公開されることはありません。

    頂戴したコメントは管理者に承認されるまで表示されません。