この比較ガイドでは
- PHPウェブスクレイピング・ライブラリとは
- 最適なPHPスクレイピング・ライブラリを選択する際に考慮すべき主な要素
- トップPHPスクレイピング・ライブラリの概要
- 選択したツールの主な特徴を強調した要約表
さあ、飛び込もう!
PHPウェブスクレイピング・ライブラリとは?
PHPのWebスクレイピングライブラリは、Webページからデータを抽出するためのツールです。特に、PHPによるWebスクレイピングの1つ以上のステップを支援します。
これらのライブラリーは、ウェブ・サーバーに接続し、DOMを解析し、ウェブ・ページからデータを抽出する機能を提供する。具体的には、HTTPリクエストを送信したり、HTMLコンテンツを解析したり、場合によってはJavaScriptをレンダリングして実行したりすることができる。
PHPスクレイピング・ライブラリは通常、3つの4つのカテゴリーに分類される:
- HTTPクライアント:HTTPリクエストを送信し、サーバーからのレスポンスを処理する。
- HTMLパーサー:HTMLコンテンツを解析し、データを抽出する。
- ブラウザ自動化ツール:ウェブブラウザでのユーザーインタラクションを模倣し、JavaScriptの実行に対処する。
- オールインワン・フレームワーク:上記のカテゴリーの機能を組み合わせたツール。
最初の2つの組み合わせは静的なページからデータを抽出するのに最適で、動的なウェブサイトをスクレイピングするにはブラウザの自動化が必要だ。
PHPのスクレイピング・ライブラリを選択する際に分析すべき側面
以下は、ウェブスクレイピングに最適なPHPライブラリを選択する際に考慮すべき重要な要素です:
- タイプ:HTTPクライアント、HTMLパーサー、ブラウザ自動化ツール、オールインワン・ウェブ・スクレイピング・フレームワークとして機能するかどうか。
- 特徴ウェブスクレイピングタスクのためにライブラリが提供する主な機能。
- GitHubスター:GitHubのスター数。コミュニティの関心とエンゲージメントを示す。
- 月間インストール数:Packagistによる過去30日間のインストール数-現在の使用状況と人気を反映しています。
- 更新頻度:ライブラリがどの程度定期的にメンテナンスされるか、または新しいリリースを受け取るか。
- 長所図書館を利用する主な利点と長所。
- 短所:留意すべき制限とマイナス面。
最高のPHPスクレイピングライブラリ:完全な比較
WebスクレイピングのためのオープンソースのPHPライブラリを厳選し、ランキングしました。
ツールの全リストは、PHPスクレイピング・ライブラリのGitHubリポジトリをご覧ください。
注意: このリストには、活発にメンテナンスされている PHP ウェブスクレイピング・ライブラリのみが含まれています。数年間更新されていないプロジェクトは除外されています。
1.パンサー
Pantherはsymfonyチームによって開発されたブラウザの自動化とWebクローリングライブラリです。静的なWebページと動的なWebページの両方をナビゲートしてやりとりするための豊富なAPIを提供します。
Pantherは、php-webdriverを介して
実際のブラウザを起動することができます。これは最新の動的なWebサイトをスクレイピングするための完全なJavaScriptのサポートがあることを意味します。また、静的なページをより効率的にスクレイピングするために symfony のBrowserKit
コンポーネントを使う軽量モードもあります。
Pantherは一般的なライブラリの上に構築されているため、すでに他のPHPスクレイピングツールに慣れている開発者にとっては、その構文は直感的に感じられる。CSSセレクタとXPathの両方によるDOMクエリをサポートしており、コンテンツの抽出方法に柔軟性があります。
リアルブラウザによる自動化と開発者に優しいAPIの組み合わせにより、PantherはPHPでスクレイピングを行うための最高のライブラリとなっています。
Composerのインストールコマンド:
composer require symfony/panther
🧩種類オールインワンのウェブスクレイピングフレームワーク
⚙️特徴:
- ChromeとFirefoxをサポートする豊富なブラウザ自動化API
- 静的ブラウザと動的ブラウザの両方をサポートし、ページ上でJavaScriptを実行または無効にするオプションがある。
- スクリーンショットが撮れる
- ウェブページ上でJavaScriptを実行できる
- ブラウザ自動化とデータ抽出のための完全なAPI
GitHubのスター数:~3k+
📦月間インストール数:~230k
🗓️更新頻度:数ヶ月に1回程度
👍プロ:
- symfony コンポーネントとして利用できます。
- ChromiumベースのブラウザとFirefoxをネイティブでサポート(Safari、Edge、Operaについては別途設定が必要)。
php-webdriver
、BrowserKit
、DomCrawler
、Goutteのような人気のあるPHPウェブスクレイピングライブラリの上に構築されています。
👎短所:
- WebDriversのマニュアルダウンロードが必要です。
- XML文書を扱えない
php-webdriverと
DomCrawlerの
制限を継承する。
2.ガズル
Guzzleはリクエストを送信したりウェブサービスと統合したりするための効率的な PHP HTTP クライアントです。ページの取得、フォームの送信、大きなペイロードのストリーミングなど、HTTP コールを行うためのクリーンで柔軟な API を提供します。
PSR-7 準拠のクライアントとして、Guzzle は他の PSR-7 ライブラリと連携し、トランスポートにとらわれないコードを推進します。つまり、cURL、PHPストリーム、ソケットのような基本的な詳細について心配する必要がなくなります。
Guzzleは同じインターフェイスを使って同期と非同期の両方のリクエストを送ることができ、効率的なスクレイピングワークフローに最適です。
Guzzleのミドルウェアシステムでは、リクエストの動作のカスタマイズ、ロギングの追加、ヘッダのインジェクション、リトライの管理などを行うことができます。GuzzleはPHPでトップクラスのHTTPクライアントです。
Composerのインストールコマンド:
composer require guzzlehttp/guzzle
タイプ:HTTPクライアント
⚙️特徴:
- クエリー文字列とPOSTリクエストを作成するためのシンプルなインターフェース
- 大容量アップロードとダウンロードのストリーミングに対応
- カスタムHTTPクッキーとヘッダーに対応
- 同期リクエストと非同期リクエストの両方に対応する統一インターフェース
- 相互運用性のためにPSR-7準拠の標準化されたリクエスト、レスポンス、ストリーム・インターフェースを使用
- プロキシ統合サポート
- HTTPトランスポート・レイヤーを抽象化し、環境に依存しないコードを可能にする(cURLやPHPストリームなどへのハードな依存がない)。
- クライアントの動作をカスタマイズし、拡張するためのミドルウェアのサポート
GitHubのスター数:23.4k以上
月間のインストール数:~13.7M
🗓️更新頻度:数ヶ月に1回程度
👍プロ:
- 高度なHTTPリクエストのための幅広い機能を提供
- 同期および非同期のリクエスト処理に対応
- 高いカスタマイズ性と拡張性を実現するミドルウェアとハンドラのサポート
👎短所:
- 公式文書は何年も更新されていない
- 多くの貢献者がいるが、ほとんどの作業は一人の開発者によって行われている。
- キャッシュに関する問題を報告する開発者もいる
3.ドムクローラー
DomCrawler
は HTML と XML ドキュメントをナビゲートしてデータを抽出する symfony の PHP コンポーネントです。詳細には、DOM トラバーサルとコンテンツスクレイピングのためのクリーンで表現力豊かな API を公開します。
その際立った特徴のひとつは、XPathを使ってブラウザのようなDOMクエリを実行できることだ。CSSセレクタを使用したい場合は、オプションのCssSelector
コンポーネントをインストールする必要があります。
DomCrawlerは
通常、PHPで静的なサイトをスクレイピングするためにGuzzleもしくはSymfonyのHttpClient
(もしくはBrowserKit
)と組み合わされます。
symfony コンポーネントとの緊密な統合と開発者にやさしい構文のおかげで、DomCrawler はPHP で HTML を解析するための主要なソリューションの1つです。
Composerのインストールコマンド:
composer require symfony/dom-crawler
タイプ:HTMLパーサー
⚙️特徴:
- HTMLとXMLドキュメントの両方のDOMナビゲーションをサポート
- 公式仕様に合わせてHTMLを自動修正
- XPath式のネイティブサポート
- symfony
BrowserKit
コンポーネントからのHttpBrowserとの
組み込みの統合 - ネイティブHTML5の解析サポート
- トラバーサル中に HTML 要素と相互作用するための、特別な
Link
、Image
、Form
クラスを提供する。
GitHubのスター数:4k以上
月間インストール数:~5.1M
🗓️更新頻度:月1回程度
👍プロ:
- もっとも人気のあるPHPフレームワークの1つであるSymfonyのコンポーネントとして利用できる
- 豊富なノード・トラバーサルAPI
- フォーム、リンク、その他の主要なHTML要素を処理するための特別な機能
👎短所:
- DOM操作やHTML/XMLの再エクスポート用に設計されていない。
- CSSセレクタをサポートするための追加コンポーネントが必要です。
- HTMLノードの子要素をフィルタリングする際の機能制限
4.HttpClient
symfony のHttpClient
コンポーネントは HTTP リクエストを送信しレスポンスを処理する最新の PHP ライブラリです。
同期リクエストと非同期リクエストの両方をサポートし、自動解凍、コンテンツ・ネゴシエーション、HTTP/2サポート、ビルトイン・リトライ・ロジックなどの高度な機能を備えている。
HttpClient
は静的なサイトスクレイピングのためにDomCrawler の
ような他の symfony コンポーネントとシームレスに統合します。このコンポーネントは Web ブラウザのふるまいをシミュレートするためにHttpClient の
上に構築されます。
Composerのインストールコマンド:
composer require symfony/http-client
タイプ:HTTPクライアント
⚙️特徴:
- 同期と非同期の両方の操作をサポートする低レベルHTTPクライアントAPI
- PHP ストリーム・ラッパーをサポート
- cURLのサポート
- DNSの事前解決、SSLパラメータ、公開鍵のピン留めなどの高度な設定を提供します。
- 認証、クエリ文字列パラメータ、カスタムヘッダ、リダイレクト、失敗したリクエストの再試行、HTTPプロキシ、URIテンプレートをサポートしています。
GitHubのスター数:~2k+
月間インストール数 📦:~6.1M+
🗓️更新頻度:月1回程度
👍プロ:
- symfonyのコンポーネントとして利用できるが、スタンドアロンライブラリとしても利用できる
- PHPの多くの一般的なHTTPクライアント抽象化と相互運用可能
- 豊富なドキュメント
👎短所:
- 一部の高度な認証メカニズムに対するネイティブ・サポートが欠けている。
- 特定のシナリオで起こりうるパフォーマンスの問題
- PSR-7以外の環境ではセットアップが複雑になる可能性がある。
5. php-webdriver
php-webdriver
は、Selenium WebDriver プロトコルの PHP 移植版です。言い換えると、Selenium の強力なスクレイピング機能を PHP のエコシステムにもたらします。
ChromeやFirefoxのような実際のブラウザを起動し、プログラムで制御することができます。そのため、JavaScriptに大きく依存する動的なウェブサイトやクライアントサイドでレンダリングされたアプリケーションのスクレイピングに最適です。
php-webdriver
を使うと、ボタンをクリックしたり フォームに入力したり動的なコンテンツを待ったりといった実際のユーザーとのやりとりを シミュレートすることができます。また、DOM トラバーサルや CSS セレクタクエリのためのメソッドも備えています。
php-webdriverを
操作するには、Seleniumサーバーをセットアップするか、ChromeDriverのようなツールを使用する必要があることに注意してください。
詳細については、Seleniumウェブスクレイピングのチュートリアルを参照してください。
Composerのインストールコマンド:
composer require php-webdriver/webdriver
🧩種類ブラウザ自動化ツール
⚙️特徴:
- Chrome、Firefox、Microsoft Edge、およびWebDriverプロトコルをサポートするすべてのブラウザと互換性がある。
- ヘッドレスモードをサポート
- ブラウザのヘッダーとクッキーのカスタマイズが可能
- ページへのナビゲートやエレメントとのインタラクションなど、豊富なユーザーシミュレーションAPIを提供。
- スクリーンショットが撮れる
- ページ要素からデータを抽出する専用API
- JavaScriptスクリプトの実行をサポート
GitHub のスター数:5.2k+
月間インストール数:~1 .6M
🗓️更新頻度:数ヶ月に1回程度
👍プロ:
- Seleniumに似たブラウザ自動化APIを提供する。
- Seleniumサーバーバージョン2.x、3.x、4.xをサポート
- Panther、Laravel Dusk、Steward、Codeception、PHPUnitとのシンプルな統合
👎短所:
- Seleniumチームによって公式にメンテナンスされていない
- 非公式な移植版であるため、Seleniumの公式リリースに遅れることが多い。
- ローカルのWebDriverサーバーの実行が必要
6. cURL
cURLは、PHPに統合された低レベルのHTTPクライアントです。ウェブサーバと対話することができ、HTTP リクエストを完全に制御することができます。
いくつかのウェブ・プロトコルをサポートしているが、主にHTTPリクエストの送信に使用される。一般的にHTTPクライアントと呼ばれるのはそのためだ。
舞台裏では、cURLはリダイレクトを処理し、ヘッダーを管理し、クッキーを扱う。そのため、ページの HTML コンテンツを取得したり、API とやり取りしたりすることができます。そのため、追加の依存関係なしに、素のPHPで基本的なWebスクレイピングタスクを実行するのに十分強力です。
PHP のインストール環境によっては、cURL がデフォルトで有効になっていない場合があります。有効になっていない場合は、PHP の設定(php.ini)
で有効にするか、 以下のコマンドを使用して手動でインストールする必要があります:
sudo apt-get install php-curl
タイプ:HTTPクライアント
⚙️特徴:
- HTTP、HTTPS、FTP、FTPS、SMTPなど幅広いプロトコルをサポート
- HTTP/2.0をサポート
- GET、POST、PUT、DELETE、PATCHなどのHTTPメソッドをサポートします。
- ヘッダーとクッキーのカスタマイズが可能
- ファイルのアップロードとダウンロードをサポート
- プロキシとの統合が容易
- 複雑なフォーム送信のためのマルチパートリクエストに対応
- デバッグを容易にするために、冗長モードを提供します。
- JSON、XML、HTMLなどのレスポンス・データの取得と操作が可能。
GitHub stars: –
毎月のインストール: –
🗓️更新頻度: –
👍プロ:
- PHPに組み込まれているため、外部ライブラリは不要(ただし、OSレベルでPHPコンポーネントをインストールする必要がある場合がある)
- 他の多くのHTTPクライアントは、これをベースに構築されているか、ラップすることができる。
- 低レベルの統合と機能により、ウェブスクレイピングに最適
👎短所:
- 低レベルのAPIのため、使いこなすのが難しい
- 挑戦的なエラー処理
- 失敗したリクエストに対するネイティブのリトライ機能がない
7.シンプルなHtml Domパーサー
voku/simple_html_dom
は、オリジナルのSimple Html DOM Parserライブラリのモダンフォークです。このライブラリは、PHPでHTMLをパースするための人気のある選択肢でしたが、何年もメンテナンスされていません。
オリジナルのバージョンと比べて、このフォークはよりモダンな技術を使うように更新されました。このように、文字列操作に頼る代わりに、DOMDocument
PHPクラスとSymfonyのCssSelectorの
ようなコンポーネントを利用するようになりました。
オリジナルと同様、この Simple Hhtml DOM Parser の更新版は、DOM トラバーサル用のシンプルで直感的な API を提供します。例えば、CSS セレクタを使って要素を検索するfind() の
ような関数を公開しています。
その構文は読み書きが簡単で、静的なHTMLページにも動的なHTMLページにも適している。基本的なHTMLパーサーなので、JavaScriptの実行を必要とするウェブページは扱えないことに注意してください。
Composerのインストールコマンド:
composer require voku/simple_html_dom
タイプ:HTMLパーサー
⚙️特徴:
- HTMLの解析と操作のための直感的なAPI
- PHP 7.0+およびPHP 8.0と互換性があります。
- 組み込みのUTF-8サポート
- HTML要素の検索と抽出のためのjQueryライクなセレクタ
- 部分的に無効なHTMLを処理できる
- 要素を強く型付けされたオブジェクトとして返す
GitHubのスター数:880以上
毎月のインストール数 👮:~145k
🗓️更新頻度:数ヶ月に1回程度
👍プロ:
DOMDocument の
ような最新のツールと symfony のCssSelector の
ような最新の PHP クラスを使います。- サンプルとAPIドキュメント付き
- PHP-FIG 標準に準拠
👎短所:
- 同じオリジナル・ライブラリの他の多くのフォークに由来する混乱
- 主に一人の開発者によって管理される
- 開発の進捗は比較的遅い
その他の入選作品
- Goutte:以前は人気のあったPHPのスクリーンスクレイピングとウェブクローリングライブラリ。WebサイトをクロールしてHTML/XMLレスポンスからデータを抽出するための使いやすいAPIを提供していました。2023年4月1日現在、このライブラリは廃止予定になり、現在はsymfonyの
HttpBrowser
クラスのシンプルなプロキシとして動作します。チュートリアルについては、PHPでWebスクレイピングのためにGoutteを使うガイドを参照してください。 - クローラー:このライブラリは、PHPで独自のクローラーやスクレイパーを作成するためのビルディングブロックとして機能するフレームワークと、すぐに使えるさまざまな「ステップ」を提供します。
トップPHPスクレイピング・ライブラリ
ここでは、最高のPHPウェブスクレイピングライブラリを素早く比較するのに役立つ要約表を示します:
図書館 | タイプ | HTTPリクエスト | HTML解析 | JavaScriptレンダリング | ギットハブ・スターズ | 月間ダウンロード数 |
---|---|---|---|---|---|---|
パンサー | オールインワン・ウェブ・スクレイピング・フレームワーク | ✔️ | ✔️ | ✔️ | ~3k+ | ~230k |
ガズル | HTTPクライアント | ✔️ | ❌ | ❌ | 23.4k+ | ~13.7M |
ドムクローラー | HTMLパーサー | ❌ | ✔️ | ❌ | 4k+ | ~5.1M |
HttpClient | HTTPクライアント | ✔️ | ❌ | ❌ | ~2k+ | ~6.1M+ |
php-webドライバー | ブラウザ自動化ツール | ✔️ | ✔️ | ✔️ | 5.2k+ | ~1.6M |
cURL | HTTPクライアント | ✔️ | ❌ | ❌ | – (PHP標準ライブラリの一部なので) | – (PHP標準ライブラリの一部なので) |
シンプルなHtml Domパーサー | HTMLパーサー | ❌ | ✔️ | ❌ | 880+ | ~145k |
同様の比較については、以下のブログ記事をご覧いただきたい:
結論
この記事では、PHPのWebスクレイピング・ライブラリのトップとその特徴をいくつか見た。一般的なHTTPクライアント、HTMLパーサー、ブラウザ自動化ツール、PHPエコシステムでよく使われるスクレイピングフレームワークを比較した。
これらのライブラリはウェブスクレイピングには最適だが、処理に関しては限界がある:
- IP禁止
- キャプチャ
- 高度なアンチボット・メカニズム
- その他の擦り傷対策
これらは、PHPウェブスクレイパーが定期的に遭遇する課題のほんの一部です。Bright Dataのサービスでこれらを克服してください:
- プロキシサービス:地域制限を回避するための数種類のプロキシ、1億5,000万以上の家庭用IPを備えています。
- スクレイピング・ブラウザ:ロック解除機能を内蔵した
php-webdriver互換
ブラウザ。 - ウェブスクレーパーAPI:100以上の主要ドメインから構造化データを抽出するための設定済みAPI。
- ウェブアンロッカー:ボット対策が施されたサイトのロック解除を行うオールインワンAPI。
- SERP API:検索エンジンの結果をアンロックし、完全なSERPデータを抽出する特別なAPI。
上記のすべてのWebスクレイピングツールは、PHPやその他のプログラミング言語とシームレスに統合されています。
Bright Dataのアカウントを作成し、無料トライアルでスクレイピング製品をお試しください!
クレジットカードは必要ありません