Copy & Paste Engineer

【PHP】PHPを使って簡単にスクレイピングしてみる

PHP を使用して簡単にスクレイピングをしてみる

データの解析のため、PHPにスクレイピングをさせてみました。

サンプル

サンプルは Google から png 形式の画像を抜き出しを行っています。

<?php

use DOMDocument;
use DOMXPath;

// HTML読み込み
$html = file_get_contents('https://www.google.com/');
$dom = new DOMDocument('1.0', 'UTF-8');
$html = mb_convert_encoding($html, "HTML-ENTITIES", 'auto');
@$dom->loadHTML($html);

// 要素を検索
$xpath = new DOMXPath($dom);

// 画像タグのsrcにpngを含むものを検索(DOMNodeListを取得)
$contents = $xpath->query('//img[contains(@src, "png")]');

// 取得したDOMNodeListをforeach
// $value = DOMElement
foreach($contents as $value){
    // HTMLとして表示
    echo 'HTML';
    echo $value->ownerDocument->saveXML($value) . PHP_EOL;

    // HTML内の文字列を出力(HTMLタグは除去)
    echo 'string';
    echo $value->nodeValue . PHP_EOL;
}

取得結果

HTML
"<img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"/>"
String
""

HTMLが取得できました。 今回は画像タグで <img /> のためHTML内には文字列がありません。

解説

DOMDocument でHTMLを読み込み →DOMXPath で要素を検索し DOMNodeList を取得 → DOMNodeList に含まれている DOMElement を展開、解析など

これで簡単にスクレイピング出来ますね。 例えば aタグ を検索 → href からリンクを辿って指定のサイトのデータを抜き出す事なども可能です。

参考