1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #!/usr/bin/perl -w
use strict;
use diagnostics;
use URI::URL;
use Regexp::Common qw/URI/;
use Data::Dumper;
use LWP::Simple;
my %urls = ();
# pompe une page
my $page = get('http://www.free.fr');
my $links = _extract_urls($page, 'http://www.free.fr');
print Dumper($links);
sub _extract_urls
{
my $base = shift;
# tableau d'urls un hash est
# préférable pour éviter les doublons
my %urls = ();
# extraction des urls
while ( $page =~ /($RE{URI}{HTTP})/gi )
{
# Traitement des cliens relatif
my $uri = url($1, $base)->abs;
if ( _valid_scheme($uri) )
{
# Ajout de l'url dans le hash
$urls{$uri} = undef unless exists $urls{$uri};
}
}
return \%urls;
}
sub _valid_scheme
{
my $urlchk = shift;
my $scheme = '';
my @schema = qw (http);
if ($urlchk =~ s/^([^:]*)://) {
$scheme = lc($1);
}
if ($scheme && ! grep {$scheme eq $_} @schema) {
print("Invalid scheme [$scheme]\n");
return 0;
}
return 1;
} |
Partager