2012-09-18 42 views
0

我开始用Perl搞乱Web。我使用Windows和ActivePerl。我写了一个脚本,下载MP3文件(这是一个电台脱口秀节目的存档,所有的法律,在你想知道:)情况下)它(理论上)用Perl下载网站上的几个文件

  • 解析网站
  • 收集所有链接指向一个MP3文件到一个数组通过数组
  • 迭代和下载的所有文件

然而,脚本发现所有的链接,该阵列是确定的,但只下载一个文件。这肯定是一个基本的错误,但我找不到它。请指出我的错误,谢谢。

use strict; 
use warnings; 
use WWW::Mechanize; 
use LWP::Simple; 
use File::Basename; 

my $mech = WWW::Mechanize->new(autocheck => 1); 
$mech->get("http://something_or_other.html"); 

my @mp3links = $mech->find_all_links( 
    tag  => "a", 
    url_regex => qr/\.mp3$/, 
); 
print "\n";     
foreach my $link (@mp3links) { 

    my $url  = $link->url(); 
    my $localfile = basename($url); 
    my $localpath = "d:\\Downloads\\$localfile"; 

    print "$localfile\n"; 
    getstore($url, $localpath); 
} 
+0

您是否尝试过使用调试器来检查@ mp3links是否包含您期望它包含的内容,并且为每次迭代正确生成$ localpath? – pmakholm

+0

如果你改变'getstore()'调用''warn'$ url => $ localpath \ n“',它会起作用吗?在进入'foreach'循环之前,您是否打印过Dumper(\ @ mp3links)? – s0me0ne

+0

'print“$ localfile \ n”'语句是否显示您期望的所有文件? – Borodin

回答

0

哦,对不起。这与Perl无关。我的网络连接相当糟糕,连接总是在下载第一个文件时丢失。

0

试试这个:

my $status = getstore($url, $localpath); 
die "Error $status on $url" unless is_success($status); 

另一种可能的罪魁祸首 - 如果链接包含查询字符串(-mark +参数?) 基名不会砍了下来。 问题是这会使它在Windows上无效的文件名。