2012-03-05 125 views
0

我試圖使用LWP :: UserAgent來收集網頁的內容,但由於某種原因,當我運行腳本時,我得到一個Windows彈出窗口,說「Perl命令行解釋器已停止加工」。我不明白爲什麼,因爲我已經簡化了代碼到它的基本要點如下:使用LWP獲取網頁內容

#!C:/Perl/bin/Perl.exe 
use LWP::UserAgent; 

$URL = 'http://www.google.com'; 

my $oHTTPAgent = new LWP::UserAgent; 
$oRequest = HTTP::Request->new('GET'); 
$oRequest->url($URL); 
$sResponse = $oHTTPAgent->request($oRequest); 
if ($sResponse->is_success) { 
    $sPage = $sResponse->content; 
} 

print $sPage; 

任何想法?

-> use strict; 
-> use warnings; 

是否路徑C:/Perl/bin/Perl.exe存在:

感謝,

艾倫

+0

,看起來像它應該工作,它不是一個代碼問題,你有沒有嘗試過直接在腳本運行的Perl? – AntonioD 2012-03-05 11:30:47

+0

感謝您的回覆。你是什​​麼意思直接在腳本上運行perl?我從命令行運行這個腳本。最初這個代碼塊來自構成Web表單的大部分代碼。 – user1249684 2012-03-05 11:35:02

+0

我的意思是嘗試運行C:\ Perl \ bin \ Perl.exe C:\ path \ to \ script.pl – AntonioD 2012-03-05 11:37:59

回答

1

一些常見的事情,而腳本來考慮?
shebang {#}應該指向安裝perl的路徑。在代碼中使用

幾個變量沒有聲明,代碼如下

use strict; 
use warnings; 
use LWP::UserAgent; 

my $URL = 'http://www.google.com'; 
my $oHTTPAgent = new LWP::UserAgent; 
my $oRequest = HTTP::Request->new('GET'); 
$oRequest->url($URL); 
my $sResponse = $oHTTPAgent->request($oRequest); 
if ($sResponse->is_success) { 
    my $sPage = $sResponse->content; 
    print $sPage; 
    } 
+0

我試過這個代碼字,仍然給出了同樣的錯誤。我相信這不是一個語法或邏輯錯誤,而是與Windows有關。我已經嘗試了上述代碼與不同的網頁無濟於事。也許它與我的安裝有關。請注意,我在這臺計算機上運行了大量其他Perl腳本(不使用LWP)並且沒有任何問題。奇怪的。 – user1249684 2012-03-06 10:56:04

2

你打google.com,不允許機器人修改之後。我不知道這是否是您的問題,但如果您收到不成功的回覆,則您沒有其他分支。在你的Perl程序結束時,你的程序關閉而不打印任何東西。

use LWP::UserAgent; 

$url = 'http://www.perl.com'; 

my $ua = LWP::UserAgent->new; 
my $response = $ua->get($url); 
print $response->content if $response->is_success; 

print "I'm done!\n"; 

您可能也有興趣Mojo::UserAgent

use Mojo::UserAgent; 

$url = 'http://www.perl.com'; 

my $ua = Mojo::UserAgent->new; 
print $ua->get($url)->res->body; 

print "I'm done!\n";