なんかリンク抽出してみた。
Perlでウェブページからリンク抽出してみよう!
そう思ったのは大学の講義でGoogleのPageRankアルゴリズムを習ったからだと思います。リンクの抽出ができたあたりで満足しました。
CPANって偉大じゃねーかな思いました。そして俺はさっさと月曜締め切りのPageRankとマルコフ行列がほげほげとかいう感じのレポートを書けと思いました。
実行結果こんな感じ
% ./getlink.pl http://konbu.s13.xrea.com/ 1 http://konbu.s13.xrea.com/etc/profile.html 1 http://konbu.s13.xrea.com/lib/index.html 1 http://www.xrea.com/ 1 http://d.hatena.ne.jp/hogelog/ 1 http://ad.xrea.com/ad_click.fcg?site=konbu.s13.xrea.com % ./getlink.pl http://d.hatena.ne.jp/hogelog/ 1 http://d.hatena.ne.jp/hogelog/20061123 2 http://d.hatena.ne.jp/hogelog/20061121#p1 1 http://d.hatena.ne.jp/hogelog/20061125#p1 4 http://d.hatena.ne.jp/hogelog/searchdiary?word=%2a%5bScheme%5d ... % ./getlink.pl getlink.pl URI % ./getlink.pl httpps://ijie.com/ Invalid URI
リンクの個数と、リンクURLを表示します。
ソース
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use HTML::LinkExtor;
my $baseuri = shift;
our $links = {};
if(!defined($baseuri)){
print "getlink.pl URI\n";
}
elsif($baseuri =~ /s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/){
get_links($baseuri);
while(my ($uri, $count) = each(%$links)){
print "$count $uri\n";
}
}
else{
print "Invalid URI\n";
}
sub get_links{
my ($uri) = @_;
my $parser = HTML::LinkExtor->new(\&cb, $uri);
my $page = get($uri);
$parser->parse($page);
}
sub cb{
my ($tag, %link) = @_;
if($tag eq 'a'){
++$links->{$link{href}};
}
}