情報化時代の到来により、Web サイトは情報を入手する主な方法の 1 つであると考えられています。ただし、Web サイト上の情報を手動で取得するのは非常に面倒なので、Web ページを自動的にクロールする方法、つまり Web クローラーが存在します。この記事では、PHP と Selenium を使用して、情報を自動的に収集する効率的な Web クローラーを構築する方法を紹介します。
まず、PHP と Selenium をインストールする必要があります。 Selenium は、Web ページ上でのユーザー操作をシミュレートする Web 自動テスト ツールです。 Selenium は、PHP を含む複数の言語と対話できます。インストール方法については公式ドキュメントを参照してください。
次のステップは、Selenium を PHP に統合することです。まず、PHP 用の Selenium ライブラリをインストールします。 Composer を通じてインストールできます:
composer require facebook/webdriver
インストール後、Web ドライバーを定義する必要があります。ここでは Chrome ブラウザを使用していますが、Selenium は複数のブラウザをサポートしています。次のコードを別のファイルとして保存できます:
use FacebookWebDriverRemoteDesiredCapabilities; use FacebookWebDriverRemoteRemoteWebDriver; require_once('vendor/autoload.php'); $host = 'http://localhost:4444/wd/hub'; $capabilities = DesiredCapabilities::chrome(); $capabilities->setCapability('goog:chromeOptions', ['args' => ['--headless']]); $driver = RemoteWebDriver::create($host, $capabilities);
コード分析:
RemoteWebDriver
クラスを介してドライバーへの接続を作成しますドライバーに接続したら、ユーザー アクションのシミュレーションを開始できます。たとえば、Web サイトにアクセスします:
$driver->get('http://news.baidu.com');
これにより、Baidu ニュースが開き、すべてのニュース リンクが取得されます:
$news_links = $driver->findElements(WebDriverBy::cssSelector('.c-title a')); $links = []; foreach ($news_links as $news_link) { $links[] = $news_link->getAttribute('href'); }
コード分析:
WebDriverBy: :cssSelector
CSS セレクター メソッドを介してすべてのニュース リンクを取得しますこれで、すべてのニュース リンクが取得されました。これらをトラバースできます。各リンクのコンテンツを順番にクロールします。
foreach ($links as $link) { $driver->get($link); $news_title = $driver->findElement(WebDriverBy::cssSelector('.article-title'))->getText(); $news_content = $driver->findElement(WebDriverBy::cssSelector('.article-content'))->getText(); // 保存新闻标题和内容至数据库 }
コード分析:
WebDriverBy::cssSelector
を通じて指定された要素を見つけ、テキスト コンテンツを取得します。要素の上記は、PHP と Selenium を使用して効率的な Web クローラーを構築するための基礎です。もちろん、さらなる最適化が必要な場合は、マルチスレッドを使用して効率を向上させたり、フォント難読化防止機能を使用して一部の Web サイトでフォントの難読化を解除する問題を解決したりするなど、複数のツールやテクノロジーと組み合わせて使用できます。クローラーの世界は奇妙なことに満ちています。自分に最適な方法やツールを見つけていただければ幸いです。
以上がPHP と Selenium を使用して効率的な Web クローラーを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。