Perl: download HTML-Seite

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
panflute
Beiträge: 31
Registriert: 23.07.2004 21:37:31
Wohnort: /dev/net
Kontaktdaten:

Perl: download HTML-Seite

Beitrag von panflute » 10.08.2005 22:45:17

:?: ist der Download von HTML-Seiten direkt in Perl nötig, oder müsste ich da den Umweg über die Shell nehmen, um zB wget aufzurufen?

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 10.08.2005 23:29:25

hi,
nein is gar kein problem:

Code: Alles auswählen


     #!/usr/bin/perl
     use LWP::Simple;
     use strict;
     my $url = "http://www.google.de";
     my $content = get $url;die "Couldn't get $url" unless defined $content;
     print $content;

mfg
mauser

Benutzeravatar
panflute
Beiträge: 31
Registriert: 23.07.2004 21:37:31
Wohnort: /dev/net
Kontaktdaten:

Beitrag von panflute » 11.08.2005 00:43:37

Danke, das funktioniert!
Ich weiß viel zu wenig über die verschiedenen Module um z. B.

Code: Alles auswählen

     use LWP::Simple; 
anwenden zu können... ist wie ein Buch mit 7 Siegeln.

ohulan
Beiträge: 111
Registriert: 21.02.2002 01:00:58

Beitrag von ohulan » 11.08.2005 02:18:09

einfach bei cpan suchen, dann perldoc modulname. bei fast allen standard modulen ist alle funktionalitaet in perldoc beschrieben-mit ausreichendem beispiel code.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 11.08.2005 04:33:12

Aus reiner Neugier:
mauser hat geschrieben:

Code: Alles auswählen

     my $content = get $url;die "Couldn't get $url" unless defined $content;
Kann man das nicht als

Code: Alles auswählen

my $content = get $url or die "Couldn't get $url";
schreiben?

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 11.08.2005 13:01:25

ja kann man auch, allerdings bin ich auch nicht der totale perl-profi, um voll ausschliessen zu können das keine seiteneffekte auftreten. aber deine version ist auf jeden fall besser lesbar, würde ich daher eigentlich auch bevorzugen !
mfg
mauser

Benutzeravatar
panflute
Beiträge: 31
Registriert: 23.07.2004 21:37:31
Wohnort: /dev/net
Kontaktdaten:

Beitrag von panflute » 18.08.2005 22:42:52

mauser hat geschrieben:

Code: Alles auswählen


     #!/usr/bin/perl
     use LWP::Simple;
     use strict;
     my $url = "http://www.google.de";
     my $content = get $url;die "Couldn't get $url" unless defined $content;
     print $content;

wollte grad mal zu Testzwecken die Forenstartseite runterladen: mit wget von der Console geht das, wenn ich aber den o.g. Code verwende kommt eine Fehlermeldung:
Couldn't get http://www.debianforum.de/forum/ at ./debianforum.pl line 5.
Die Meldung von wget lautet (möchte ich nicht verwenden, sondern Perl-eigene Kommandos):

Code: Alles auswählen

Auflösen des Hostnamen »www.debianforum.de.... 213.239.213.245
Verbindungsaufbau zu www.debianforum.de[213.239.213.245]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 302 Found
Platz: /forum/[folge]
--22:39:56--  http://www.debianforum.de/forum/
           => `index.html.1'
Verbindungsaufbau zu www.debianforum.de[213.239.213.245]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Wo könnte der Fehler im Perl-Code liegen?

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 19.08.2005 00:20:21

Joghurt hat geschrieben:Aus reiner Neugier:
mauser hat geschrieben:

Code: Alles auswählen

     my $content = get $url;die "Couldn't get $url" unless defined $content;
Kann man das nicht als

Code: Alles auswählen

my $content = get $url or die "Couldn't get $url";
schreiben?
Eigentlich schon. Allerdings prüft ist get $url auch falsch, wenn die Seite einen leeren String oder 0 oder so zurückgibt. Dann würde die ausgeführt. wenn der request erfolgreich war. Aber wann soll das schon vorkommen?

-Flo

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 19.08.2005 00:25:45

hi,

wundert mich auch das es nicht mit LWP::Simple geht, ich habe hier mal ein anderes beispiel rausgekramt, mit LWP::UserAgent. das funktioniert wunderbar, gibt auch bessere fehlermeldungen aus als LWP::Simple. ich benutze dieses skript (bzw. ein ähnliches, dieses ist ein modifiziertes beispiel von google), um mir den trafficbericht von meinem vserver runterzuladen, da hatte ich noch nie probleme..
mfg
mauser

Code: Alles auswählen

      1 #!/usr/bin/perl
      2 use LWP::UserAgent;
      3 use strict; 
      4 
      5 my $url=$ARGV[0];
      6 die "Keine URL angegeben" unless defined $url;
      7 my $ua = LWP::UserAgent->new();
      8 my $request = HTTP::Request->new('GET', $url);
      9 my $response = $ua->request($request);
     10 
     11 if($response->is_error()) 
     12 { 
     13         print "Error-Code    : ", $response->code() ,    "\n";
     14         print "Fehlermeldung:  ", $response->message() , "\n";
     15 }else {
     16         print $response->content() , "\n";
     17 }

Zuletzt geändert von mauser am 19.08.2005 12:13:47, insgesamt 1-mal geändert.

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 19.08.2005 01:09:21

Ich schiebe das auf die Serverkonfiguration. Es scheint den von LWP::Simple verwendeten UserAgent (lwp-trivial/$VERSION) zu blocken. Kann das ein Admin bestätigen?

Benutzeravatar
panflute
Beiträge: 31
Registriert: 23.07.2004 21:37:31
Wohnort: /dev/net
Kontaktdaten:

Danke, funktioniert

Beitrag von panflute » 19.08.2005 22:09:33

der Code von mauser funktioniert, bei Eingabe von "absoluten" URLs, Danke! :idea:

Antworten