Ловушки Perl
Истории-страшилки про Perl-программиста, с подсказками и разоблачениями
Главная
О блоге
Об авторах
Почему?
rss
@perltrapcom
Программист написал скрипт для скачивания веб-страниц по заданному списку.
Скрипт читает адреса (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
Нельзя сказать, что скрипт совсем не работает. Страницы он скачивает, какие-то файлы создает. А вот насчет всего остального…