日記+コメント付きブックマーク+他人にも役に立つかもしれない情報など。
(更新情報: 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。