Все задачи

Скачать все

05 Dec 2013

Программист написал скрипт для скачивания веб-страниц по заданному списку. Скрипт читает адреса (url) страниц из STDIN (по одному на строке), скачивает каждую странциу и записывает ее контент в файл. Файлы создаются в каталоге, переданном первым аргументом командной строки, либо в /tmp, если каталог не задан. Записав очередной файл, скрипт пишет на STDOUT адреса скачанной страницы и имя созданного файла. Прогресс скачивания можно отслеживать, посылая процессу сигнал USR2 – в ответ он говорит, сколько времени работает и сколько страниц скачал.

#!/usr/bin/perl

# downloader.pl ~/downloads <urls >ready_files

use LWP::Simple;
use File::Temp qw/tempfile/;

my $CNT = 0;
my $DIR = shift @ARGV || '/tmp';

prepare();

while(<STDIN>){
    chomp();
    my $content = get($_);
    my ($fh, $filename) = tempfile("X" x 10, DIR => $DIR);
    binmode( $fh, ":utf8" );
    print $fh $content;
    print "url: $_\tfile: $filename\n";
    $CNT++;
}

{
my $start;
sub prepare
{
    $start = time;
    $SIG{USR2} = print_stat();
    print STDERR "pid: $$\n";
}

sub print_stat
{ 
    my $seconds = time() - $start;
    print STDERR "$seconds sec elapsed, $CNT urls have been processed\n" if $seconds > 0;
    return '';
}
}

Пример списка страниц:

http://perltrap.com/ru
http://perltrap.com/en
http://perltrap.com/ru/puti-k-fajlam
http://perltrap.com/en/chronology
http://perltrap.com/en/abc

Нельзя сказать, что скрипт совсем не работает. Страницы он скачивает, какие-то файлы создает. А вот насчет всего остального…