从URL批量下载

时间:2014-05-09 15:53:41

标签: linux perl

我想从网上下载数千个文件。 “FileName.txt”中的每一行都包含要下载的文件的名称。我使用Perl脚本从“FileName.txt”获取文件名,并在随机时间后下载它们。我将脚本运行为“./program.pl Filename.txt”

则Filename.txt

A
B
C
B

program.pl

#!/usr/bin/perl
$file1=$ARGV[0];
open(FP1, $file1);
while($s1=<FP1>)
<br>
{   chomp ($s1);
    $range = 5;
    $minimum = 3;

    $random_number = int(rand($range)) + $minimum;
    `wget --wait="$random_number" "http://URL=$s1"`;
}

我收到少量初始文件的输出但不是剩余文件的输出。对于剩余文件$ emacs fileD.txt给出

[13] 29699

你能不能告诉我为什么我得到“[13] 29699”,以及在随机时间间隔后下载文件的最佳方法是什么。抱歉,while的程序没有显示正确的处理程序。感谢

2 个答案:

答案 0 :(得分:0)

您不会显示$id来自哪里,但可能有些网址包含&,这会将流程置于后台。您应该使用wget参数的单引号或使用system的列表形式。

此外,wget的wait参数仅在您使用wget本身遍历给定URL的链接时才相关。在您的情况下,您需要Perl脚本在为每个URL调用wget之间休眠:

#!/usr/bin/env perl

use strict;
use warnings;

use constant WAIT_MINIMUM => 3;
use constant WAIT_RANGE => 5;

my ($url_list_file) = @ARGV;
defined($url_list_file)
    or die "Need URL list\n";

open my $fh, '<', $url_list_file
    or die "Cannot open '$url_list_file': $!";

while (my $url = <$fh>) {
    $url =~ s/\R\z//;
    my @cmd =  (wget => 'http://$url');

    print "@cmd\n";
    my $error = system @cmd;

    if ($error) {
        warn "''@cmd' failed: $?";
    }
    sleep WAIT_MINIMUM + rand(WAIT_RANGE);
}

答案 1 :(得分:0)

URL=的含义是什么? wget将url作为简单参数。似乎是你需要的

`wget --wait=$random_number 'http://$s1'`;