phpSpider 実践的なヒント: Web コンテンツの動的読み込みにどう対処するか?
Web ページ データをクロールするときに、動的に読み込まれるコンテンツをクローラーから直接取得できないという問題がよく発生します。これらの動的にロードされるコンテンツは、AJAX リクエストを通じて取得されたデータ、JavaScript を通じてレンダリングされた DOM 要素などです。この問題を解決するために、この記事では、phpSpider を使用する際の Web ページの動的読み込みの問題に対処するための実践的なヒントを紹介します。
1. ネットワーク デバッグ ツールを使用して、動的に読み込まれた URL を検索します。
動的に読み込まれたコンテンツを処理する前に、まず、読み込まれたコンテンツの URL を見つける必要があります。これは、ブラウザの開発者ツールまたはネットワーク デバッグ ツールを使用して実行できます。一般に、コンテンツをロードするための URL は、AJAX リクエストまたはその他のネットワーク リクエストの形式でサーバーに送信されます。ネットワークリクエストを分析することで、後続の処理のために動的にロードされたコンテンツの URL を取得できます。
以下は、phpSpider を使用して動的に読み込まれるコンテンツをクロールするサンプル コードです:
<?php use phpspidercoreequests; use phpspidercoreselector; require_once 'your_phpspider_autoload.php'; $target_url = "https://www.example.com"; $response = requests::get($target_url); $html = selector::select($response, "//body"); // 通过网络调试工具获取动态加载的URL $ajax_url = "https://www.example.com/ajax/get_data"; $params = [ 'param1' => 'value1', 'param2' => 'value2' ]; $response = requests::post($ajax_url, $params); $dynamic_content = json_decode($response, true)['result']; // 处理动态加载的内容 // TODO: 对动态加载的内容进行处理 // 继续处理原始网页内容 // TODO: 对原始网页内容进行处理 ?>
上記のサンプル コードでは、request クラスを通じて動的に読み込まれるコンテンツの URL に POST リクエストを送信しました。 , そして、返されたコンテンツを $dynamic_content 変数に保存します。次に、$dynamic_content 変数内のコンテンツを処理できます。
2. JavaScript を使用して動的に読み込まれたコンテンツを解析する
JavaScript を通じてレンダリングされた DOM 要素の場合、php-webdriver などの PHP ベースのヘッドレス ブラウザ ライブラリを使用してそれを実現できます。 php-webdriver ライブラリはブラウザの動作をシミュレートできるため、ブラウザのように JavaScript コードを実行して、レンダリングされた DOM 要素を取得できます。
以下は、動的に読み込まれたコンテンツを解析するために php-webdriver ライブラリを使用するサンプル コードです:
<?php require_once 'your_phpspider_autoload.php'; use FacebookWebDriverRemoteDesiredCapabilities; use FacebookWebDriverRemoteRemoteWebDriver; use FacebookWebDriverWebDriverBy; use FacebookWebDriverWebDriverExpectedCondition; $target_url = "https://www.example.com"; $host = 'http://localhost:4444/wd/hub'; $driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome()); $driver->get($target_url); // 等待页面加载完成 $driver->wait()->until( WebDriverExpectedCondition::visibilityOfElementLocated( WebDriverBy::cssSelector('body') ) ); $html = $driver->getPageSource(); // 通过解析渲染后的DOM元素获取动态加载的内容 $dynamic_content = $driver->findElement(WebDriverBy::id('dynamic_content'))->getAttribute('innerHTML'); // 处理动态加载的内容 // TODO: 对动态加载的内容进行处理 // 继续处理原始网页内容 // TODO: 对原始网页内容进行处理 // 关闭浏览器 $driver->quit(); ?>
上記のサンプル コードでは、php-webdriver ライブラリを使用して Chrome ブラウザを作成しますインスタンス、およびターゲット URL にアクセスしました。 findElement メソッドと getAttribute メソッドを呼び出すことで、動的に読み込まれたコンテンツを取得できます。次に、$dynamic_content 変数内のコンテンツを処理できます。
概要:
Web コンテンツの動的読み込みの処理は、クローラー開発にとって一般的かつ重要なタスクです。この問題は、ネットワーク デバッグ ツールを使用して動的にロードされる URL を検索し、phpSpider 関連ライブラリを使用して動的にロードされるコンテンツを取得するか、ブラウザの動作をシミュレートしてレンダリングされた DOM 要素を取得することでうまく解決できます。この記事で紹介した実践的なヒントが、読者が Web コンテンツの動的な読み込みにうまく対処するのに役立つことを願っています。
以上がphpSpider の実践的なヒント: Web コンテンツの動的読み込みにどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。