Perlでお気に入りのWebページをパースしよう|LWP::UserAgentとHTML::TreeBuilderの使い方
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等)も紹介予定です。
最後まで読んでいただきありがとうございました。
ディスカッション
コメント一覧
まだ、コメントがありません