Je veux vérifier un site pour les liens, puis vérifier récursivement ces sites pour les liens. Mais je ne veux pas aller chercher la même page deux fois. J'ai des problèmes avec la logique. C'est le code Perl:Comment puis-je parcourir les liens de manière récursive sans devoir revoir les liens?
my %urls_to_check =();
my %checked_urls =();
&fetch_and_parse($starting_url);
use Data::Dumper; die Dumper(\%checked_urls, \%urls_to_check);
sub fetch_and_parse {
my ($url) = @_;
if ($checked_urls{$url} > 1) { return 0; }
warn "Fetching 'me' links from $url";
my $p = HTML::TreeBuilder->new;
my $req = HTTP::Request->new(GET => $url);
my $res = $ua->request($req, sub { $p->parse($_[0])});
$p->eof();
my $base = $res->base;
my @tags = $p->look_down(
"_tag", "a",
);
foreach my $e (@tags) {
my $full = url($e->attr('href'), $base)->abs;
$urls_to_check{$full} = 1 if (!defined($checked_urls{$full}));
}
foreach my $url (keys %urls_to_check) {
delete $urls_to_check{$url};
$checked_urls{$url}++;
&fetch_and_parse($url);
}
}
Mais cela ne semble pas réellement faire ce que je veux.
Aide ?!
EDIT: Je veux récupérer les URL du $starting_url
, puis récupérer toutes les URL des extractions qui en résultent. Mais, si l'une des URL renvoie à $starting_url
, je ne veux plus la récupérer.
Il ne fait pas ce que vous voulez ... ok. Mais qu'est-ce que ça fait? – Zenshai