Web系のこととかー。

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>

非常に便利なので、色々と使い道がありそう。

§174 · 4月 15, 2010 · プログラミング_PHP · · [Print]

4 Comments to “PHPでHTMLをパースする”

  1. [...] PHPでHTMLをパースするで紹介したPHP Simple HTML DOM Parseで、UserAgentを偽装したくなったので、ちょこっとスクリプトを修正してみました。 [...]

  2. [...] ~インプット馬鹿への道~] PHP "Simple HTML DOM Parser"の使い方メモ  ・[zaru blog] PHPでHTMLをパースする  ・[日記っぽいもの] PHP Simple HTML DOM [...]

Leave a Reply