2010-07-07 50 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} 
} 
相关问题