Как я могу извлечь текст между тегами, используя HTML :: Parser? - PullRequest
0 голосов
/ 27 декабря 2010

Мне нужно разобрать некоторые данные с веб-страниц. Как извлечь текст между тегами, используя 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 голосов
/ 27 декабря 2010

Вам нужен обработчик 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...