Я хочу разработать веб-искатель, который начинается с URL-адреса семян, а затем сканирует 100 html-страниц, которые он находит, принадлежащих к тому же домену, что и начальный URL-адрес, а также ведет запись обходных URL-адресов, избегая дубликатов. Я написал следующее, но значение $ url_count, похоже, не увеличивается, а найденные URL-адреса содержат ссылки даже из других доменов. Как я могу это решить? Здесь я вставил stackoverflow.com в качестве исходного URL-адреса.Веб-искатель с использованием perl
use strict;
use warnings;
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
##open file to store links
open my $file1,">>", ("extracted_links.txt");
select($file1);
##starting URL
my @urls = 'http://stackoverflow.com/';
my $browser = LWP::UserAgent->new('IE 6');
$browser->timeout(10);
my %visited;
my $url_count = 0;
while (@urls)
{
my $url = shift @urls;
if (exists $visited{$url}) ##check if URL already exists
{
next;
}
else
{
$url_count++;
}
my $request = HTTP::Request->new(GET => $url);
my $response = $browser->request($request);
if ($response->is_error())
{
printf "%s\n", $response->status_line;
}
else
{
my $contents = $response->content();
$visited{$url} = 1;
@lines = split(/\n/,$contents);
foreach $line(@lines)
{
$line =~ [email protected](((http\:\/\/)|(www\.))([a-z]|[A-Z]|[0-9]|[/.]|[~]|[-_]|[()])*[^'">])@g;
print "$1\n";
push @urls, $$line[2];
}
sleep 60;
if ($visited{$url} == 100)
{
last;
}
}
}
close $file1;
Смотрите эту ссылку, чтобы получить корень доменное имя ссылки и сравните, что корневой домен вашего исходного URL: http://stackoverflow.com/questions/15627892/perl-regex-grab-everyting- до/15628401 # 15628401 – imran
Поскольку вы собираетесь извлекать URL-адреса и ссылки, начните использовать WWW :: Mechanize, который позаботится о значительной части тяжелой работы для вас. –
Я не могу использовать это, потому что я должен запускать коды на сервере, который не имеет этого пакета, и у меня нет разрешения на их установку. – user2154731