Posted at

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で、取りたいオブジェクトを引っ張ってこられる。