Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]332[/thread]

Daten parsen/sannen CGI/LWP/Parser etc: ich verzweifle noch



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
justme69
 2004-07-19 23:21
#3204 #3204
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo...

ich werde noch halb wahnsinnig.
Ich rauf es nicht, eine Seite/URL einzulesen und den Inhalt nach Texten zu durchsuchen, die mich interessieren. Ich habe es mit LWP::UserAgent, HTML::Parser probiert und bekomme nur Fehlermeldungen, keine Ergebnisse...

Meine Nerven rauchen und ich seh nix mehr....  HILFE !!!

Also, ich lese aus einer Datei Links ein. Diese arbeite ich der Reihenfolge nach ab. Die im Browser geöffnete Seite möchte ich nun derart verarbeiten, daß ich z.B. entscheide, wie lange die Seite geöffnet bleibt - ob ich die Links (URL's) einlese und speichere oder ganz schnell zur nächsten gehe.. oder...

mein Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!C:\xampp\xampp\perl\bin\perl.exe -w

use strict        ;
use CGI          ;
use CGI::Carp qw/fatalsToBrowser/;

my $mycgi = new CGI;
my $p     = HTML::Parser->new ();

my $links_datei='../mails/output_url.html';
my $zyklus=35;
my $check1 = "Blöder Text.";
my $check2 = "ichweißwas";
my $check3 = "Hau doch ab";

my $line=$mycgi->param("line");
$line=0 if(!$line);

if(open(IN, "<", $links_datei))
{
 # Finde den Nächsten Eintag
 my @links=();
 while(my $i=<IN>)
 {
   chomp($i);
   push(@links,$i);
 }
 close(IN);
 $line++;
 $line=0 if($line>@links);    # zeile auf 0, wenn line > Anzahl der Elemente in @links

 $zyklus = 35;

 # Seite parsen und Zeit setzen

 # Seite parsen

 # den Link ausgeben:
 print $mycgi->header.
   '<html>
   <head>
     <title>Testseite</title>
     <meta http-equiv="refresh" content="'.$zyklus.'; URL='.$mycgi->url(-relative=>1).'?line='.$line.'">
   </head>
   <frameset rows="*" border="3">
     <frame src="'.$links[$line].'" border="0">

     <noframes>
       <body>Frames m&uuml;ssen darstellbar sein</body>
     </noframes>
   </frameset>
     <body>Frames m&uuml;ssen darstellbar sein</body>
   </html>';
}
else
{
 print $mycgi->header.
       $mycgi->start_html('FEHLER').
       $mycgi->h1('FEHLER').
       $mycgi->p($_[0]).
       $mycgi->end_html;
}




$check1 - $check3 sind beispiele zum text untersuchen...
So nach der Art soll's gehen:
Code: (dl )
1
2
3
4
 if ($seiteninhalt =~ $check1 )
{  $zyklus = 5;    }
elseif ( $seiteninhalt =~ $check2 )
{  $zyklus = 100; }


Wie kann ich das umsetzen - ohne durchzudrehen ???\n\n

<!--EDIT|justme69|1090266194-->
MfG
Stefan
DS
 2004-07-20 00:05
#3205 #3205
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Also mal langsam... du willst eine bestimmte Seite parsen und anzeigen, die Seite vor dem Anzeigen aber so manipulieren, dass automatisch eine bestimmte Reaktion ausgelöst wird, z.b. Weiterleitung auf eine bestimmte andere Seite nach einer bestimmten Zeit, richtig soweit?
justme69
 2004-07-20 00:07
#3206 #3206
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=DS,19.07.2004, 22:05]Also mal langsam... du willst eine bestimmte Seite parsen und anzeigen, die Seite vor dem Anzeigen aber so manipulieren, dass automatisch eine bestimmte Reaktion ausgelöst wird, z.b. Weiterleitung auf eine bestimmte andere Seite nach einer bestimmten Zeit, richtig soweit?[/quote]
Neee...

Ich will durch das Scannen des Inhaltes bestimmen, wie lange die Seite angezeigt wird, bevor der nächste Link aus der Datei kommt... Also keine bedingte Weiterleitung... bedingte Verweildauer....
MfG
Stefan
DS
 2004-07-20 00:22
