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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力
CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。
-
-
CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。
-
-
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。
-
-
CakePHP 2.3でファイルのアップロード処理を作る
CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。
-
-
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。
-
-
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。
-
-
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。
-
-
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。
-
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。