Как я могу получить содержимое ссылки по ссылке в WWW :: Mechanize? - PullRequest
2 голосов
/ 07 июля 2010

Надеюсь, это мой последний вопрос. Я использую $ mech-> follow_link, чтобы попытаться загрузить файл. По какой-то причине сохраненный файл - это просто страница, которую я сначала открываю, а не ссылка, по которой я хочу перейти. Это правильный способ загрузки файла по ссылке? Я не хочу использовать wget.

    #!/usr/bin/perl -w
    use strict;
    use LWP;
    use WWW::Mechanize;
    my $now_string = localtime;
    my $mech = WWW::Mechanize->new();
    my $filename = join(' ', split(/\W++/, $now_string, -1));
    $mech->credentials( '***********' , '************'); # if you do need to supply     server and realms use credentials like in [LWP doc][2]
$mech->get('http://datawww2.wxc.com/kml/echo/MESH_Max_180min/') or die "Error: failed to load the web page";
$mech->follow_link( url_regex => qr/MESH/i ) or die "Error: failed to download content";
$mech->save_content("$filename.kmz");

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

Шаги, чтобы попытаться

1002 Первой печати содержимого из ваших get, чтобы убедиться, что Вы достигаете правильную страницу HTML 1006 * Убедитесь, что ссылки вы собираетесьчтобы это третье звено называется "MESH" (чувствителен к регистру?) 1008 * Печать содержимого из вашей второй get 1011 * Печать файла, чтобы убедиться, что он wellformed 1013 *Убедитесь, что файл был успешно создан

Дополнительный

  • Вам не нужен, если в любом случае - это не будет работать, или он собирается умереть

Пример

#!/usr/bin/perl -w

use strict;
use WWW::Mechanize;

   sub main{

      my $url    =  qq(http://www.kmzlinks.com);
      my $dest   =  qq($ENV{HOME}/Desktop/destfile.kmz);

      my $mech   =  WWW::Mechanize->new(autocheck => 1);

      # if needed, pass your credentials before this call
      $mech->get($url);
      die "Couldn't fetch page" unless $mech->success;

      # find all the links that have urls to kmz files
      my @links  =  $mech->find_all_links( url_regex => qr/(?:\.|%2E)kmz$/i );

      foreach my $link (@links){               # (loop example)

         # use absolute URL path of the link to download file to destination
         $mech->get($link->url_abs, ':content_file' => $dest);

         last;                                 # only need one (for testing)
      }     
   }

   main();
1 голос
/ 07 июля 2010

Вы уверены, что хотите третью ссылку под названием «MESH»?

0 голосов
/ 07 июля 2010

Изменить if на unless.

...