2012-04-01 56 views
1

因此,我使用Windows 7和Xampp運行本地主機測試服務器。我正在研究抓取網頁的網絡抓取工具,但是當我在瀏覽器中打開它時,我得到腳本頭文件的提前結束錯誤。我以爲我得到這個不包括「打印」內容類型:文本/ HTML \ n \ n「;」這通常是問題..但事實並非如此。Perl「腳本頭文件過早結束」錯誤

這是我使用的代碼:

#!"\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

您可以隨時嘗試使用'use CGI :: Carp qw(fatalsToBrowser);'在腳本的頂部附近查看確切的錯誤消息是什麼,在這裏。 – summea 2012-04-01 02:20:05

+0

我將其添加到使用列表中,它仍然給我提供了同樣的錯誤。 – 2012-04-01 02:22:33

+0

從[堆棧溢出Perl常見問題](http://stackoverflow.com/questions/tagged/perl?sort=faq):[我如何解決我的Perl CGI腳本?](http://stackoverflow.com/questions/2165022 /何燦我解決的,我的,Perl的CGI腳本) – daxim 2012-04-01 07:39:45

回答

5
,我想我得到這個從不包括 print "Content-Type: text/html\n\n";

不完全是。您沒有證明print已經運行,並且您沒有演示print在其他輸出之前運行。

肯定會發生編譯時錯誤,在這種情況下,print語句從未得到執行。檢查您的Web服務器的錯誤日誌中是否存在實際錯誤。

4

乍一看,你上面貼的代碼包含了幾個錯誤,它防止它被執行:第一$URL@links$link不聲明(記住,你是strict下)。然後另一個問題是LWP::UserAgent->new()不接受奇數個參數(因爲它需要散列)。

由於您收到的錯誤可能意味着腳本在將任何輸出返回到Web服務器之前停止,原因可能僅僅是這些錯誤。

首先從命令行運行腳本可能會有所幫助,只是要檢查它是否會返回任何內容。

UPDATE

是,剛剛通過修正上述腳本似乎是工作失誤(在Linux上,在命令行)。 它仍然會產生多個警告(並執行一些不必要的操作),這些警告也應該消除。

相關問題