rhacoのSimpleTagを試してみました
「PHPでHTMLをparseしたい」って書いたらrhaco(らこ)を紹介して頂いたので
試してみました。
ダウンロード先は下記のサイトから
rhaco.org
http://www.rhaco.org/
私が利用したのはrhaco_1_1_0.zip
で本来はフレームワークみたいなんですが、
必要なのはあくまでHTMLのparse部分なんでライブラリ的に使ってみる。
なので今回はsetup.phpは利用しないで展開して設置だけ。
下記の記事を参考に
rhaco – rhacoのSimpleTag
http://d.hatena.ne.jp/rhaco/20061207
bodyタグ配下のaタグの抽出。リンク抽出だったらSnoopy::fetchlinksを使えば簡単なんだけどあくまでも例って事で。
require_once("./tag/data/SimpleTag.php");
$html = file_get_contents("http://www.google.co.jp/webhp?hl=ja");
$tag = new SimpleTag();
$tag->set($html, "body");
$links = array();
foreach($tag->getIn("a") as $childTag){
$links[] = $childTag;
}
echo "
".strip_tags(print_r($links, true))."
";
結果(長いので最初のaタグだけ)
Array(
[0] =>
SimpleTag Object
(
[name] => a
[value] => このページをカスタマイズする
[plain] => このページをカスタマイズする
[parameterList] => Array
(
[href] => SimpleTagParameter Object
(
[id] => href
[value] => /url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja&usg=__zzRfDx_8QtfWxWHbIBWfjMV_2H8=
[name] => href
)
)
[attributeList] => Array
(
)
)
ちゃんとaタグがSimpleTagオブジェクトとして返却されました。
これは便利。
気になったのは<a id=”hogehoge”>xxxx</a>だと
parameterListにidが入って
<a id=hogehoge>xxxx</a>だと
attributeListにidが入ってしまうとこ。
どっちもparameterListに入って欲しいな。
SimpleTagParser::parseParameterAttribute()で”と’で判断しているのでこうなっちゃうみたい。
正しくないHTMLをどこまで補完するかってとこになると思うんだけど対応して欲しいな~
時間作ってフレームワークの検証もしてみたいと思います。
haltさんご紹介ありがとうございます。
ソフトウェア開発、アジャイルなどについてSE兼PGが思った事を書いてます。たまにプログラムも
5 Responses to rhacoのSimpleTagを試してみました
tokushima
4月 12th, 2007 at 12:07:57
正しくないHTMLの可能性がある場合は
$tag->set($html, "body");
の時に
$tag->set($html, "body", true);
とすると正規化を図りますので、これで利用してみてください。
t
4月 14th, 2007 at 0:16:17
tokushimaさんコメントありがとうございます。
$tag->set($html, "body", true);で試してみました。
結果
parameterListにidが入りましたがaタグの件数が変わってしまいました。
はやり正確に抜き出すのは難しいのでしょうか。
tokushima
4月 18th, 2007 at 1:58:06
上の例をやってみたところ、aタグの件数はどちらも(trueにしたのも)14件だったのですが、どんな感じになるのでしょうか?
t
4月 20th, 2007 at 15:25:21
再度試したいのですが諸事情で動かせません。報告は来週あたりになりそうです。
せっかく返信頂いたのに申し訳ありません。
せつないぶろぐ
5月 13th, 2007 at 19:36:18
再チャレンジ、rhacoのSimpleTag!…
この前試しに利用したときSimpleTag::setで正規化を図る時と図らないときで
件数に違いが出ていた件について再チャレンジしてみました。
せつないぶろぐ » r (more…)