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なのでレンタルサーバでも手軽に利用できるのが良いですね。