PHP
スクレイピング
dom

PHPでスクレイピング

More than 5 years have passed since last update.

PHPでスクレイピングの記事が投稿されていたので、自分のやり方をメモ。

  $body = file_get_contents( $url );
  //$body = mb_convert_encoding($body, 'UTF-8', 'sjis-win'); // 文字コードが違えば

  // HTMLが間違っている場合があるので、tidyを通して綺麗にする。
  $tidy_obj = new tidy;
  $tidy_obj->parseString( $body, array(), 'utf8');
  $tidy_obj->cleanRepair();
  $body = $tidy_obj->html();
  unset( $tidy_obj );

  // 分解
  $dom = new DOMDocument;
  $dom->encoding = 'UTF-8';
  $dom->preserveWhiteSpace = false;
  $dom->loadHTML( $body );
  $xpath = new DOMXPath( $dom );
  unset( $dom );

  $nodes = $xpath->evaluate( "//div[@class='category']/div/p/a" );

という感じ。
HTMLが間違っていると、DOMDocumentが正しく認識できないときがあるので、tidyを通して綺麗にするのがポイント。
あとはxpathで、取りたいオブジェクトを引っ張ってこられる。