10 Einträge, 1 Seite |
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
use HTML::Parser;
my(%data) = (title => '', meta => [],
style => [], script => []);
my($CURRENT);
my $p = new HTML::Parser (
start_h => [sub {
my($tagname, $attr) = @_;
$CURRENT = $tagname;
push(@{$data{meta}}, $attr) if ($tagname eq 'meta');
}, 'tagname, attr'],
text_h => [sub {
my($text) = @_;
if ($CURRENT eq 'title') {
$data{title} = $text;
}
elsif ($CURRENT eq 'style') {
push(@{$data{style}}, $text);
}
elsif ($CURRENT eq 'script') {
push(@{$data{script}}, $text);
}
}, 'dtext'],
end_h => [sub { $CURRENT = '' }]);
$p->parse_file(*DATA);
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
my $p = HTML::TokeParser->new($file) ||
die "Can't open: $!";
my $head = {}; # Behälter für head-Tags
while (my $token = $p->get_token) {
# Abbruch bei Erreichen des body-Tags
if( $token->[0] eq "S" and $token->[1] eq 'body' ){
last;
}
#print Data::Dumper::Dumper($token);
# css_link
if( $token->[0] eq "S" and $token->[1] eq 'link' and $token->[2]->{'rel'} eq 'stylesheet' ){
push @{$head->{'css_link'}}, $token->[4];
}
# meta
if( $token->[0] eq "S" and $token->[1] eq 'meta' ){
push @{$head->{'meta'}}, $token->[4];
}
# title
if( $token->[0] eq "S" and $token->[1] eq 'title' ){
$head->{'title'} = $p->get_trimmed_text("/title");
}
# css_style
if( $token->[0] eq "S" and $token->[1] eq 'style' ){
push @{$head->{'css_style'}}, $p->get_trimmed_text("/style");
}
# js_script
if( $token->[0] eq "S" and $token->[1] eq 'script' and exists($token->[2]->{'language'}) and $token->[2]->{'language'} =~ /JavaScript/i ){
push @{$head->{'js_script'}}, $p->get_trimmed_text("/script");
}
}
print Data::Dumper::Dumper($head);
QuoteWorüber man sich noch streiten könnte ist, dass Leute ihr Scripten auch gerne irgendwo im Body platzieren (darf, bzw. soll man das?) und ich nur bis zum body-Start-Tag auslese.
Andererseits muss ich sowieso noch den body auslesen...
10 Einträge, 1 Seite |