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!