PHPでスクレイピングを行う場合に、以下の選択肢があります。
状況やプロジェクトによりますが、selenium
かpanther
を使うと思います。PHPでスクレイピングをするには他にもたくさん選択肢があるので、今回はそれぞれについて説明していきます。
- phpQuery
- selenium
- Goutte
- PuPHPeteer
- panther
- Dusk(Laravel)
phpQuery
phpQueryはDOM操作をjQuery風
に行うことができます。
zipでインストールするかと思っていましたが、composerも使えるらしいです。
$ composer require electrolinux/phpquery
あまりjQueryライクにかけることがメリットかわからないので、触ってはいません。
参考
selenium
seleniumもテスト自動化などによく使われています。Selenium自体はJavaでできています。
ブラウザごとのドライバーをインストールする必要があります。
facebook-webdriver + ブラウザのドライバ(今回はSelenium Google Chrome Driver) + Selenium Server Standalone
の組み合わせで使用します。
facebook-webdriverはFacebookが作成したPHP Webdriverです。php-webdriverのAPIドキュメント
Selenium Serverはリクエストを受け取ったら適切なブラウザのドライバを起動して、ブラウザのドライバにリクエストを行います。
ブラウザのドライバダウンロードページ一覧
少々セットアップが面倒ですが、記事数も多いですし、一番汎用性が高いです。一番無難に使用できるのでselenium
を使った方が良いと思います。
参考
Goutte
こちらは記事がたくさんあるので、詰まることはほとんどないと思います。
$ composer require fabpot/goutte
しかし動的ページを操作することができないので、動的ページが多い昨今ではあまり使えないかもしれません。
参考
PuPHPeteer
PHPからNodeリソースを管理しており、puppeteer
をPHPで使えるようにしたライブラリ。開発はあまり頻繁には行われていないようです。
puppeteer自体ははHeadless Chrome使うのを便利にするNodeライブラリで、Chrome DevToolsのチームが開発しています。
私はnode.js
で自動化させる必要がある場合は毎回puppeteerを使用しています。とても使いやすいですし、Selenium Webdriver
と違いヘッドレスブラウザを使うことができるので、高速に動作させることができます。
githubのスターも59.3k
ととても多く、その使いやすさと開発の手厚さがわかります。
さて、PuPHPeteerですが、puppeteerとのブリッジということもあり、Chrome限定
になってします。さらに日本語の記事がとても少ないです。
puppeteerに慣れていればすんなり始めることができると思うので、puppeteerを普段使っていれば有力な選択肢にはなると思います。
参考
laradockでpuppeteer
Puphpeteer: A Puppeteer bridge for PHP
Panther
$ composer req --dev symfony/panther
SymfonyのBrowserKitおよびDomCrawlerコンポーネントを実装しています。
なので、Symfonyアプリの機能テストを作成したことがある場合はすぐに同じように書くことができます。
特徴
- Webページに含まれるJavaScriptコードを実行します
- Chrome(またはFirefox)が実装するすべてをサポートします
- スクリーンショットを取ることができます
- 非同期にロードされた要素が現れるのを待つことができます
- ロードされたページのコンテキストで独自のJSコードまたはXPathクエリを実行できます
- カスタムSeleniumサーバーのインストールをサポート
- SauceLabsやBrowserStackなどのリモートブラウザテストサービスをサポート
使い勝手がとてもいいのでたまに使用しますが、なんせ日本語の記事が全くないので、詰まったら結構時間を食われてします。しかし環境に依存しないという点はとても素晴らしいので使ってみるのも良いと思います。
参考
Laravelの場合
Dusk
Facebook php-webdriverのラッパー。
DuskはスタンドアローンのChromeDriverを使用しいるため、JDKやSeleniumのインストールする必要はありません。上記のselenium
を使うまでの一連の流れが全て終了しているような感じのものです。
今まで使ったスクレイピングのライブラリの中ではかなり使いやすい方です。
しかしここで一つ注意したいのが、本番では使ってはいけないということ。
インストールすると、アプリケーションに対する未認証でのアクセスを許すようになります。
つまり、Duskの内部ではだれでもシステムユーザーとしてログインできるエンドポイントを公開しているので、本番で使用すると外部からの未認証アクセスを許すようになってしまうことになりセキュリティ的にアウトということ。
本番にインストールしようとすると、エラーメッセージが出ます。
それでも、本番環境にインストールしたい場合は、以下コマンドでインストールできます。
composer install --no-dev
参考
まとめ
一番無難に使えるselenium
になるのかなと思います。
スクレイピング全般に関してですが、どれも一長一短なので、いくつか触ってみて気に入ったものを使うと良いと思います。