BLOGinSPACE
インストール型ブログ
セキュリティコード
GoogleSitemapsジェネレータ
サイト探索
Google Sitemaps
Flash programming リンク集
Perl & CGI リンク集
PROGRAMING リンク集
プログラミング言語の種類
ActivePerl
Perlドキュメント(和訳)
Perlデータ構造
Apache JP
Apache 中核機能
« Google Sitemaps | index | GoogleSitemapsジェネレータ »
Google Sitemaps ジェネレーターを作るにあたり、ネットワークから
サイト内のリンクをたどり、同一サイト内のURLを抽出するスクリプトを作ってみた
Code: download
- use LWP::Simple qw(get head);
- use HTML::LinkExtor;
- use strict;
- my(%seen,%mod_time,%out,$site,$top_url);
- $top_url = 'http://sieg.xeong.com/';
- $top_url = "http://$top_url" unless $top_url =~ /^https?\b/;
- ($site = $top_url) =~ s/^(http:\/\/.+\/).*$/$1/;
- $site .= "/" unless ($site =~ /\/$/);
- linker($top_url);
- sub linker {
- my $base_url = shift;
- my $parser = HTML::LinkExtor->new(undef, $base_url);
- $parser->parse(get($base_url))->eof;
- my @links = $parser->links;
- for my $linkarray (@links) {
- my @element = @$linkarray;
- my $elt_type = shift @element;
- while(@element) {
- my ($attr_name, $attr_value) = splice(@element, 0,2);
- if( $attr_name eq "href" && $attr_value->scheme =~ /\b(https?)\b/ && $attr_value =~ /^$site/){
- # && ($attr_value =~ /\.xml?$/i or $attr_value =~ /\.s?html?$/i or $attr_value =~ /\.php.*$/i or $attr_value =~ /\.cgi.*$/i)){
- $attr_value =~ s/^(.+)#.*$/$1/;
- next if(defined $seen{$attr_value});
- my @heads = LWP::Simple::head($attr_value);
- if(@heads) {
- $seen{$attr_value}++;
- my @date = $heads[2] ? gmtime($heads[2]) : gmtime(time);
- $mod_time{$attr_value} = sprintf("%04d-%02d-%02dT%02d:%02d:%02dZ", $date[5]+1900, $date[4]+1, @date[3,2,1,0]);
- }
- }
- }
- }
- for (sort keys %seen) {
- my $mod = $mod_time{$_};
- # s/^(.+\.cgi).*$/$1/i;
- # s/^(.+\.php).*$/$1/i;
- if(defined $out{$_}) {
- next;
- } else {
- $out{$_} = 'true';
- print qq($_ - $mod\n);
- linker($_);
- }
- }
- }
使い方
6行目で探索するURLを指定
Windowsではコマンドラインから、これを実行するとリンクリストとUTC時間を表示する
Windowsコマンドプロンプトでのテキストファイル(link.txt)への出力例
perl -w linkgen.pl > link.txt
このエントリーのトラックバックURL: http://sieg.xeong.com/mt-tb.cgi/21
このエントリーを含むはてなブックマーク![]()
サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)