ホームページ >バックエンド開発 >PHPチュートリアル >PHP と Selenium を使用して高速かつ効率的な Web クローラーを作成する方法

PHP と Selenium を使用して高速かつ効率的な Web クローラーを作成する方法

WBOY
WBOYオリジナル
2023-06-15 20:44:551435ブラウズ

インターネットの広大な世界には、マイニングが必要な情報が膨大にあります。このとき、Web クローラーが登場しました。ただし、クローラーの記述方法は大きく異なります。言語とツールの組み合わせが異なると、効率も異なり、学習コストも異なります。この記事では、PHP と Selenium を使用して高速で効率的な Web クローラーを作成する方法を紹介します。

Selenium とは

Selenium は、Web ページ上で人間の操作をシミュレートできる自動テスト ツールです。 Java、Python、C#、PHPなどの複数のプログラミング言語をサポートしています。現在のバージョンは Selenium WebDriver で、前バージョンと比較して、中間層として Selenium RC を使用する必要がなく、ブラウザと直接通信するため、速度と安定性が大幅に向上しました。

PHP と Selenium を選択する理由

まず、PHP は、可読性と拡張性に優れた人気のあるサーバーサイド プログラミング言語です。次に、Selenium は自動テスト ツールとして、さまざまなブラウザを駆動し、Web ページ上で人間の操作を簡単にシミュレートし、最終的に必要なデータを取得できます。最後に、PHP 言語で使用されるカール関数は Web サイトによってブロックされる可能性があるため、Selenium は実際のブラウザーの動作をシミュレートでき、簡単にはブロックされません。

Selenium のインストール

Selenium をインストールする前に、まず Composer をインストールする必要があります。Composer がインストールされていない場合は、公式ドキュメントを参照してインストールしてください。

Composer をインストールした後、Composer を通じて Selenium の PHP インターフェイスをインストールします:

composer require facebook/webdriver

クローラ コードを作成します

まず、Selenium WebDriver クライアントを導入する必要があります:

require_once 'vendor/autoload.php';
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverWebDriverBy;

次に、WebDriver をインスタンス化し、起動するブラウザーと対応するドライバー パスを選択する必要があります:

$driver = RemoteWebDriver::create(
    'http://localhost:9515',
    DesiredCapabilities::chrome()
);

ここでは Chrome ブラウザーを起動することを選択します。事前に ChromeDriver をダウンロードし、ドライバー パスを設定する必要があります。 :

putenv('webdriver.chrome.driver=/usr/local/bin/chromedriver');

次に、Web ページを開いてデータを取得できます:

$driver->get("https://www.example.com");
$elements = $driver->findElements(WebDriverBy::cssSelector(".example-class"));
foreach ($elements as $element) {
    echo $element->getText() . "
";
}

ここのコードは、example.com ページを開き、example-class 要素のクラスを見つけて出力します。それはアウトです。

クローラーを高速化する方法

Selenium クローラーは、各操作でブラウザーの起動と終了が必要になることが主な理由で、他のクローラー ツールよりも遅くなります。クローラーを高速化するために、WebDriver インスタンスをキャッシュできます。

$host = 'http://localhost:9515';
$options = new ChromeOptions();
$options->addArguments(['--headless']);
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $caps);

function get_web_driver() {
    global $driver;
    $status = true;
    try {
        $driver->getTitle();
    } catch (Exception $e) {
        $status = false;
    }
    if (!$status) {
        $releaseWebDriver = function() use($driver){ $driver->close(); $driver->quit(); };
        register_shutdown_function($releaseWebDriver);
        $options = new ChromeOptions();
        $options->addArguments(['--headless']);
        $caps = DesiredCapabilities::chrome();
        $caps->setCapability(ChromeOptions::CAPABILITY, $options);
        $new_driver = RemoteWebDriver::create(
            'http://localhost:9515',
            $caps
        );
        $driver = $new_driver;
    }
    return $driver;
}

上記のコードは Chrome ブラウザ用で、ヘッドレス モードを設定し、WebDriver オブジェクトのキャッシュを実装します。register_shutdown_function() 関数を使用して WebDriver オブジェクトの操作をログアウトし、頻繁な起動を回避します。ブラウザのクローラーの効率が向上しました。

結論

全体として、PHP と Selenium を組み合わせて Web クローラーを作成すると、必要なデータを迅速かつ効率的にキャプチャできます。ただし、Web クローラーの使用には関連する法律や規制を遵守する必要があり、Web サイトの規制に違反してはならず、個人情報やその他のデータを取得してはなりません。そうしないと、不必要な法的リスクに直面する可能性があることに注意してください。

以上がPHP と Selenium を使用して高速かつ効率的な Web クローラーを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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