2010-07-07 167 views
1

我正嘗試使用perl從站點下載文件。我選擇不使用wget,以便我可以學習如何使用這種方法。我不確定我的頁面是不是連接,或者我的語法某處出了什麼問題。還有什麼是檢查您是否獲得連接到頁面的最佳方法。下載文件時遇到問題

#!/usr/bin/perl -w 
use strict; 
use LWP; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
$mech->credentials('********' , '********'); # if you do need to supply server and realms use credentials like in [LWP doc][2] 
$mech->get('http://datawww2.wxc.com/kml/echo/MESH_Max_180min/'); 
$mech->success(); 
if (!$mech->success()) { 
    print "cannot connect to page\n"; 
    exit; 
} 
$mech->follow_link(n => 8); 
$mech->save_content('C:/Users/********/Desktop/'); 

回答

3

對不起,但幾乎一切都是錯誤的。

  • 您以錯誤的方式混合使用LWP::UserAgentWWW::Mechanize。如果您使用$browser->get()作爲混合2模塊的功能,則不能執行$mech->follow_link()$mech不知道你做了一個請求。
  • 參數傳遞給憑證都不好,看到the doc

你更有可能想要做這樣的事情:通過檢查$mech->success()

use WWW::Mechanize; 
my $mech = WWW::Mechanize->new(); 

$mech->credentials('************' , '*************'); # if you do need to supply server and realms use credentials like in LWP doc 
$mech->get('http://datawww2.wxc.com/kml/echo/MESH_Max_180min/'); 
$mech->follow_link(n => 8); 

您可以檢查)獲取的結果(和follow_link()結果 if (!$mech->success()) { warn "error"; ... }
後後續>鏈接,數據可使用$mech->content(),如果你想將其保存在一個文件中使用$mech->save_content('/path/to/a/file')

一個完整的代碼可能是:

use strict; 
use WWW::Mechanize; 
my $mech = WWW::Mechanize->new(); 

$mech->credentials('************' , '*************'); # 
$mech->get('http://datawww2.wxc.com/kml/echo/MESH_Max_180min/'); 
die "Error: failled to load the web page" if (!$mech->success()); 
$mech->follow_link(n => 8); 
die "Error: failled to download content" if (!$mech->success()); 
$mech->save_content('/tmp/mydownloadedfile') 
+0

的arent你仍然在使用瀏覽器的>得到什麼? – shinjuo 2010-07-07 16:48:01

+0

但現在它怎麼知道要去哪個頁面? – shinjuo 2010-07-07 16:52:19

+0

不,他正在使用'WWW :: Mechanize'的'credentials'方法。請參閱'http://search.cpan.org/perldoc/WWW :: Mechanize#$ mech-%3Ecredentials%28_ $ username,_ $ password_%29' – 2010-07-07 16:59:38