我目前正在尝试使用 WWW::Mechanize 创建一个 Perl webspider。
我要做的是创建一个网络蜘蛛,它将抓取整个网站的 URL(由用户输入)并从网站上的每个页面中提取所有链接。
到目前为止我所拥有的:
use strict;
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
my $urlToSpider = $ARGV[0];
$mech->get($urlToSpider);
print "\nThe url that will be spidered is $urlToSpider\n";
print "\nThe links found on the url's starting page\n";
my @foundLinks = $mech->find_all_links();
foreach my $linkList(@foundLinks) {
unless ($linkList->[0] =~ /^http?:\/\//i || $linkList->[0] =~ /^https?:\/\//i) {
$linkList->[0] = "$urlToSpider" . $linkList->[0];
}
print "$linkList->[0]";
print "\n";
}
它能做什么:
1.目前会提取并列出起始页的所有链接
2.如果找到的链接是 /contact-us 或 /help 格式,它将在其前面添加“http://www.thestartingurl.com”,因此它变为“http://www.thestartingurl.com/contact -我们'。
问题:
目前它还可以找到我不希望它做的外部站点的链接,例如,如果我想爬取'http://www.tree.com',它会找到诸如http://www.tree 之类的链接。 com/找到我们。但是,它也会找到指向其他站点的链接,例如http://www.hotwire.com。
如何阻止它找到这些外部网址?
在页面上找到所有 url 之后,我还想将这个新的内部链接列表保存到一个名为 @internalLinks 的新数组中,但似乎无法让它工作。
非常感谢任何帮助,在此先感谢。