|
|
 |

|

 |

| Community » Perl/CGI: Scripts des Perl-Archiv |
|
IO::Socket ,ausgabe speichern
|
Seitenanfang |
Hallo! Ich habe ein Problem! Ich habe ein "Googler" Programm gemacht welches mir alle Seiten aus dem Source-code von Google ausliest und ausgibt! Jetzt möchte ich die Seiten aber noch in einer Datei speichern,allerdings geht das nicht richtig da ich dann jede seite 5 mal habe und durch \n rießige Lücken entsehen was dann ungefähr so aussieht http://www.site.com http://www.site.com http://www.site.com http://www.site.com http://www.site.comhttp://www.site1.com http://www.site1.com http://www.site1.com http://www.site2.com Das geht einfach nicht! Ich möchte das jede seite einzeln eingetragen wird und keine solchen lücken enstehen! Hier ist der Code: use IO::Socket; while ($i<360) { $i++; $i+=9; $sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "www.google.de", PeerPort => "80") || die "[-]Connect Failed\r\n"; print $sock "GET /search?q=hallo&hl=de&hs=H3K&lr=&client=firefox-a&rls=org.mozilla:de:official_s&start=".$i."&sa=N HTTP/1.1\n"; print $sock "Host: www.google.de\n"; print $sock "Accept: */*\n"; print $sock "Connection: close\n\n"; while($res = <$sock>){ $res =~ m/<a class=l href="(.*?)">/ && print "$1\n"; open(found,">>found11.txt"); foreach $name ($1) { print found join("\n",$name),"\n"; } } } ich habe es auch schon mit: open(file, ">test.txt"); print file "alles\n"; close(file); probiert,aber es ist immer wieder das gleiche! Weiß jemand wie man das umgehen kann bzw anders machen kann? Ich hoffe ihr könnt mir helfen!
Datum: 24.07.2006-21:12

|
re: IO::Socket ,ausgabe speichern
|
Seitenanfang |
| Find ich gut. Ich habe kurz zuvor ein Programm laufen lassen, dass die Variable $i als Zähler verwendet hat. Nun lass ich das andere Programm laufen und zufälligerweise alloziert es die selben Speicherzellen (Da steckt man nie drin!). Im anderen Programm ist mein $i aber auf 586 gestanden. Ich wünsche viel Spaß bei der Fehlersuche. Also:
my $i = 0; while ( $i < 360 ) { #...do something }
Ansonsten würde ich doppelt hintereinander folgende LineFeeds löschen.
$var = s/(\n\n|\r\n\r\n)/\n/g;
Schönen Tag. -uw
Datum: 25.07.2006-04:06

|
re: IO::Socket ,ausgabe speichern
|
Seitenanfang |
Das Funktioniert irgendwie nicht: my $i = 0; while ( $i < 360 ) { #...do something } Also Dann: use IO::Socket; while ($i<360) { $i++; $i+=9; $sedsock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "www.google.de", PeerPort => "80") || die "[-]Connect Failed\r\n"; print $sock "GET /search?q=inurl:%22page=%22+inurl:%22.asp%3D%22&hl=de&hs=H3K&lr=&client=firefox-a&rls=org.mozilla:de:official_s&start=".$i."&sa=N HTTP/1.1\n"; print $sock "Host: www.google.de\n"; print $sock "Accept: */*\n"; print $sock "Connection: close\n\n"; while($res = <$sock>){ $res =~ m/<a class=l href="(.*?)">/ && print "$1\n"; my $i = 0; while ( $i < 360 ) {open(found,">>found11.txt"); foreach $name ($1) { print found join("","$1"),"\n"; }} } } dann passiert garnichts :( Bitte helft mir!
Datum: 25.07.2006-13:08

|
re: IO::Socket ,ausgabe speichern
|
Seitenanfang |
oh ich muss das $sedsock noch auf $sock ändern... aber es passiert trozdem nichts :(
Datum: 25.07.2006-13:09

|
re: IO::Socket ,ausgabe speichern
|
Seitenanfang |
| Erstmal: Benutze immer strict. (use strict;) Zweitens: einfach testen ob die varaible die du in das FILE schreiben willst mit was gefüllt ist (if ($foo ne "" && $foo ne " " && $foo ne "\n") {print FILE "$foo\n";}
Datum: 04.10.2006-21:13

|
|

|

|

|
 |

|

|
|