WWW :: Mechanize :: Firefox работает хорошо: некоторые попытки сделать скрипт немного более устойчивым - PullRequest
0 голосов
/ 01 апреля 2012

Друзья

У меня есть хороший скрипт, который работает как скребок для изображений.Для первых испытаний и испытаний все идет хорошо.

Вот список URL-адресов, которые я использую в urls.txt, который я запускаю со сценарием. Примечание это только краткий список.Мне нужно работать с 2500 URL-адресами, поэтому было бы неплохо, если бы скрипт был немного более надежным и продолжал работать, если некоторые URL-адреса недоступны или занимают слишком много времени.Я думаю, что сценарий сталкивается с некоторыми проблемами, если некоторые URL-адреса недоступны или занимают слишком много времени или блокируют mozrepl, а WWW: Mechanize :: Firefox занимает слишком много времени.

Как вы думаете, мои идеи и предложения, вероятно, являются причиной проблемы или нет?Если да, то как мы можем улучшить сценарий и сделать его сильнее, мощнее и надежным , чтобы он не прекратился слишком рано.

Люблю слышать от вас.

Привет.

http://www.bez-zofingen.ch
http://www.schulesins.ch
http://www.schulen-turgi.ch/pages/bezirksschule/startseite.php
http://www.schinznach-dorf.ch
http://www.schule-seengen.ch
http://www.gilgenberg.ch/schule/bez/2005-06/
http://www.rheinfelden-schulen.ch/bezirksschule/
http://www.bezmuri.ch
http://www.moehlin.ch/schulen/
http://www.schule-mewo.ch
http://www.bez-frick.ch
http://www.bezendingen.ch
http://www.bezbrugg.ch
http://www.schule-bremgarten.ch/content/view/20/37/
http://www.bez-balsthal.ch
http://www.schule-baden.ch
http://bezaarau.educanet2.ch/info/.ws_gen/index.htm
http://www.benedict-basel.ch
http://www.institut-beatenberg.ch/
http://www.schulewilchingen.ch
http://www.ksuo.ch
http://www.international-school.ch
http://www.vsgtaegerwilen.ch/
http://www.vgk.ch/
http://www.vstb.ch

Но я думаю, я был бы очень рад, если бы он был более надежным, чем сейчас.

Конечно, он работает на реальном браузере, как иWWW :: Mechanize :: Firefox

Так что где-то это может быть несколько нестабильным , возможно, больше, чем любое другое решение для очистки экрана.Я получаю некоторые ошибки, такие как следующие ... (см. Ниже)

Примечание Я также более внимательно посмотрел на страницы отладки в Устранение неполадок Firefox с его подсказкамии трюки и обходные пути, касающиеся различных ошибок, неприятностей и тому подобное.

  #!/usr/bin/perl
  use strict;
  use warnings;

  use WWW::Mechanize::Firefox;

  my $mech = new WWW::Mechanize::Firefox();

  open my $URLs, '<', 'URLs.txt' or die $!;

  while (<$URLs>) {
    chomp;
    next unless /^http/I;
    print "$_\n";
    $mech->get($_);
    my $png = $mech->content_as_png;
    my $name = $_;
    $name =~ s#^http://##I;
    $name =~ s#/##g;
    $name =~ s/\s+\z//;
    $name =~ s/\A\s+//;
    $name =~ s/^www\.//;
    $name .= ".png";
open(my $out, '>', "/home/martin/images/$name") or die $!;
  binmode $out;
    print $out $png;
    close $out;
    sleep 5;
  }

См. Результаты, а также ошибки , где он останавливается .

martin@linux-wyee:~/perl> perl test_10.pl
http://www.bez-zofingen.ch
Datei oder Verzeichnis nicht gefunden at test_10.pl line 24, <$URLs> line 3.
martin@linux-wyee:~/perl> perl test_10.pl
http://www.bez-zofingen.ch
http://www.schulesins.ch
http://www.schulen-turgi.ch/pages/bezirksschule/startseite.php
http://www.schinznach-dorf.ch
http://www.schule-seengen.ch
http://www.gilgenberg.ch/schule/bez/2005-06/
http://www.rheinfelden-schulen.ch/bezirksschule/
Not Found at test_10.pl line 15
martin@linux-wyee:~/perl> 

Что вы предлагаете?Как мы можем сделать скрипт немного более надежным?Как сделать так, чтобы он не остановился так рано?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Обернуть все вызовы методов / систем, которые могут быть неправильными, в обработчике исключений . (См. Главу 13 Советы по Perl для обсуждения этой темы.) Установите явные тайм-ауты для Mozrepl.

При появлении ошибки зарегистрируйте ее и перейдите к следующему URL-адресу. По завершении прогона проверьте файл журнала и повторите прогон с теми URL-адресами, которые не могли быть обработаны ранее. Сортировка URL-адресов для страниц, которые постоянно отключены. Наконец, может быть оставлено несколько страниц, которые по какой-то причине нельзя скриншотить через Mozrepl. Обрабатывать их вручную.

0 голосов
/ 29 июня 2017

Вы всегда должны проверять, является ли ваш ответ успешным или нет.Ваш исправленный код:

    use strict;
    use warnings;

    use WWW::Mechanize::Firefox;

    my $mech = new WWW::Mechanize::Firefox();

    open my $URLs, '<', 'URLs.txt' or die $!;

      while (<$URLs>) {
        chomp;
        next unless /^http/I;
        print "$_\n";
        my $res = $mech->get($_);
        if(!$res->is_success()){ 
           next; # or continue;
        }
        my $png = $mech->content_as_png;
        my $name = $_;
        $name =~ s#^http://##I;
        $name =~ s#/##g;
        $name =~ s/\s+\z//;
        $name =~ s/\A\s+//;
        $name =~ s/^www\.//;
        $name .= ".png";
       open(my $out, '>', "/home/martin/images/$name") or die $!;
      binmode $out;
        print $out $png;
        close $out;
        sleep 5;
      }

`

...