如何使用HTML :: Parser在标签之间提取文本?

时间:2010-12-27 07:19:00

标签: html perl parsing

我需要做一些解析网页上的一些数据。如何使用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);

如何解决此问题,以便提取标题?这只会提取标签。

1 个答案:

答案 0 :(得分:0)

您需要一个text_h处理程序来收集文本,并且end_h处理程序在</title>标记出现时执行某些操作(此时标记内的文本已被收集)

HTML :: Parser是一个相当低级别的模块,您可能会对基于其构建的众多模块之一感到满意,例如HTML::TreeBuilderHTML::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');