2010-12-27 13 views
0

私はいくつかのデータをWebページから解析する必要があります。 HTML :: Parserを使用してタグ間でテキストを抽出するにはどうすればよいですか?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

テキストを収集するにはtext_hハンドラが必要で、</title>タグが表示されたとき(タグ内のテキストが収集された時点)に何かを行うハンドラがend_h必要です。

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'); 
関連する問題