インターネットの発展に伴い、Web クローラーは間違いなく情報を取得する重要な手段となっています。複数の異なる Web サイトに直面し、情報を収集する必要がある場合、各 Web サイトのページ構造を研究することに集中する必要があります。では、さまざまな Web サイト上のデータをクロールする一般的な方法はあるのでしょうか?答えは「はい」です。この記事では、PHP と Selenium を使用してさまざまな Web ページ上のデータをクロールする方法を紹介します。
セレンとは何ですか?
Selenium は Web オートメーション テスト コミュニティの標準の 1 つと言え、入力、クリック、ドロップダウン ボックスの選択、ファイルのアップロードなど、ブラウザーでのユーザー操作をシミュレートできます。 Selenium を使用して Web ページの自動テストを実装できますが、ここでは Selenium を使用してデータをクロールします。
なぜ Selenium を使用するのですか?
データをクロールしていると、単純なcurlまたはfile_get_contentsリクエストを通じてアクセスできるページがいくつか出てきます。しかし、Web テクノロジーの発展に伴い、多くの Web サイトでは Ajax、Vue、React などのフロントエンド フレームワークが採用され、ページ上のデータは JavaScript を通じて非同期で取得されるようになりました。この場合、ページの完全なレンダリング結果を取得するには、ブラウザの動作をシミュレートする必要があります。また、Web サイトによってはクローラーを防ぐため、認証コードなどを使用して認証を行う場合がありますが、その際には Selenium を使用して手動操作をシミュレートしてからデータを取得する必要もあります。
PHP と Selenium を使用してデータをキャプチャする基本プロセス
最初のステップは Selenium をインストールすることです
Selenium のインストールは非常に簡単です。ターミナルで次のコマンドを実行するだけです:
composer require php-webdriver/webdriver
インストールが完了したら、対応するブラウザのドライバーをダウンロードする必要があります。Chrome を例に挙げると、chromedriver をダウンロードして、ダウンロードしたドライバーを配置する必要がありますPATH 変数が指す場所にあります。
2 番目のステップ、Selenium の起動
Selenium の起動は非常に簡単で、ターミナルに次のコマンドを入力するだけです:
java -jar path/to/selenium-server-standalone-3.141.59.jar
このうち、path/to/ は Selenium のインストール パスです。 。
3 番目のステップは、Selenium を使用してデータ キャプチャを実装することです。
Selenium とブラウザ ドライバーを使用すると、PHP を直接使用して Selenium の API を呼び出し、自動化された Web サイト テストとデータ キャプチャを実装できます。例として、Douban Movies の TOP250 の映画情報をクロールする例を見てみましょう。
use FacebookWebDriverRemoteDesiredCapabilities; use FacebookWebDriverRemoteRemoteWebDriver; $host = 'http://localhost:4444/wd/hub'; // Selenium本地服务地址 $capabilities = DesiredCapabilities::chrome(); $webDriver = RemoteWebDriver::create($host, $capabilities); $url = 'https://movie.douban.com/top250'; $webDriver->get($url);
do { // 获取电影列表并输出 $list = $webDriver->findElements(WebDriverBy::cssSelector('.grid_view .item')); foreach ($list as $item) { $name = $item->findElement(WebDriverBy::cssSelector('.title'))->getText(); $directors = $item->findElement(WebDriverBy::cssSelector('.bd p:first-child'))->getText(); $rate = $item->findElement(WebDriverBy::cssSelector('.rating_num'))->getText(); echo "$name $directors $rate "; } // 点击下一页 $nextPageBtn = $webDriver->findElement(WebDriverBy::cssSelector('.paginator .next a')); $nextPageBtnClassName = $nextPageBtn->getAttribute('class'); if (strpos($nextPageBtnClassName, 'disabled') === false) { $nextPageBtn->click(); } else { break; } // 等待新页面加载完成 $webDriver->wait()->until(WebDriverExpectedCondition::urlContains(intval($page + 1))); } while (true);
$webDriver->quit();
上記のコードを使用すると、TOP250 の Douban 映画の関連情報を簡単に取得できます。
概要
この記事では、PHP と Selenium を使用してさまざまな Web サイト上のデータをクロールする方法を紹介し、具体的な実装手順を例を挙げて詳しく説明します。 Selenium を使用すると、データをより簡単に取得し、必要な情報をより迅速に取得できるため、高度なカスタマイズが必要な一部のクロール タスクに非常に役立ちます。
以上がPHP と Selenium: さまざまな Web ページからデータを収集するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。