HTML::TreeBuilderによるパース(タグとテキストを全表示)
ここでは、取得したHTTPメッセージのbody部分に含まれるHTMLを解析してタグ名とテキスト情報を抽出する方法を説明します。
HTTPクライアントサンプル
以下にHTTP::LiteとHTTP::TreeBuilderを利用したクライアントを示します。
まず、<BODY>タグをfindによって取得しています。 次に、取得したBODYタグに含まれるタグとテキスト情報を再帰的に抽出しています。
#!/usr/bin/perl
use HTTP::Lite;
use HTML::TreeBuilder;
$http = new HTTP::Lite;
# URL部分を変更して下さい
$req = $http->request("http://www.hogehogeURL.com/") || die $!;
$body = $http->body();
$tree = HTML::TreeBuilder->new;
$tree->parse($body);
$tree->eof();
# <BODY>タグを表現するHTML::Elementを取得
$body_tag = $tree->find('body');
print_element($body_tag);
exit;
# タグとテキストを再帰的に表示
sub print_element()
{
local $e = @_[0];
local @elements = $e->content_list();
if ($#elements < 0) {
# childが一つも無ければ終了
return;
}
local $i;
# 各Elementを表示
for ($i = 0; $i <= $#elements; $i++) {
# HTML::Elementならばタグ情報を表示
if (ref $elements[$i] eq "HTML::Element") {
print "TAG : " . $elements[$i]->tag . "\n";
print_element($elements[$i]);
} else {
# 文字列として表示
print "TEXT :\n";
print $elements[$i];
print "\n";
}
}
}