perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 36
Click for quality!




10.02.2012 / 09:55

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragHTML Parser - ausgelesene Inhalte nicht immer vollständig
Seitenanfang
Hallo,

ich möchte gerne den Inhalt einer html-Seite parsen, d.h. in meinem Fall den Inhalt zwischen den body-Tags unter Ausschluss von Inhalten wie Linkbezeichnungen, Formularinhalte etc. auslesen. Das klappt zum Teil auch ganz gut. Bei einigen Seiten jedoch erhalte ich in meinem Ausgabestring in der Variable $content, die ich später ausgebe, nur einen Teil des Inhalts. Ein Beispiel dafür wäre Youtube.com. Hier bekomme ich die Beschreibungen der zwei ersten "featured videos" und danach ist Schluss, obwohl auf der Seite noch viel mehr steht. Hat jemand eine Ahnung woran es liegen könnte? Bei anderen Seiten dagegen bekomme ich wieder den kompletten Inhalt. Über Hilfe würde ich mich sehr freuen.

my $parser = HTML::Parser->new(
start_h => [ \&_starttag, 'self, tagname, text, attr' ],
end_h => [ \&_endtag, 'self, tagname' ],
text_h => [ \&_text, 'self, text, dtext' ]
);

$parser->parse($response->content());

sub _starttag {
my ($self, $tag, $attr) = @_;
$self->{'_body'} = 1 if($tag eq 'body');
$self->{'_body'} = 0 if($tag eq 'script');
$self->{'_body'} = 0 if($tag eq 'a');
$self->{'_body'} = 0 if($tag eq 'label');
$self->{'_body'} = 0 if($tag eq 'option');
$self->{'_body'} = 0 if($tag eq 'form');
}

sub _endtag {
my ($self, $tag) = @_;
$self->{'_body' } = 0 if($tag eq 'body' );
$self->{'_body' } = 1 if($tag eq 'a' );
$self->{'_body'} = 1 if($tag eq 'script');
$self->{'_body'} = 1 if($tag eq 'label');
$self->{'_body'} = 1 if($tag eq 'option');
$self->{'_body'} = 1 if($tag eq 'form');
}

sub _text {
my ($self, $dtext) = @_;
$dtext =~ s/\A\s+//;
$dtext =~ s/\s+\z//;
return() unless ( length($dtext) > 0 and $dtext =~ /[^\s]/ );
if ($self->{'_body'} == 1) {
$content=$content.$dtext." ";
}
}

Datum: 18.11.2007-19:03

Beitragre: HTML Parser - ausgelesene Inhalte nicht immer vollständig
Seitenanfang
Es hat sich schon von selbst erledigt, da ich vergessen habe Zeilenumbrüche im Quellcode mit einem regulären Ausdruck abzufangen. Danke dennoch!

Datum: 19.11.2007-14:59

-






-
-