所以我正在使用Windows 7和Xampp运行localhost测试服务器。我正在开发一个可以抓取网页的网络抓取工具,但是当我在浏览器中打开它时,我得到了脚本标头错误的过早结束。我以为我得到的不包括“打印”内容类型:text / html \ n \ n“;”这通常是问题..但事实并非如此。
这是我正在使用的代码:
#!"\xampp\perl\bin\perl.exe"
print "Content-Type: text/html\n\n";
use strict;
use warnings;
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTML::LinkExtor;
open my $file1,"+>>", ("links.txt");
select($file1);
my @urls = ('http://www.youtube.com/');
my $browser = LWP::UserAgent->new('IE 6');
$browser->timeout(10);
while (@urls) {
my $url = shift @urls;
my $request = HTTP::Request->new(GET => $URL);
my $response = $browser->request($request);
if ($response->is_error()) {printf "%s\n", $response->status_line;}
my $contents = $response->content();
my ($page_parser) = HTML::LinkExtor->new(undef, $url);
$page_parser->parse($contents)->eof;
@links = $page_parser->links;
foreach $link (@links) {
push @urls, $$link[2]; # Add link to list of urls before printing it
print "$$link[2]\n";
}
sleep 60;
}
答案 0 :(得分:5)
我以为我从不包括print "Content-Type: text/html\n\n";
得到了这个
不完全是。您没有证明print
已运行,并且您没有证明print
在其他输出之前已运行。
确实发生了编译时错误,在这种情况下,print
语句从未执行过。检查Web服务器的错误日志中是否存在实际错误。
答案 1 :(得分:4)
乍一看,您在上面发布的代码包含多个错误,导致无法执行:首先$URL
,@links
和$link
未声明(请记住您在{ {1}})。然后另一个问题是strict
不接受奇数个参数(因为它需要一个哈希)。
由于您获得的错误只是意味着脚本在将任何输出返回到Web服务器之前停止了,原因可能只是那些错误。
首先从命令行运行脚本会很有帮助,只是检查它返回任何内容。
更新
是的,只需纠正上述错误,您的脚本似乎可以正常工作(在Linux上,从命令行)。 它仍然会产生几个警告(并执行一些不必要的操作),这也应该被删除。