【PHP・スクレイピング】外部サイトのHTMLを取得し表示する例|PHP Simple HTML DOM

今回は、PHPのライブラリ「PHP Simple HTML DOM Parser」を利用し、外部サイトからHTMLの指定した箇所を取得し表示するスクレイピングの例となります。

外部サイトのHTMLを取得し表示する例|PHP Simple HTML DOM Parser

「PHP Simple HTML DOM Parser」では、HTMLのDOMツリーをパース(解析)し、オブジェクト型に変換することにより、PHPでHTMLの要素を扱えるようになります。

以下、「PHP Simple HTML DOM Parser」を利用する例となります。

PHP Simple HTML DOM Parserをダウンロード

まず、以下のリンク先からライブラリ「PHP Simple HTML DOM Parser」をダウンロードし解凍します。

PHP Simple HTML DOM Parser - Browse Files at SourceForge.net

ソースコードの例

以下、「PHP Simple HTML DOM Parser」を利用した簡単な例となります。例では、HTMLをパースし変換したオブジェクトから、以下のデータを取得し表示しています。

  • .main-list内のa要素をすべて取得し、a要素からhrefの属性値を表示
  • 最初のh2要素内のテキストを取得し表示
<?php
// simple_html_dom.phpを読み込み
require 'simple_html_dom.php';
// WebサイトのDOMをパースしオブジェクト型に変換
$html = file_get_html('https://example.com/');

// .main-list内のa要素をすべて取得しループで処理
foreach($html->find('.main-list a') as $element) {
	// href属性の値を取得し表示
    echo $element->href . '<br>';
}

// 最初のh2要素内のテキストを取得し表示
echo $html->find('h2', 0)->plaintext
?>

ソースコードの説明

以下、ソースコードの説明となります。

simple_html_dom.phpファイルを読み込み

まず、「PHP Simple HTML DOM Parser」を利用するため、ダウンロードしたフォルダ内にあるsimple_html_dom.phpファイルを読み込みます。

例のソースコードでは3行目の箇所となります。

DOMをパースしオブジェクトに変換|file_get_html関数

file_get_html関数では、引数に指定したWeb サイトのDOMツリーをパース(解析)し、オブジェクト型に変換します。

例のソースコードでは5行目の箇所となります。

指定した要素のオブジェクトを取得|findメソッド

file_get_html関数で変換したオブジェクトから指定した要素のオブジェクトを取得するには、次のとおりfindメソッドを利用します。

指定した要素をすべて取得する場合

findメソッドの引数に要素を指定します。それにより、指定した要素のオブジェクトを配列で取得します。

例のソースコードでは8行目の箇所となり、.main-list内のa要素をすべて取得しています。

指定した要素の一つを取得する場合

findメソッドの第1引数に要素を指定し、第2引数に要素の順番を指定します。それにより、指定した要素のオブジェクトを取得します。

例のソースコードでは14行目の箇所となり、最初のh2要素を取得しています。

要素の属性値を取得

要素のオブジェクトから属性値を取得するには、プロパティ名に属性値を指定してアクセスします。

例のソースコードでは10行目の箇所となり、a要素のhref属性値を取得しています。

要素内のテキストを取得

要素のオブジェクトから要素内のテキストを取得するには、プロパティ名にplaintextを指定してアクセスします。

例のソースコードでは14行目の箇所となり、最初のh2要素内のテキストを取得しています。

その他の利用方法について

PHP Simple HTML DOM Parserの利用方法の詳細は、以下のリンク先を参考にしてみてください。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。