Perlでお気に入りのWebページをパースしよう|LWP::UserAgentとHTML::TreeBuilderの使い方

2019年3月1日

PerlでWebページをパースする基本的な方法と、よく使われるモジュールの使い方・注意点をまとめます。実際に動くサンプルコード付きです。

PerlでWebページを取得・パースする流れ

  • LWP::UserAgentでHTMLを取得
  • HTML::TreeBuilderでパースし、タグや属性で要素を抽出

サンプルコード

use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;

my $url = 'https://example.com'; # 取得したいページURL

# UAの生成
my $ua = LWP::UserAgent->new(timeout => 10);

# ページ取得
my $response = $ua->get($url);
die "Failed to fetch $url: " . $response->status_line unless $response->is_success;

my $html = $response->decoded_content;

# パース
my $tree = HTML::TreeBuilder->new;
$tree->parse($html);

# 例:h2タグを全て抽出
my @h2s = $tree->look_down(_tag => 'h2');
foreach my $h2 (@h2s) {
    print $h2->as_text, "\n";
}

$tree->delete; # メモリ解放

上記のように、LWP::UserAgentでページ取得し、HTML::TreeBuilderでタグや属性を指定して要素を抽出できます。
他にも、classやid属性、リンクや画像なども同様に取得可能です。

よく使うモジュールの特徴

  • LWP::UserAgent … HTTP通信の標準。CookieやPOSTも対応。
  • LWP::Simple … 取得だけならシンプル。
  • HTML::TreeBuilder … HTML構造をツリー状に扱える。タグや属性で要素抽出が簡単。
  • HTML::Parser … より低レベルなパースやカスタム処理向き。

注意点・補足

  • 日本語ページや文字コードはdecoded_contentで自動変換される場合が多い。
  • robots.txtや利用規約を守ること。
  • 大量アクセスやログインが必要な場合はCookie管理やアクセス間隔に注意。

まとめ

LWP::UserAgentとHTML::TreeBuilderを使えば、PerlでのWebページ取得・パースはシンプルに実装できます。
今後はパース処理の応用例や、HTML::Parserの使い方、データの保存方法(CSV, DB等)も紹介予定です。

最後まで読んでいただきありがとうございました。

技術

Posted by xxoruioxx