【问题标题】:How can I extract text between tags using HTML::Parser?如何使用 HTML::Parser 提取标签之间的文本?
【发布时间】:2010-12-27 07:18:59
【问题描述】:

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

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

【问题讨论】:

    标签: html perl parsing


    【解决方案1】:

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

    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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2016-03-27
      • 2012-04-02
      相关资源
      最近更新 更多