スキップしてメイン コンテンツに移動

PHP8 DOMスクレイピング

PHP8 DOMスクレイピング

PHP8でのDOM解析入門

近年、PHP8の性能向上と型安全性の強化により、WebスクレイピングやHTML解析の作業がより高速かつ安全に行えるようになりました。DOM解析は、HTMLやXMLをツリー構造として扱い、ノード操作を行う手法です。PHP8では、DOMDocumentクラスが標準で提供されており、loadHTMLメソッドを使って簡単にHTMLを読み込むことができます。

以下は、簡単な例です。まずはHTMLを読み込み、DOMDocumentオブジェクトを作成します。

$html = file_get_contents('https://example.com');
$doc = new DOMDocument();
@$doc->loadHTML($html); // @で警告を抑制

この段階で、HTMLはDOMツリーとしてメモリに保持され、getElementByIdgetElementsByTagNameなどのメソッドでノードを取得できます。

DOMDocumentとDOMXPathの使い方

DOMXPathは、XPathクエリを使ってDOMツリーから要素を検索するためのクラスです。XPathはXMLやHTMLの構造を表現する言語で、複雑な条件でノードを抽出できます。PHP8では、DOMXPathを組み合わせることで、スクレイピングの精度と柔軟性が大幅に向上します。

以下は、XPathを使って特定のクラス名を持つタグを取得する例です。

$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//a[contains(@class, "target-class")]');
foreach ($nodes as $node) {
    echo $node->getAttribute('href') . PHP_EOL;
}

ノード操作の基本は、DOMNodeオブジェクトを介して行います。例えば、nodeValueでテキストを取得したり、appendChildで子ノードを追加したりできます。

構造化データをXMLで扱う

Webページに埋め込まれた構造化データ(JSON-LDやMicrodata)は、検索エンジン最適化(SEO)に不可欠です。PHP8のDOMDocumentを使えば、XMLとして構造化データを解析し、必要な情報を抽出できます。

例えば、JSON-LDを含むscriptタグを取得し、JSONとしてデコードする方法です。

$scripts = $xpath->query('//script[@type="application/ld+json"]');
foreach ($scripts as $script) {
    $json = json_decode($script->nodeValue, true);
    // ここで$JSONを使ってデータを処理
}

また、XML形式で構造化データを生成する場合は、DOMDocumentcreateElementcreateAttributeメソッドを使ってノードを構築し、saveXMLで文字列化します。

この記事はAIによって作成されました。

コメント