重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

HTML::Parserを使ってHTMLからimgタグを抽出しようとしています。

http://homepage3.nifty.com/hippo2000/perltips/ht …
などの解説どおりに書けばimgタグの各項目を取り出すことは出来るのですが結果を配列で取得することができません。

解析したいHTMLを渡すことでimgタグの各情報を配列で受け取るには堂書けばいいのか教えてください。

HTML::TokeParserも試してみましたがまれに正しく抽出できない場合があり使えませんでした。
同じHTMLをHTML::Parserで解析したところ全て正しく抽出できたのでHTML::Parserで処理したいと考えています。

A 回答 (1件)

一週間経過しているのでご自分で解決されたかもしれませんが


削除もされていないので一応書いておきます。
hippoさんのところのドキュメントより新しいバージョンだと思うので
多少事情が違うかもしれませんが、

use strict;
use warnings;

use HTML::Parser;

my @imgs;

my $p = HTML::Parser->new( api_version => 3,
start_h => [\@imgs, "attr"],
marked_sections => 1,
);

$p->report_tags(qw(img));
$p->parse_file("index.html");

foreach my $ary_ref (@imgs) {
#$ary_ref->[0]が指すハッシュはimg タグで使われている属性を
#キーとしている。たとえば altがあれば {alt}の要素も存在する。
print $ary_ref->[0]->{src}, "\n";
}

こんなスクリプトで、index.htmlの中にある imgタグの src部分を全部出力できました。
上記の例では出力していますが、各要素のsrcを集めて配列に収めるのなら

push @links, $ary_ref->[0]->{src};

のようにしてやればよいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!