« perl で cookie を取得 | メイン | CSV の行を分解 »
2004年08月03日
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"; }
投稿者 augustus : 2004年08月03日 08:54
トラックバック
このエントリーのトラックバックURL:
http://www.augustus.to/cgi-bin/blog/mt-tb.cgi/65