rhacoのSimpleTagを試してみました
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 "<pre>".strip_tags(print_r($links, true))."</pre>";
結果(長いので最初の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さんご紹介ありがとうございます。
カテゴリ「PHP」の最新記事
Posted on 4 月 12th, 2007 by t PHP, プログラム&技術系

正しくないHTMLの可能性がある場合は
$tag->set($html, "body");
の時に
$tag->set($html, "body", true);
とすると正規化を図りますので、これで利用してみてください。
tokushimaさんコメントありがとうございます。
$tag->set($html, "body", true);で試してみました。
結果
parameterListにidが入りましたがaタグの件数が変わってしまいました。
はやり正確に抜き出すのは難しいのでしょうか。
上の例をやってみたところ、aタグの件数はどちらも(trueにしたのも)14件だったのですが、どんな感じになるのでしょうか?
再度試したいのですが諸事情で動かせません。報告は来週あたりになりそうです。
せっかく返信頂いたのに申し訳ありません。
再チャレンジ、rhacoのSimpleTag!…
この前試しに利用したときSimpleTag::setで正規化を図る時と図らないときで
件数に違いが出ていた件について再チャレンジしてみました。
せつないぶろぐ » r (more…)
Cialis.
Generic cialis. Buy cialis. Taking cialis. Cialis.