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として参照することができるためです。
次にXpath。XpathはTbodyが使えません。FirefoxでXpatherを使ってXpathを取得している人は気を付けましょう。