Thread Code für HTML::Parser korrekt? (19 answers)
Opened by Gast at 2010-03-01 19:48

Gast Gast
 2010-03-02 08:36
#133857 #133857
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.

View full thread Code für HTML::Parser korrekt?