LWP::UserAgent: Nur die erste Seite wird geholt
Edi
- cgi
Ich habe versucht, ein Skript zu schreiben, das die Ergebnisse einer Suchabfrage in einem File speichert. Dabei sollen mehrere Abfragen durchgeführt bzw. mehrere Resultat-Seiten gespeichert werden.
#!/usr/bin/perl
use LWP::UserAgent;
$url_result = "http://...";
$url_result1 = "http://...";
$ua = new LWP::UserAgent;
$ua->proxy('http' => "http:// ...");
$req = new HTTP::Request 'GET' => "$url_result";
$res = $ua->request($req);
$result = $res->is_success() ?
$res->content() :
"Error: " . $res->code() . " " . $res->message();
open (DAT, ">$work/result.txt");
print DAT $result;
close(DAT);
$ua1 = new LWP::UserAgent;
$ua1->proxy('http' => "http:// ...");
$req1 = new HTTP::Request 'GET' => "$url_result1";
$res1 = $ua1->request($req1);
$result1 = $res1->is_success() ?
$res1->content() :
"Error: " . $res1->code() . " " . $res1->message();
open (DAT, ">>$work/result.txt");
print DAT $result1;
close(DAT);
Eigentlich funktioniert alles. Ausser: Es wird jeweils nur die erste Resultat-Seite gespeichert. D.h. bei meinem Beispiel wird zwei Mal die erste Seite (mit dem Suchstring $url_result) in das File geschrieben.
Ich habe keine Ahnung, was ich übersehen oder vergessen habe...
Edi
hi,
$ua = new LWP::UserAgent;
$ua1 = new LWP::UserAgent;
hmm, den Fehler seh ich auch nicht auf Anhieb, wohl aber, dass Dein Script einwenig chaotisch aussieht, zb brauchst Du den UserAgent $ua doch nur einmal zu erstellen.
Tipp: Gibt die ge-fetchten Dokumente mal so aus, bevor Du die Datei schreibst.
Viele Grüße, Rolf
zb brauchst Du den UserAgent $ua doch nur einmal zu erstellen.
Du hast Recht. Meine Überlegung dabei war, dass es an der Variable des UserAgent liegen könnte, dass immer dieselben Daten ins File geschrieben werden.
hi,
#!/usr/bin/perl
use LWP::UserAgent;
da fehlt use Fcntl ':flock';
$url_result = "http://...";
$url_result1 = "http://...";Erste Seite holen
...
open (DAT, ">$work/result.txt");
zum schreiben immer
flock(DAT, LOCK_EX); #lock exclusive-> kein anderer darf...schreiben/lesen
benutzen vor allem bei mehreren requests gleichzeitig->Grundregel Nr.1 !!
print DAT $result;
close(DAT);Zweite Seite holen
...
open (DAT, ">>$work/result.txt");
flock(DAT, LOCK_EX);#fehlt
print DAT $result1;
close(DAT);
das andere wurde ja schon geschrieben,hab mir nicht weiter dein script studiert.
Gruss
Alain
zum schreiben immer
flock(DAT, LOCK_EX); #lock exclusive-> kein anderer darf...schreiben/lesen
benutzen vor allem bei mehreren requests gleichzeitig->Grundregel Nr.1 !!
Danke für den Hinweis! Leider funktioniert das Skript immer noch nicht...
Ich habe es in der Zwischenzeit mit einer Suchabfrage in einer anderen Datenbank versucht: Die gewünschten Seiten werden in das File geschrieben. Bei Google dagegen erhalte ich die Fehlermeldung "HTTP Error 403 - Forbidden". Es scheint also, dass das Problem mit der Serverkonfiguration zusammenhängt.
Edi