perl でリンクを抽出する
perl でリンクを抽出するには HTML::LinkExtor モジュールを使うのが便利だ。
$p = HTML::LinkExtor->new([$callback[, $base]]);
まずは LinkExtor オブジェクトを作るわけだが、 callback 関数を指定しておくと、
リンクを見つけるたびに callback 関数が呼び出される。
callback 関数を指定していないときは
$p->links で
含まれるリンクを明示的に読み出すことができる。
$base を指定しておくと、相対パスで指定されたリンクを
自動的に $base を基準にしたものとみなして絶対パスに直してくれる。
文字列からリンクを抽出したいときは
$p->parse($strings)
とするが、
ファイルからリンクを抽出するときは
$p->parse_file($filename)
とする。
では、http://www.augustus.to/ に含まれるリンクを抽出してみよう。
use LWP;
use HTML::LinkExtor;
$url="http://www.augustus.to/";
$browser = LWP::UserAgent->new;
$response = $browser->get($url);
$p = HTML::LinkExtor->new(\&callback,$url);
$p->parse($response->{_content});
sub callback {
my($tag, %links) = @_;
print "$tag @{[%links]}\n";
}
callback 関数を使わないならこんな感じ。
use LWP;
use HTML::LinkExtor;
$url="http://www.augustus.to/";
$browser = LWP::UserAgent->new;
$response = $browser->get($url);
$p = HTML::LinkExtor->new(unlink(),$url);
$p->parse($response->{_content});
for $x ($p->links){
print join(" ", @{$x}),"\n";
}
Posted by augustus at 2004年08月03日 08:54
| TrackBack