0

好的,所以我知道如何在循环中使用 Perl 发出 LWP 获取请求。但我想知道是否有可能从网站上抓取一个网址并自动将其放入网址中以循环访问?

#!usr/bin/perl

for ($i=0;$i<200;$i++)
{

use strict;
 use LWP::UserAgent;
use warnings;
 my $ua = new LWP::UserAgent(agent => 'USER AGENT');
 my $response = $ua->get("http://example.com");
 print $response->code,' ', $response->message,"\n";

sleep 2;

}

所以现在我想从域中抓取一个 url 并将其用于 example.com,并且它会抓取每次访问一个新的 url。

4

1 回答 1

4

我想知道是否有可能从网站上抓取一个网址并自动将其放入网址中以循环访问?

是的!这称为队列,它可以使用push和轻松实现shift

 my @to_visit = ( ...initial URLs... );
 while (@to_visit) {
     my $url = shift(@to_visit);
     my $content = ...Download the file...;
     my @extracted = ...Extract the URLs...;
     push @to_visit, @extracted;
 }

当然,您可能想跳过您已经访问过的 URL。

 my %seen;
 my @to_visit = grep !$seen{$_}++, ( ...initial URLs... );
 while (@to_visit) {
     my $url = shift(@to_visit);
     my $content = ...Download the file...;
     my @extracted = ...Extract the URLs...;
     push @to_visit, grep !$seen{$_}++, @extracted;
 }
于 2013-03-18T19:08:26.817 回答