XMLじゃなくて、HTMLを解析したい…。しかもPHPで。
XMLだと、simplexml_load_file()っていう便利な関数がPHP5からあるけれど、HTMLはタグを取り除くぐらいしかない…というわけで、探してみたらHTMLをパースするライブラリがあった。
その名もまんまな、PHP Simple HTML DOM Parser。
2011/02/21 追記
ユーザエージェントを偽装する方法を書きました。
使い方
include('simplehtmldom/simple_html_dom.php'); $html = <<<EOM <ul> <li>aaa</li> <li>bbb</li> <li>ccc</li> </ul> EOM; $data = str_get_html($html); foreach($data->find('li') as $element){ echo $element->plaintext; } #=>aaabbbccc //URLやフィある名を指定して取得することも出来。 //その際は、 str_get_html() ではなく file_get_html() 。 $html = file_get_html('http://www.yahoo.co.jp/');
簡単な使い方は上記の通り。サイトにも書いてある通り、jQueryチックな使い方ができるので、以下のようなこともできる。
include('simplehtmldom/simple_html_dom.php'); $html = <<<EOM <ul> <li>aaa</li> <li id="hoge">bbb</li> <li>ccc<strong>ddd</strong></li> </ul> EOM; $data = str_get_html($html); foreach($data->find('#hoge') as $element){ echo $element->plaintext; } #=>bbb foreach($data->find('li strong') as $element){ echo $element->plaintext; } #=>ddd echo $data->find('li',1)->id; #=>hoge
データを抜き出すだけではなく、HTMLを書き換えることもできる。
$html = <<<EOM <ul> <li>aaa</li> <li>bbb</li> <li>ccc</li> </ul> EOM; $data = str_get_html($html); $data->find('ul',0)->class = 'hoge'; $data->find('li',2)->innertext = 'piyo'; echo $data; #=><ul class="hoge"> #=> <li>aaa</li> #=> <li>bbb</li> #=> <li>piyo</li> #=></ul>
非常に便利なので、色々と使い道がありそう。
[...] PHPでHTMLをパースするで紹介したPHP Simple HTML DOM Parseで、UserAgentを偽装したくなったので、ちょこっとスクリプトを修正してみました。 [...]
[...] PHPでHTMLをパースする | zaru blog [...]
[...] PHPでHTMLをパースする | zaru blog [...]
[...] ~インプット馬鹿への道~] PHP "Simple HTML DOM Parser"の使い方メモ ・[zaru blog] PHPでHTMLをパースする ・[日記っぽいもの] PHP Simple HTML DOM [...]