CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
2020/02/08
CakePHP3+PHP Simple HTML DOM Parserでスクレイピング
CakePHP3+PHP Simple HTML DOM Parserでスクレイピング解説記事の事前説明
この記事は、CakePHP3に PHP Simple HTML DOM Parserをインストールしてスクレイピングをする環境を作る解説をするという内容です。
PHPでスクレイピングというと「phpQuery」に関連する記事が大量に出てきますが、「phpQuery」ではなく「PHP Simple HTML DOM Parser」の方をオススメする理由を「PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法」として記事にしましたので、興味があれば読んでください。
また、この記事では、PHP Simple HTML DOM Parserの基本的な設置方法も書いています。
また、PHP Simple HTML DOM Parserの設置方法、基本的な使い方については「PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方」として記事にしていますのでこちらを参考にしてください。
この記事に書いてあるのは、CakePHP3で PHP Simple HTML DOM Parserを使えるようにするところまでの内容です。
スクレイピングをする前に、PHPから Webサイトにアクセスする方法としては「file_get_contents」より「cURL」の方をオススメしますが、その理由を「PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較」として記事にしていますのでこちらも参考にしてください。
ただ、CakePHP3の場合は、Http Clientというライブラリが用意されていますので、それを利用するといいでしょう。
CakePHP3に PHP Simple HTML DOM Parserを設置する方法
1.PHP Simple HTML DOM Parser のインストール
まず初めに「PHP Simple HTML DOM Parser」をインストールします。
CakePHP3では、composerを使ってライブラリをインストールします。
下記のコマンドを実行します。
1 |
$ composer require kub-at/php-simple-html-dom-parser |
他の環境に合わせるために「PHP Simple HTML DOM Parser」のバージョンを指定してインストールする場合は、下記の「:1.9」のように最後にバージョンを追加します。
1 |
$ composer require kub-at/php-simple-html-dom-parser:1.9 |
詳しくは「CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法」を参照してください。
2.PHP Simple HTML DOM Parserを読み込む
続いて、インストールした PHP Simple HTML DOM Parserを CakePHP3で使うために呼び出す処理を記述します。
1 |
use KubAT\PhpSimple\HtmlDomParser; |
例えば、SampleController.phpで PHP Simple HTML DOM Parserを使うのであれば、SampleController.phpに記述します。
これで PHP Simple HTML DOM Parserは使えるようになります。
3.PHP Simple HTML DOM Parserでスクレイピングをするサンプルソース
前項までで PHP Simple HTML DOM Parserを使う準備はできましたので、この後では実際にスクレイピングをするサンプルソースを書いておきます。
その前に、スクレイピングをするためには Webサイトを読み込む必要がありますので、 Http Clientなどを利用することになります。
そのために、前項で追記した内容の次の行あたりに下記を追記します。
1 |
use Cake\Http\Client; |
そして、スクレイピングを行う処理のサンプルソースは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public function index(){ // UserAgent define("USER_AGENT_TEXT", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"); // スクレイピング対象サイトの URL $url = "https://www.yahoo.co.jp/"; // UAがないとエラーになるサイトの場合は、UAを設定する $option = ['headers' => ['User-Agent' => USER_AGENT_TEXT]]; $http = new Client($option); // URLにアクセスし HTMLを取得 $htmlSource = $http->get($url)->getStringBody(); // HTMLファイルから DOMオブジェクトを作成 $html = HtmlDomParser::str_get_html($htmlSource); // スクレイピング(「a」タグを取得) echo implode("<br>", $html->find("a")); } |
ヤフーのサイト「https://www.yahoo.co.jp/」から、「a」タグを取得し、それを画面に表示する、というソースになっています。
それぞれの行にコメントを書いているので処理内容は分かるかと思います。
最初にも書きましたが、PHP Simple HTML DOM Parserの具体的な使い方に関しては「PHPのスクレイピングライブラリ「PHP Simple HTML DOM Parser」の使い方」を参照してください。
http client()に User Agentを指定する方法
PHPから Webサイトにアクセスするときは、cURLを使うことをオススメします、と下記の記事でも書きました。
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
ですが、CakePHP3には http client() という便利なライブラリが用意されていますのでこれを利用すると便利です。
Cookbook Http Client
https://book.cakephp.org/3/ja/core-libraries/httpclient.html
http、httpsを区別なくアクセスすることができたり、POSTでリクエストボディを送信できたり、Basic認証や OAuth2認証なども処理してくれます。
Http Clientの基本的な使い方に関しては、上記の Cookbookに書いてありますので参照してもらえるといいのですが、User Agentを設定してサイトにアクセスする方法の記載がありませんでしたのでここで解説をしておきます。
1 2 3 4 5 6 7 |
// UAがないとエラーになるサイトの場合は、UAを設定する $option = ['headers' => ['User-Agent' => USER_AGENT_TEXT]]; $http = new Client($option); // URLにアクセスし HTMLを取得 $htmlSource = $http->get($url)->getStringBody(); |
User Agentを指定するには、オプションとして「headers」に指定をします。
簡単な設定で User Agentを指定してアクセスをすることができるようになります。
また、HTMLの本体を取得する場合は「->getStringBody()」を記述します。
また、定数「USER_AGENT_TEXT」はプログラム内のどこかで指定をしておいてください。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。
-
-
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。
-
-
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。
-
-
CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ
CakePHP3でシステム開発をする際、途中でカラムを追加した場合に何を変更すればいいかを確認。カラムを追加する前後で Bakeした結果を比較し、変更になった点をリストアップした。
-
-
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
-
CakePHPを学ぶ際にはオブジェクト指向を学ぼう
CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。