なんかリンク抽出してみた。
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}}; } }