基本的に、私はphpでWebページをスクレイプしようとしていますが、ページの最初のjavascriptが実行された後にそうしたいです-最初のajaxリクエストなどの後にDOMにアクセスしたい...これを行う方法はありますか?
2 に答える
簡単な答え:いいえ。
サイトをスクレイピングすると、サーバーが作成したHTTPリクエストに応答するものがすべて提供されます(コンテンツがHTMLの場合、DOMツリーの「初期」状態が派生します)。Javascriptによって変更された後のDOMの「現在の」状態を考慮に入れることはできません。
これを本当にうまくやっているプロジェクトがいくつかあるので、私はこの答えを修正しています:
2020年の更新:Puppeteerは、Chromiumブラウザーを制御できるNode.jsライブラリであり、Firefoxも実験的にサポートされています。
2020年の更新:Playwrightは、複数のブラウザーを制御できるNode.jsライブラリーです。
これらのプロジェクトの両方と対話するには、Node.jsをインストールしてJavaScriptコードを作成する必要があります。特にとでasync
、await
それらは非常にうまく機能し、コードで任意のNode.js/npmモジュールを使用できます。
Seleniumのような他のプロジェクトもありますが、私はそれらをお勧めしません。
--PhantomJSはWebKitのヘッドレスバージョンであり、 CasperJSなどの便利なラッパーがいくつかあります。
-Javascript (Node.js)で記述されたjsdomのラッパーであるZombie.js 。
これらのプロジェクトの両方と対話するには、JavaScriptコードを作成する必要があります。セットアップが簡単で、コード内で任意のNode.js / npmモジュールを使用できるため、これまでのところZombie.jsの方が好きです。
古い答え:
いいえ、それを行う方法はありません。PHP内で完全なブラウザ環境をエミュレートする必要があります。グーグル以外にこの種のスクレイピングをしている人は誰も知りませんし、包括的とはほど遠いです。
代わりに、Firebugまたは別のWebデバッグツールを使用して、実際に関心のあるデータを生成するリクエスト(またはリクエストのシーケンス)を見つける必要があります。次に、PHPを使用して必要なリクエストのみを実行します。