[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
HTML::Parser について使い方がなかなか分からなかったので書いておく。
parser を提議させ、その parser の parse 関数を実行すると parse 関数に渡した html を解析してくれる。
一気に解析して木を作ってくれるわけではない。HTML を上から順番に見ていき、開始タグ、終了タグ、なんでもない文章、コメントといったものを1つ1つ見つけるごとに関数を実行する、という挙動をする。そのため、parser を定義するときは「〇〇を見つけたらこの関数を実行してね」という話をする。
上述の 開始タグ、終了タグ、なんでもない文章、コメントといったもの
を event と呼んでいる(一覧)。この各イベントに対して見つかった際に実行する関数(handler)を定義することで parser を定義するのである。後述の例は イベント名_h というのがやたら出てくるが「〇〇というイベントに対応する handler」を定義しているのである。例えば開始タグのイベントに対しては when_open_tag_found という関数を handler として割り当てている([\&when_open_tag_found, "self, tagname, attr"])。
色々渡せる(一覧)。後述の例では start には tag 名称とその要素に当てられた属性を handler に渡している([\&when_open_tag_found, "self, tagname, attr"])
use HTML::Parser ();
use LWP::UserAgent;
print "start\n";
my $browser = LWP::UserAgent->new;
my $response = $browser->get("http://shunshun94.example.com/index.html");
my $parser = HTML::Parser->new(
api_version => 3,
start_h => [\&when_open_tag_found, "self, tagname, attr"],
end_h => [\&when_close_tag_found, "self, tagname"],
text_h => [\&when_text_found, "self, text"],
comment_h => [\&when_comment_found, "self, text"]
);
$parser->parse($response->content);
print "finish!\n";
sub when_open_tag_found {
my ($self, $tagname, $attr) = @_;
print "OPEN $tagname\n";
}
sub when_close_tag_found {
my ($self, $tagname) = @_;
print "CLOSE $tagname\n";
}
sub when_text_found {
my ($self, $text) = @_;
print "TEXT $text\n";
}
sub when_comment_found {
my ($self, $text) = @_;
print "COMMENT $text";
}
ただいまコメントを受けつけておりません。