2012-03-27 10 views
0

Nun links Perl manchmal abit Abracadabra so vielen Dank für die Geduld mit mir ...WWW :: Mechanize :: Firefox - allmost da - nur ein wenig Regex Fehler mir

Update sieht; gab es einige Fehler, bis user1269651 und Bodoin angeboten agreat fix

die Ergebnisse bodoins Code sehen .. (man beachte er den Code einmal geändert hat - i verwendet hier die erste Version je ...:;

linux-wyee:/home/martin/perl # perl test_7.pl 
http://www.unifr.ch/sfm 
http://www.zug.phz.ch 
http://www.schwyz.phz.ch 
http://www.luzern.phz.ch 
http://www.schwyz.phz.ch                 http://www.phvs.ch                   http://www.phtg.ch                   http://www.phsg.ch                   http://www.phsh.ch                   Use of uninitialized value $png in print at test_7.pl line 25, <$urls> line 10.                      http://www.phr.ch                   http://www.hepfr.ch/ 
http://www.phbern.ch 
http://www.ph-solothurn.ch 
http://www.pfh-gr.ch 
Got status code 500 at test_7.pl line 14 
linux-wyee:/home/martin/perl # 

und die neueste Version von Bodins Code einige Ergebnisse sind wie die Suche ..

Can't call method "addProgressListener" on an undefined value at /usr/lib/perl5/site_perl/5.14.2/WWW/Mechanize/Firefox.pm line 566, <$urls> line 12. 

auch einige kleinere Dinge links - oben sehen ... was können wir tun, mit diesen kleinen Fehler .. btw: was über die Idee von Speichern der Ergebnisse in einem Ordner. ../(Bilder genannt oder so !?)

Ende update ...

hier die inital Faden beginnt - und gibt einen Überblick über, was gewünscht wird:

i Ich brauche einige Thumbnails von Webseiten, aber ich habe versucht, wget zu verwenden - aber das funktioniert nicht für mich, da ich einige Renderfunktionen benötige, ist needet: Ich habe eine Liste von 2.500 URLs, eine in jeder Zeile, in einer Datei gespeichert. Dann möchte ich ein Skript - siehe unten - um die Datei zu öffnen, eine Zeile zu lesen, dann die Webseite abzurufen und das Bild als kleines Vorschaubild zu speichern.

gut, da ich eine reihe von webseiten (2500) habe, muss ich mich über die benennung der ergebnisse entscheiden.

http://www.unifr.ch/sfm 
http://www.zug.phz.ch 
http://www.schwyz.phz.ch 
http://www.luzern.phz.ch 
http://www.schwyz.phz.ch 
http://www.phvs.ch 
http://www.phtg.ch 
http://www.phsg.ch 
http://www.phsh.ch 
http://www.phr.ch 
http://www.hepfr.ch/ 
http://www.phbern.ch 

So weit so gut, gut ich denke, ich versuche, so etwas wie diese

Wir müssen auch einen Filehandler schließen, wenn wir es nicht mehr brauchen. Außerdem können wir 'offen' oder 'sterben' verwenden. Ich habe es getan - siehe unten!

Btw wir brauchen einen guten Dateinamen. Da ich eine riesige Liste von URLs habe, bekomme ich eine riesige Liste von Ausgabedateien. Daher muss ich gute Dateinamen haben. Können wir diese Dinge und Bedürfnisse im Programm reflektieren?

das Skript überhaupt nicht starten ....

#!/usr/bin/perl 

use strict; 
use warnings; 
use WWW::Mechanize::Firefox; 

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

open(INPUT, "<urls.txt") or die $!; 

while (<INPUT>) { 
     chomp; 
     next if $_ =~ m/http/i; 
     print "$_\n"; 
     $mech->get($_); 
     my $png = $mech->content_as_png(); 
     my $name = "$_"; 
     $name =~s#http://##is; 
     $name =~s#/##gis;$name =~s#\s+\z##is;$name =~s#\A\s+##is; 
     $name =~s/^www\.//; 
     $name .= ".png"; 
     open(my $out, ">",$name) or die $!; 
     binmode($out); 
     print $out $png; 
     close($out); 
     sleep (5); 
} 
+1

btw hilft, es ist ein "Datei-Handle" (etwas, das man eine Datei zu halten erlaubt), kein "Filehandler" (etwas, das handelt als Antwort auf Dateien). – ikegami

+1

Was ist Ihre Frage? Sie implizieren, dass Sie falsche Ergebnisse erhalten, aber Sie geben nicht an, was diese Ergebnisse sind und was sie stattdessen sein sollten. – ikegami

+0

hi ikegami - vielen dank für die schnelle antwort - ich bekomme keine ergebnisse - ich möchte kleine thumbnails haben - lokal gespeichert und benannt wie die urls .... machbar – zero

Antwort

1

Ich kam auf diese:

while (my $name = <DATA>) { 
     chomp ($name) ; 

     #$mech->get($_); 
     #my $png = $mech->content_as_png(); 
     $name =~ s#http://##; #REMOVE THIS LINE 

     $name =~s#/#-#gis; 
     $name =~s#\s+\z##is;$name =~s#\A\s+##is; 

     $name =~s/^www\.//; 

     $name .= ".png"; 

     print $name . "\n\n"; #REMOVE THIS LINE  
     #open(my $out, ">",$name) or die $!; 
     #binmode($out); 
     #print $out $png; 
     #close($out); 
     #sleep (5); 
} 


__DATA__ 
http://www.unifr.ch/sfm 
http://www.zug.phz.ch 
http://www.schwyz.phz.ch 
http://www.luzern.phz.ch 
http://www.schwyz.phz.ch 
http://www.phvs.ch 
http://www.phtg.ch 
http://www.phsg.ch 
http://www.phsh.ch 
http://www.phr.ch 
http://www.hepfr.ch/ 
http://www.phbern.ch 

Sie sollten es für Ihre Bedürfnisse ändern können, sagte ich alle, aber die regex Sachen aus. Ich habe auch eine regec geändert, um ein '/' durch ein '-' zu ersetzen, so dass es weniger wahrscheinlich ist, dass doppelte URLs fälschlicherweise erzeugt werden.

Damit http://www.unifr.ch/sfm wird wie folgt aussehen: unifr.ch-sfm

Hope this

+0

Hallo lieber Benutzer 1269651. thx viel - sieht beeindruckend aus !! Was ist mit der Idee, ** die Ergebnisse in einem Ordner zu speichern ** genannt Bilder oder so !?) ist das machbar? Es würde viel helfen, da ich die Ergebnisse in einem Ordner gespeichert habe. Und die vielen Ergebnisse verderben die Maschine nicht ... freuen uns von Ihnen zu hören - vielen vielen Dank in Advande !! – zero

+0

So können Sie in einem Verzeichnis speichern: open (my $ out, '>', "path/$ name") oder die $ !; – user1269651

+0

hallo lieber user1269651 - vielen dank - grüße null – zero

1

Es gibt eine Reihe von Problemen mit Ihrem Code. Am wichtigsten ist die Linie

next if $_ =~ m/http/i; 

, die alle Zeilen aus urls.txt verwirft die http enthalten, die nicht das, was Sie wollen.

Anstatt jedes Problem einzeln zu durchlaufen, biete ich eine funktionale Version an. Ich hoffe, das ist zufriedenstellend.

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, ">", $name or die $!; 
    binmode $out; 
    print $out $png; 
    close $out; 
    sleep 5; 
} 
+0

hallo deaar Borodin - vielen vielen Dank - ich probiere es aus. Du Typ Rocker !! – zero

+0

naja ein paar kleine Dinge übrig - siehe oben ... was können wir mit diesen kleinen Fehlern machen .. siehe in der ersten Veröffentlichung ... BTW: Was ist mit der Idee von ** Speichern der Ergebnisse in einem Ordner. **. ./(genannt Bilder oder so !?) – zero