ホームページ  >  記事  >  バックエンド開発  >  PHP と Selenium: さまざまな Web ページからデータを収集するにはどうすればよいですか?

PHP と Selenium: さまざまな Web ページからデータを収集するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-16 10:01:40950ブラウズ

インターネットの発展に伴い、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 の映画情報をクロールする例を見てみましょう。

  1. ブラウザを開いて URL を入力し、
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);
  1. 次をクリックしてください。ページは続行します 映画情報の取得
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);
  1. ブラウザを閉じる
$webDriver->quit();

上記のコードを使用すると、TOP250 の Douban 映画の関連情報を簡単に取得できます。

概要

この記事では、PHP と Selenium を使用してさまざまな Web サイト上のデータをクロールする方法を紹介し、具体的な実装手順を例を挙げて詳しく説明します。 Selenium を使用すると、データをより簡単に取得し、必要な情報をより迅速に取得できるため、高度なカスタマイズが必要な一部のクロール タスクに非常に役立ちます。

以上がPHP と Selenium: さまざまな Web ページからデータを収集するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。