日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: RSS(ツッコミ付き) / RSS(ツッコミ抜き) / LIRS)
- p (01/03)
- Thiramil (10/26)
- 久々にいまむらを食べたい通りすがり (09/28)
- Fluxadir (05/16)
- Antiprestin (11/08)
2006/10/04
_ [Perl] HTML::TreeBuilder イイ
HTML の解析処理にはこれまで HTML::Parser とか HTML::TokeParser とか使ってきましたが、どちらもどうにもまどろっこしくてイライラしてました。
で、Perl で CSS セレクタ@naoyaのはてなダイアリーや HTML::Selector::XPath をリリース@blog.bulknews.net 等で HTML::TreeBuilder が使われているのを見て使ってみましたが、DOM っぽく操作できてかなりいい感じです。
とりあえず、指定した URL から HTML をゲットして画像の ALT 属性を展開しつつ全ての A 要素のリンクテキストと URL を表示するテスト
use strict;
use HTML::TreeBuilder;
use LWP::Simple;
use URI;
# 引数
die 'usage: foobar.pl URL' if ($#ARGV != 0);
my $url = $ARGV[0];
# HTML Tree 作成
my $tree = new HTML::TreeBuilder;
$tree->parse(get($url));
# alt 属性を持つ要素はそのテキストで置換する
for my $img ($tree->look_down('alt', qr/.*/)) {
$img->replace_with($img->attr_get_i('alt'));
}
# 全ての A 要素のテキストと URL と絶対化した URL を取り出す
for my $a ($tree->find('a')) {
print join("\t",
$a->as_text,
$a->attr_get_i('href'),
URI->new_abs($a->attr_get_i('href'), $url)
), "\n";
}
use HTML::TreeBuilder@hPod あたりも参考になりました。
というわけでさよなら HTML::TokeParser。
