Thread Code für HTML::Parser korrekt?
(19 answers)
Opened by Gast at 2010-03-01 19:48
Sieht schöner aus und funktiniert immer noch:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 use HTML::Parser; my $parser = HTML::Parser->new; $parser->handler( start => \&start_handler, 'tagname, self' ); $parser->parse( $content ); sub start_handler { return if shift ne 'li'; my $self = shift; $self->handler( start => \&title_handler , 'tagname, attr' ); } sub title_handler { return if shift ne 'a'; my $title = shift->{title}; return unless $title; if ( $title =~ /\Q$name\E/sm ) { say $title; } } Mich hat überhaupt gestört, dass ich für das Suchen nach verschatelten HTML-Tags zwei Subroutinen brauche, aber das wird vermutlich mit diesem Modul nur so funktionieren. Mit XML::LibXML würde es schöner aussschauen. Leider sind diesem Modul viel HTML-Seiten nicht gut genug. Code (perl): (dl
)
1 2 3 4 5 6 7 8 use XML::LibXML; my $parser = XML::LibXML->new; my $doc = $parser->parse_html_string( $content ); my @nodes = $doc->findnodes( '//li/a[@title]' ); for my $node ( @nodes ) { say $node->nodeName, " ", $node->string_value; } Außerdem dachte ich, dass hier soetwas funktionieren würde: Code (perl): (dl
)
my @nodes = $doc->findnodes( '//li/a[@title] =~ /regex/' ); Das scheint aber nicht zu funktionieren. |