by Hippo2000(2001/1/25)
HTML::LinkExtorなのです。
なお内容等が間違っていたら修正します。ご連絡ください。
HTML::LinkExtor - HTMLドキュメントからリンクを取り出す
require HTML::LinkExtor;
$p = HTML::LinkExtor->new(\&cb, "http://www.sn.no/";);
sub cb {
my($tag, %links) = @_;
print "$tag @{[%links]}\n";
}
$p->parse_file("index.html");
HTML::LinkExtor はHTMLドキュメントからリンクを取り出すHTMLパーサーです。 HTML::LinkExtor はHTML::Parserのサブクラスです。つまり$p->parse() または $p->parse_file()メソッドを呼び出すことによりパーサーにドキュメントを与えなければなりません。
見つかったURLを絶対化するために使われる$base引数はオプションのbase URLです。もし$baseを与えたいのであれば、URIモジュールをインストールしておく必要があります。
[$tag, $attr => $url1, $attr2 => $url2,...]
$p->links メソッドは内部のリンクリストを切り捨てもします。つまりもし途中で解析することなくメソッドが2度呼ばれると、2番目の呼出しは空リストを返します。
またHTML::LinkExtor が作成されたときに、コールバック・ルーチンが与えられれば、$p->linksは常に空を返します。
LWPを使って受け取られたドキュメントからリンクをどのように取り出すことができるかということを示す例です。
use LWP::UserAgent; use HTML::LinkExtor; use URI::URL;
$url = "http://www.sn.no/";; # 例 $ua = new LWP::UserAgent;
# イメージ・リンクを集めるようにコールバックを設定
my @imgs = ();
sub callback {
my($tag, %attr) = @_;
return if $tag ne 'img'; # we only look closer at <img ...>
push(@imgs, values %attr);
}
# パーサーを作成。残念ながらまだbaseを知りません。 # (it might be diffent from $url) $p = HTML::LinkExtor->new(\&callback);
# ドキュメントを要求し、届いたら解析します
$res = $ua->request(HTTP::Request->;new(GET => $url),
sub {$p->parse($_[0])});
# すべての image URLを絶対に展開する
my $base = $res->base;
@imgs = map { $_ = url($_, $base)->abs; } @imgs;
# それを出力する
print join("\n", @imgs), "\n";
HTML::Parser, HTML::Tagset, LWP, URI::URL
(原文のまま)
Copyright 1996-2000 Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。