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ツリーとしてメモリに保持され、getElementByIdやgetElementsByTagNameなどのメソッドでノードを取得できます。
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形式で構造化データを生成する場合は、DOMDocumentのcreateElementやcreateAttributeメソッドを使ってノードを構築し、saveXMLで文字列化します。
コメント
コメントを投稿