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

    このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。

    reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

    頂戴したコメントは管理者に承認されるまで表示されません。また、メールアドレスが公開されることはありません。
    このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。