最新のWeb開発では、多くのWebサイトの動的なコンテンツが生成され、JavaScriptを介してHTMLページにレンダリングされます。 Webクローラーの場合、このタイプの動的なコンテンツは、従来のクローラーが静的HTMLページのみをクロールすることができ、JavaScriptコードを実行できないため、特定のクロールの課題をもたらします。この問題に対処するために、この記事では、phpspiderを使用してJavaScriptによってレンダリングされた動的なコンテンツを処理し、いくつかの一般的なソリューションを紹介する方法を紹介します。
通常、動的コンテンツは、クライアントによって実行された後、JavaScriptスクリプトによってWebページにレンダリングされます。サーバー側でHTMLを直接レンダリングするのとは異なり、JavaScriptレンダリングコンテンツはより柔軟であり、より豊かなインタラクティブなエクスペリエンスを提供できます。ただし、クローラーがこのタイプのコンテンツをクロールすると、従来の方法は元のHTMLソースコードのみを取得でき、JavaScriptレンダリング後に生成された実際のコンテンツを確認できません。
JavaScriptレンダリングを処理できない従来のクローラーの制限を克服するために、Webレンダリングにヘッドレスブラウザーを使用できます。ヘッドレスクロムやPhantomJSなどのヘッドレスブラウザは、JavaScriptをロードおよび実行できるため、レンダリングされたフルHTMLページを返します。ヘッドレスクロムを使用して動的なコンテンツをレンダリングする方法のサンプルコードを次に示します。
<?php use JonnyWPhantomJsClient; $client = Client::getInstance(); $request = $client->getMessageFactory() - > createrequest( 'http://example.com'、 'get'); $ response = $ client-> getMessageFactory() - > createresponse(); $ client-> send($ request、$ response); //レンダリング結果を得る$ renderedhtml = $ response-> getContent(); //レンダリング結果を処理// ... ?>
上記のコードでは、ヘッドレスChromeインスタンスを作成してGETリクエストを送信することにより、レンダリングされたHTMLコンテンツを取得します。この方法を使用して、動的にレンダリングされたページコンテンツを取得できます。
ヘッドレスブラウザに加えて、JavaScriptレンダリングコンテンツを処理する別の方法は、クライアントレンダリングAPIを提供するサードパーティサービスを使用することです。たとえば、Prerender.ioは、URLリクエストを送信してレンダリングされたページコンテンツを取得できます。以下は、プレレンダー.io APIを介してレンダリングされたページを取得する方法のサンプルコードです。
<?php $url = 'http://api.prerender.io/https://example.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); // オプション:に追加Prerender.ioのTokenID認証を実行します // curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Prerender-Token: YOUR_PRERENDER_TOKEN']); $renderedHtml = curl_exec($ch); // プロセスレンダリング結果 // ... curl_close($ch); ?>
この例では、PHPのCurlライブラリを使用して、rederender.io APIにGETリクエストを送信して、レンダリングされたWebページコンテンツを取得します。要求パラメーターをさらにカスタマイズし、実際のニーズに応じてレンダリング結果を処理できます。
ヘッドレスブラウザー(ヘッドレスクロムなど)またはサードパーティのクライアントレンダリングAPI(Prerender.ioなど)を使用することにより、JavaScriptによってレンダリングされた動的なWebコンテンツを効果的に処理し、phpspiderがより包括的なWebデータをcraることができます。適切なツールと方法を選択すると、動的なWebクロールの効率と精度を大幅に向上させることができます。