我需要做一些解析网页上的一些数据。如何使用HTML :: Parser?
在标签之间提取文本请考虑以下示例代码:
#!/usr/bin/perl
use strict;
use warnings;
use HTML::Parser;
use Data::Dumper;
my $find_title = HTML::Parser->new(
api_version => 3,
start_h => [
sub {
my ($tag, $attr) = @_;
print Dumper \@_;
},
'tag'
],
);
my $html = join '',
"<html><head><title>Extract me!</title></head><body>",
(map { qq(<a href="http://$_.com">$_</a>) } qw/foo bar baz/),
"</body></html>";
$find_title->report_tags('title');
$find_title->parse($html);
如何解决此问题,以便提取标题?这只会提取标签。
答案 0 :(得分:0)
您需要一个text_h
处理程序来收集文本,并且end_h
处理程序在</title>
标记出现时执行某些操作(此时标记内的文本已被收集)
HTML :: Parser是一个相当低级别的模块,您可能会对基于其构建的众多模块之一感到满意,例如HTML::TreeBuilder或HTML::TokeParser。
例如,HTML::HeadParser使得提取标题变得微不足道:
use strict;
use warnings;
use HTML::HeadParser;
my $html = join '',
"<html><head><title>Extract me!</title></head><body>",
(map { qq(<a href="http://$_.com">$_</a>) } qw/foo bar baz/),
"</body></html>";
my $p = HTML::HeadParser->new;
$p->parse($html);
my $title = $p->header('Title');