SimpleXML&Tidy@動画サイトへの道

こんにちはー。再構築といいつつ、しばらく手を休めてましたが再開しました。
さて、Webページのスクレイピングですが、SimpleXMLとTidy関数を使います

流れとしては、
- Tidy関数でHTMLを整形
- SimpleXML化
- Xpathで抽出


HTML整形のこーどは以下の通り。

    $config = array(
        'indent'     => TRUE,
        'output-xml' => TRUE,
        'wrap'       => 200);
    $html = file_get_contents("http://xxx.xxx");
    $codeList = array("Shift_JIS", "EUC-JP", "SJIS", "UTF-8", "JIS");
    $html = mb_convert_encoding($html, "UTF-8", mb_detect_encoding($html, $codeList));
    $html = html_entity_decode($html);

    //HTML整形
    $tidy = new tidy;
    $tidy->parseString($html, $config, 'utf8');
    $tidy->cleanRepair();

文字コードを指定しなければならないので、一旦UTF8に揃えちゃいましょう
tidyのコンフィグはまだ把握してないので、おまじないになっています。


その後、SimpleXML化してXpathで抽出するのです。

$xmlObj = new SimpleXMLElement($tidy);
$xmlObj->xpath('//xpath');

ここでの注目点は、SimpleXMLのコンストラクタの引数はStringですが、ここではTidyオブジェクトを放り込んでいます。
tidyオブジェクトはStringとして参照することができるためです。
次にXpathXpathはTbodyが使えません。FirefoxでXpatherを使ってXpathを取得している人は気を付けましょう。