2 Stimmen

Wie kann ich den Inhalt eines verfolgten Links in WWW::Mechanize erhalten?

Dies ist meine letzte Frage für diese ich hoffe. Ich verwende $mech->follow_link, um eine Datei herunterzuladen. Aus irgendeinem Grund ist die gespeicherte Datei jedoch nur die Seite, die ich zuerst aufrufe, und nicht der Link, dem ich folgen möchte. Ist dies der richtige Weg, um die Datei von dem Link herunterzuladen? Ich möchte nicht wget verwenden.

    #!/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");

3voto

vol7ron Punkte 38053

Schritte zum Ausprobieren

  1. Drucken Sie zunächst den Inhalt Ihrer get um sicherzustellen, dass Sie eine gültige HTML-Seite erreichen
  2. Vergewissern Sie sich, dass der Link, den Sie aufrufen, der dritte Link mit der Bezeichnung "MESH" ist (Groß- und Kleinschreibung beachten?)
  3. Drucken Sie den Inhalt Ihres zweiten get
  4. Drucken Sie den Dateinamen, um sicherzustellen, dass er wohlgeformt ist.
  5. Prüfen Sie, ob die Datei erfolgreich erstellt wurde

Zusätzliche

  • Sie brauchen es nicht, es sei denn, es funktioniert, oder es stirbt.

Beispiel

#!/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();

0 Stimmen

Wie druckt man den Inhalt? Ich habe versucht print $mech->content( format => 'text' ); aber es scheint nicht zu funktionieren

0 Stimmen

Ich erhalte also eine neue Datei, die korrekter zu sein scheint, aber die heruntergeladene Datei lässt sich nicht in Google Earth öffnen, wie es sein sollte. Die Datei ist eine .kmz-Datei, die ist, was ich jetzt haben die Datei heruntergeladen als (die ich in meinem Code aktualisiert haben), aber wenn ich versuche, die Datei zu öffnen seine sagt, es kann nicht geöffnet werden.

1 Stimmen

Können Sie print $mech->response()->content() , print $mech->content() oder sogar print %{$mech->get($url)} . Die format=>'text' entfernt den HTML-Code, und wenn es sich um ein XML-Dokument mit nur Elementen und Attributen handelt, wird möglicherweise alles entfernt.

1voto

Zaid Punkte 35800

Sind Sie sicher, dass Sie den 3. Link 'MESH' nennen wollen?

0 Stimmen

Nein, ich habe erst gemerkt, als ich zurückging und nachsah, dass es nach diesem speziellen Link suchte. Es funktioniert immer noch nicht richtig, aber es ist ein Anfang. Danke

-1voto

mcandre Punkte 20425

Ändern Sie if à unless .

0 Stimmen

Ändern Sie die anderen wenn à sauf si .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X