2010-07-07 77 views
2

我已經更新了我的代碼,看起來像這樣。當我運行它雖然它說它找不到指定的鏈接。還有什麼是測試它確實連接到頁面的好方法?用Perl下載文件

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

my $mech = WWW::Mechanize->new(); 
my $browser = LWP::UserAgent->new; 

$browser->credentials(
    'Apache/2.2.3 (CentOS):80', 
    'datawww2.wxc.com', 
    '************' => '*************' 
); 

my $response = $browser->get(
'http://datawww2.wxc.com/kml/echo/MESH_Max_180min/' 
); 

$mech->follow_link(n => 8); 

(原貼)

什麼是下載用Perl小文件的最好方法?

我看着CPAN,發現lwp下載,但它似乎只從鏈接下載。我有一個鏈接頁面,每三十分鐘更改一次名稱中的日期和時間,以便它們永遠不會相同。有一個我可以使用的內置函數嗎? Google上的每個人都一直在說使用Wget,但如果可能的話,我還是希望能夠堅持使用Perl,只是爲了幫助我在編程時更好地學習它。

此外還有一個用戶名和密碼登錄到該網站。我知道如何使用Perl訪問網站,但我認爲這可能會改變我可以用來下載的內容。

+0

你在什麼操作系統上? – Sean 2010-07-07 15:53:04

+0

我正在使用Windows 7 – shinjuo 2010-07-07 15:54:01

+0

你應該開始一個新的問題,而不是修改舊的。這兩個問題是不同的,這是關於認證,我在下面的評論中回答。你不需要Apache ... – vol7ron 2010-07-07 16:07:05

回答

3

正如您的其他問題在評論中指出:here

您可以使用相同的方法來檢索.csv文件作爲.html,或爲此事的任何其他基於文本的文件。

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

my $csv = get("http://www.spc.noaa.gov/climo/reports/last3hours_hail.csv") 
      or die "Could not fetch NWS CSV page."; 

要登錄,您可能需要使用WWW::Mechanize填寫網絡表格(看$mech->get()$mech->submit_form()$mech->follow_link()

+0

這實際上是爲了與該頁面稍有不同的東西。在這個頁面上,鏈接每隔三十分鐘更新一次,因爲它們是時間和日期,所以名稱總是不同。所以我不能在鏈接名稱 – shinjuo 2010-07-07 04:57:26

+0

中輸入你想使用'WWW :: Mechanize'。 '$ mech-> follow_link'可以遵循第n個鏈接,或者指定文本的鏈接,或者與正則表達式匹配的鏈接。 – vol7ron 2010-07-07 05:03:53

+0

將彈出式登錄機制化工作? http://datawww2.wxc.com/kml/echo/MESH_Max_180min/ – shinjuo 2010-07-07 05:15:36

2

基本上,你需要抓取網頁,解析它來獲取URL ,然後下載該文件。

就我個人而言,我會用HTML::TreeBuilder::XPath,寫一個快速的XPath表達式直接轉到正確的href屬性節點,然後將其插入到LWP中。

use HTML::TreeBuilder::XPath; 
my $tree = HTML::TreeBuilder::XPath->new; 
$tree->parse({put page content here}); 
foreach($tree->findnodes({put xpath expression here}){ 
    {download the file} 
} 
相關問題