#3207 #3207
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Dann machst da am besten mal 2 Programme draus. Das erste soll aus der Datei in der die Links stehen die ganzen Links auslesen und in irgendeiner Weise abspeichern, wennst as ganz einfach haben willst dann einfach in eine Textdatei, jede Zeile ein Link und fertig.
Das zweiter was du dann brauchst ist das Script zum anzeigen, dass dann ja über den Webserver laufen muss. Dem Ding übergibtst dann einfach beim Aufruf den Index (in diesem Fall die Zeilennummer) des Links, dessen Seite aufgerufen werden soll.
Dieses Script liest dann die Seite via get() (use LWP::Simple) ein, parst den Inhalt, manipuliert den Inhalt, und gibt in aus. Für das Parsen (und evtl. auch Manipulieren) würde ich dir mal HTML::Treebuilder nahelegen, das ist relativ einfach...
justme69
 2004-07-20 00:28
#3208 #3208
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Aehmm..

das script das ich benutze ist oben zu sehen und macht genau das, was du beschreibst ???

Bis auf das Parsen und Zeit setzen ???

Um genau dieses Parsen geht es mir - wie ich das in das bestehende script einbauen kann...

Dabei brauche ich Unterstützung ;)

Und jetzt steige ich in die Kiste, sonst ...
Gute nacht ;)
MfG
Stefan
DS
 2004-07-20 00:57
#3209 #3209
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Du hast eine .html-Datei die zeilenweise Links enthält ohne irgendwelches HTML?

Um HTML::Parser herzunehmen müßtest du das Modul erst mal einbinden (use HTML::Parser), allerdings würde ich dir wie gesagt HTML::Treebuilder empfehlen. Kommt natürlich darauf an, nach was genau du suchst, ob die Seiten, die geparst werden sollen "sauber programmiert" worden sind, etc.. HTML::Parser ist meines Wissens recht gnadenlos was falsch programmierte Seiten anbelangt, dafür is' er wiederum schneller. Ein Regexp geht unter Umständen auch, also teile mal mit nach was genau geparst werden soll... morgen dann.. :cool:
justme69
 2004-07-20 09:04
#3210 #3210
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Meine Fehlversuche mit dem Parser und LWP hab ich jetzt nicht mehr in den Code geschrieben. Was ich genau will ? s.o.
Code: (dl )
1
2
3
4
if ($seiteninhalt =~ $check1 )
{ $zyklus = 5; }
elseif ( $seiteninhalt =~ $check2 )
{ $zyklus = 100; }


Sowas in der Art machen können mit dem Seiteninhalt. Den Text nach Sachen absuchen.
Der Code interessiert mich nicht.

Habe es auch schon mit LWP::Useragent probiert und der Variante request($request,\&machwas,$Chunk_Size) probiert, was den Inhalt hppchenweise lädt und an &machwas weiterreicht zur Verarbeitung...
bisher ohne Erfolg...

Hat denn niemand ein Beispiel, wie er auf ner HTML-Seite via Get den Text nach was durchsucht - und auch findet ???
MfG
Stefan
[E|B]
 2004-07-20 13:22
#3211 #3211
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Moment, wollen wir das Kuddel Muddel doch mal etwas aufschließen:
Gehe ich richtig der Annahme, dass du dich auf eine Seite verbinden willst und da den Text, nicht den HTML Code, auslesen willst? Das kam nicht genau rüber, da du oben in deinem Beispiel ganz anders aggierst.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
justme69
 2004-07-20 13:29
#3212 #3212
User since
2004-07-19
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bingo... Mich interessiert der zu findene Text auf der $url-seite.
Der Code ist mir schnurz... (erstmal).
Wenn ich später nen Autologin basteln will, wird er interessanter, doch der Text ist primär wichtig.
MfG
Stefan
[E|B]
 2004-07-20 15:05
#3213 #3213
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use warnings;
use LWP::UserAgent;
use HTML::Stripper;

my $ua = LWP::UserAgent->new();
$ua->timeout(60);

my $response = $ua->get('http://www.example.org');
print "Fehler beim Connect!" and die if(!$response);

my $stripper = HTML::Stripper->new(skip_cdata => 1);
my $result = $stripper->strip_html(%$response);

print $result;
\n\n

<!--EDIT|[E|B]|1090326066-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-07-19 23:21.