lib-wwwの続き
でパーサを調べていたのですが、Spidering hacks―ウェブ情報ラクラク取得テクニック101選の#19のHTML::TreeBuilderがあまりに使いにくかったので、HTML::TokeParserを勉強しました。
http://homepage3.nifty.com/hippo2000/perltips/html/TokeParser.htmのサンプルを元に以下のことがわかりました。
$p = new HTML::TokeParser(\$page); #取得したページ情報をオブジェクトへ $text = $p->get_trimmed_text; #これは開始と終了タグで囲まれたテキストの取得 $val = $token->[1]{src};# $tokenには読み込みたいタグと一致する行が代入される #この場合タグ行にあるsrcに代入する値の取得
他にもあるかもしれませんが、これらが十分理解できたので良かったです。
例えば
$p = new HTML::TokeParser(\$page); #何故か \ が必要 while(my $token = $p->get_tag("form")){ my $acc = $token->[1]{action}; my $method = $token->[1]{method}; print "acc:$acc method:$method\n"; }
のように書けばアクションとメソッドが取得できるのです。とはいえ入れ子になる場合は、対処できないでしょうけど・・・ その場合はHTML::TreeBuilderなのかな。何処かに参考になるところはないかな?