Heim  >  Artikel  >  Backend-Entwicklung  >  PHP und Selenium: Eine Anleitung zum Aufbau eines zuverlässigen und effizienten Webcrawlers

PHP und Selenium: Eine Anleitung zum Aufbau eines zuverlässigen und effizienten Webcrawlers

WBOY
WBOYOriginal
2023-06-15 22:27:142422Durchsuche

Mit der Entwicklung des Internets sind Crawler zu einem der wichtigsten Mittel zur Datenbeschaffung geworden. Unter den vielen Crawler-Sprachen hat sich auch die Kombination von PHP und Selenium zu einer Lösung entwickelt, die viel Aufmerksamkeit erregt hat. In diesem Artikel erfahren Sie, wie Sie mit PHP und Selenium einen zuverlässigen und effizienten Webcrawler erstellen.

1. Einführung in Selenium

Selenium ist ein Web-Automatisierungstest-Framework, das Browservorgänge simulieren kann und mehrere Sprachimplementierungen (wie Java, Python, PHP usw.) bereitstellt, von denen die PHP-Version PHP-Webdriver heißt. Die Hauptaufgabe von Selenium ist das automatisierte Testen, es kann aber auch für Webcrawler verwendet werden. Im Vergleich zu herkömmlichen Crawler-Bibliotheken (wie Anfragen, Scrapy usw.) kann Selenium JavaScript und dynamische Webseiten besser verarbeiten und dadurch die Effizienz und Stabilität des Crawlers verbessern.

2. Selenium-Installation

Zuerst müssen Sie den Selenium-WebDriver installieren: http://www.seleniumhq.org/download/. Hier nehmen wir Chrom als Beispiel.

Nach dem Herunterladen müssen Sie die Treiberdatei im Systempfad ablegen.

2. PHP-Webdriver installieren

Sie können PHP-Webdriver mit Composer installieren und den folgenden Befehl ausführen:

composer require facebook/webdriver

3. Nach Abschluss der Installation können Sie PHP-Webdriver verwenden, um einfache Vorgänge auszuführen , wie zum Beispiel das Öffnen einer Website und das Abrufen des Webseitentitels:

<?php

require_once('vendor/autoload.php');
use FacebookWebDriverRemoteRemoteWebDriver;

$host = 'http://localhost:9515'; // 默认Chrome浏览器启动地址
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());

$driver->get('http://github.com');
echo "网页标题:" . $driver->getTitle() . PHP_EOL;
$driver->quit();

3. Crawler-Implementierung

1. Melden Sie sich bei der Website an

Bei einigen Websites ist eine Anmeldung erforderlich, um Daten zu erhalten. Hier ist Github als Beispiel. Zuerst müssen Sie sich manuell im Browser anmelden und die Sitzung beibehalten. Verwenden Sie dann diese Sitzung im Crawler, um Folgendes auszuführen:

<?php

require_once('vendor/autoload.php');
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverRemoteDesiredCapabilities;

// 替换以下参数为自己的github账户和密码
$username = 'yourusername';
$password = 'yourpassword';

// 启动浏览器并登录
$host = 'http://localhost:9515'; // 默认Chrome浏览器启动地址
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
$driver->get('http://github.com/login');
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[name="login"]'))->sendKeys($username);
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[name="password"]'))->sendKeys($password);
$driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('input[type="submit"]'))->click();

// 检查是否登录成功
$cookies = $driver->manage()->getCookies();
if (count($cookies) == 0) {
    echo "登录失败" . PHP_EOL;
    exit;
}

echo "登录成功" . PHP_EOL;

2. Daten abrufen

Nachdem Sie sich angemeldet und die entsprechende Seite aufgerufen haben, können Sie das entsprechende Element über den CSS-Selektor oder den XPath-Selektor abrufen, z. B. die Anzahl der Sterne abrufen ein Warehouse:

<?php

// 获取某仓库star数目
$driver->get('https://github.com/twbs/bootstrap');
$starText = $driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('.js-social-count'))->getText();
$starCount = (int)str_replace(',', '', $starText);
echo "star数目:" . $starCount . PHP_EOL;

Wenn Sie mehrere Elemente benötigen, können Sie die Methode findElements verwenden, die ein Array von WebDriverElements zurückgibt:

<?php

// 获取某用户的star数目
$driver->get('https://github.com/yourusername?tab=stars');
$stars = $driver->findElements(FacebookWebDriverWebDriverBy::cssSelector('.col-12.d-inline-block>a'));
echo "star数目:" . count($stars) . PHP_EOL;

3. Wenn die Daten in Seiten angezeigt werden, müssen Sie dies möglicherweise tun Führen Sie einen Umblättervorgang durch. Sie können zuerst die aktuelle Seitenzahl abrufen und dann die Seite umblättern, indem Sie das Klicken auf die Schaltfläche „Nächste Seite“ simulieren:

<?php

// Github starred仓库分页
$driver->get('https://github.com/yourusername?tab=stars');
$pageNum = 1;
while (true) {
    echo "第{$pageNum}页:" . PHP_EOL;
    $pageStars = $driver->findElements(FacebookWebDriverWebDriverBy::cssSelector('.col-12.d-inline-block>a'));
    foreach ($pageStars as $star) {
        echo $star->getText() . PHP_EOL;
    }
    
    $nextPageBtn = $driver->findElement(FacebookWebDriverWebDriverBy::cssSelector('.pagination>button:last-child'));
    if ($nextPageBtn->getAttribute('disabled') == 'true') {
        break;
    }
    $nextPageBtn->click();
    $pageNum++;
}

IV Zusammenfassung

Durch die Kombination von PHP und Selenium können Javascript und dynamische Webseiten besser verarbeitet und dadurch verbessert werden Effizienz und Stabilität des Crawlers. Gleichzeitig bietet Selenium auch eine umfangreiche API, mit der Vorgänge wie das Anmelden und Umblättern problemlos implementiert werden können. Natürlich weist Selenium auch gewisse Nachteile auf, wie z. B. einen hohen Ressourcenverbrauch und eine relativ langsame Geschwindigkeit. Welche Lösung verwendet werden soll, muss basierend auf den spezifischen Anforderungen ausgewählt werden.

Das obige ist der detaillierte Inhalt vonPHP und Selenium: Eine Anleitung zum Aufbau eines zuverlässigen und effizienten Webcrawlers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn