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

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

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

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

ComposerでPHP Simple HTML DOM Parserをインストール

まずは、PHPライブラリの依存関係を管理するComposerで「PHP Simple HTML DOM Parser」をインストールするため、プロジェクト内のComposerを配置するディレクトリにcdコマンドで移動し、以下のコマンドを実行します。

composer require simplehtmldom/simplehtmldom dev-master

ComposerをMacで利用する方法については、以下のリンク先を参考にしてみてください。

また、Composerを利用しないインストール方法については、以下のページを参考にしてみてください。

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

ソースコードの例

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

  • .main-list内のa要素をすべて取得し、a要素からhrefの属性値を表示
  • 最初のh2要素内のテキストを取得し表示

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

// Composerのautoload.phpを読み込み
require __DIR__ . '/vendor/autoload.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;

ソースコードの説明

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

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

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

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

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

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

指定した要素のオブジェクトをすべて取得する場合

findメソッドの引数に取得したい要素を指定するとこで、指定した要素のオブジェクトを配列で取得できます。

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

指定した要素のオブジェクトを1つ取得する場合

findメソッドの第1引数に要素を指定し、第2引数に要素の順番を指定することで、指定した順番の要素のオブジェクトを取得できます。

例のソースコードでは13行目の箇所となり、最初のh2要素のオブジェクトを取得しています。

要素の属性値やテキストを取得|オブジェクトのプロパティにアクセス

findメソッドで取得した要素のオブジェクトから属性値やテキストを取得するには、要素のオブジェクトのプロパティにアクセスします。

要素の属性値を取得する場合

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

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

要素内のテキストを取得する場合

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

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

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

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

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。