Webページ情報をクロールする場合、電子商取引プラットフォームでの製品レビューやニュースWebサイトのコンテンツのスクロールなど、非同期ロードコンテンツを直接取得できないという問題が発生することがよくあります。このタイプのコンテンツは通常、Ajaxテクノロジーを通じて動的にロードされます。これは、従来のクローラーがキャプチャするのが困難です。
非同期負荷とは、Webページが最初にロードされたときにコンテンツの一部のみがレンダリングされ、残りはバックグラウンドリクエストを通じて非同期に完了することを意味します。この方法により、Webページの応答速度とユーザーエクスペリエンスが向上しますが、データクロールにも課題があります。
Seleniumは、ブラウザーを操作する実際のユーザーをシミュレートし、JavaScriptコードを実行して完全な非同期データをロードできる自動テストツールです。ブラウザにページを自動的にスクロールし、ロードが完了するのを待たせることにより、動的に生成されたコンテンツをクロールできます。
$ driver = remotewebdriver :: create($ host、sepiredcapabilities :: firefox()); $ driver-> get($ url); $ driver-> executescript( "window.scrollto(0、document.body.scrollheight);"); //ページの寝るをスクロールする(5); //非同期データが完了するためにロードするのを扱うちます$ html = $ driver-> getPagesource();
過度の頻繁なスクロールおよびロード操作を避けるために、パフォーマンスの消費を使用する場合は、パフォーマンスの消費に注意してください。
一部のWebサイトでは、インターフェイスを介して非同期にロードされたデータを返し、インターフェイスを直接要求して、JSONまたはその他の形式でデータを効率的に取得します。 Webページネットワークのリクエストを分析し、対応するAPIインターフェイスを見つけることにより、ページレンダリングをスキップして、必要な情報をすばやくキャプチャできます。
$ url = "http://xxxxx.com/api/xxxx"; $ data = file_get_contents($ url); $ json = json_decode($ data、true);
インターフェイスに許可制限がある場合、最初にログインまたはその他の検証プロセスを完了する必要があります。
Phantomjsは、JavaScriptコードを実行し、非同期コンテンツをレンダリングし、完全なHTMLをエクスポートできるインターフェイスレスブラウザーです。 PHPコールコマンドラインメソッドと組み合わせることで、非同期データクロールを実現できます。
$ js = "var page = require( 'webpage')。create(); page.open( '"。$ url。"'、function(status){ if(status === 'success'){ console.log(page.content); } phantom.exit(); }); "; $ html = exec( "phantomjs -e '"。$ js。 "'");
この方法を使用する前に、PHANTOMJSをインストールし、PHP環境がExec機能をサポートしていることを確認する必要があります。
非同期負荷は、最新のWebページで一般的に使用される技術であり、クローラーに特定の困難をもたらします。 Seleniumを介して、ブラウザ操作をシミュレートし、非同期インターフェイスを分析してデータを直接取得し、PhantomJSを使用してWebページコンテンツをレンダリングすると、これら3つのソリューションは非同期コンテンツをrawるという問題を効果的に解決できます。開発者は、クローラーの効率と安定性を改善するための特定のニーズに応じて、適切な方法を柔軟に選択できます。