導入
Web開発の現場において、外部サイトの情報を取得したり、特定のHTML構造からデータを抽出する「スクレイピング」は非常に重要なスキルです。正規表現を使ってHTMLをパースしようとすると、タグの入れ子構造や属性の順序変更などにより、すぐにメンテナンス不可能なコードになってしまいます。PHPでは、標準搭載されているDOMDocumentとDOMXPathを組み合わせることで、堅牢かつ柔軟なHTML解析が可能になります。
基礎知識
DOMDocumentは、HTMLやXMLをメモリ上にツリー構造(DOM)として展開するためのクラスです。HTMLを読み込み、要素や属性をオブジェクトとして操作できます。
一方、DOMXPathは、そのDOMツリーの中から特定の要素をクエリ言語(XPath)を使って検索するためのツールです。CSSセレクタに近い感覚で、「idがcontentのdivの中にあるpタグ」といった複雑な指定を簡潔に記述できます。
実装/解決策
HTMLを解析する際の基本的なステップは以下の通りです。
1. 読み込み: loadHTML()を使用してHTML文字列を読み込みます。HTMLの構造が不完全な場合のエラーを抑制するため、メソッド呼び出しの前に「@」を付与するのが一般的です。
2. XPathの初期化: DOMDocumentオブジェクトをDOMXPathのコンストラクタに渡し、検索エンジンを準備します。
3. クエリ実行: query()メソッドを用いて対象要素を抽出します。戻り値はDOMNodeListオブジェクトとなるため、item(0)で個別のノードにアクセスします。
サンプルプログラム
以下は、特定のdiv要素内の内容を取得し、そこからさらに属性や子要素を抽出する実用的なコード例です。
データ1
データ2