So erstellen Sie einen Web-Crawler mit Selenium

So erstellen Sie einen Web-Crawler mit Selenium / Programmierung

Web-Crawling ist äußerst nützlich, um bestimmte Aufgaben zu automatisieren, die routinemäßig auf Websites ausgeführt werden. Sie können einen Crawler schreiben, um mit einer Website zu interagieren, genau wie es ein Mensch tun würde.

In einem früheren Artikel Erstellen eines grundlegenden Web-Crawlers zum Abrufen von Informationen von einer Website Erstellen eines einfachen Web-Crawlers zum Abrufen von Informationen von einer Website Wollten Sie schon immer Informationen von einer Website erfassen? Sie können einen Crawler schreiben, um auf der Website zu navigieren und genau das zu extrahieren, was Sie benötigen. Lesen Sie mehr, wir haben die Grundlagen des Schreibens eines Webcrawlers mit dem Python-Modul scrapy behandelt. Die Einschränkung dieses Ansatzes besteht darin, dass der Crawler kein Javascript unterstützt. Es funktioniert nicht ordnungsgemäß mit Websites, die Javascript zur Verwaltung der Benutzeroberfläche verwenden. In solchen Situationen können Sie einen Crawler schreiben, der Google Chrome verwendet und daher mit Javascript genauso wie mit einem normalen, benutzergesteuerten Chrome-Browser umgehen kann.

Die Automatisierung von Google Chrome erfordert die Verwendung eines Tools namens Selen. Es ist eine Softwarekomponente, die sich zwischen Ihrem Programm und dem Browser befindet und Ihnen hilft, den Browser durch Ihr Programm zu führen. In diesem Artikel führen wir Sie durch den gesamten Prozess der Automatisierung von Google Chrome. Die Schritte umfassen im Allgemeinen:

  • Einrichten von Selen
  • Verwenden von Google Chrome Inspector zum Erkennen von Abschnitten der Webseite
  • Schreiben eines Java-Programms zur Automatisierung von Google Chrome

Lassen Sie uns zum Zweck dieses Artikels untersuchen, wie Sie Google Mail von Java aus lesen können. Während Google eine API (Application Programming Interface) zum Lesen von E-Mail zur Verfügung stellt, verwenden wir in diesem Artikel Selenium, um mit Google Mail zu interagieren, um den Prozess zu demonstrieren. Google Mail verwendet häufig Javascript und ist daher ein guter Kandidat für das Lernen von Selenium.

Einrichten von Selen

Web-Treiber

Wie oben erläutert, besteht Selenium aus einer Softwarekomponente, die als separater Prozess ausgeführt wird und Aktionen für das Java-Programm ausführt. Diese Komponente wird aufgerufen Web-Treiber und muss auf Ihren Computer heruntergeladen werden.

Klicken Sie hier, um zur Selenium-Download-Site zu gelangen, klicken Sie auf die neueste Version und laden Sie die entsprechende Datei für Ihr Computer-Betriebssystem (Windows, Linux oder MacOS) herunter. Es ist ein ZIP-Archiv mit chromedriver.exe. Extrahieren Sie es an einen geeigneten Ort wie z C: \ WebDrivers \ chromedriver.exe. Wir werden diesen Ort später im Java-Programm verwenden.

Java-Module

Als nächstes müssen Sie die Java-Module einrichten, die für die Verwendung von Selenium erforderlich sind. Angenommen, Sie verwenden Maven, um das Java-Programm zu erstellen, fügen Sie die folgende Abhängigkeit hinzu POM.xml.

   org.seleniumhq.selenium Selen-Java 3.8.1   

Wenn Sie den Erstellungsprozess ausführen, sollten alle erforderlichen Module heruntergeladen und auf Ihrem Computer eingerichtet werden.

Selen Erste Schritte

Beginnen wir mit Selen. Der erste Schritt ist das Erstellen eines Chrome-Treiber Beispiel:

WebDriver-Treiber = neuer ChromeDriver (); 

Das sollte ein Google Chrome-Fenster öffnen. Lassen Sie uns zur Google-Suchseite navigieren.

driver.get ("http://www.google.com"); 

Beziehen Sie einen Verweis auf das Texteingabeelement, damit wir eine Suche durchführen können. Das Texteingabeelement hat den Namen q. Mit der Methode suchen wir HTML-Elemente auf der Seite WebDriver.findElement ().

WebElement-Element = driver.findElement (By.name ("q")); 

Sie können mit der Methode Text an jedes Element senden sendKeys (). Lassen Sie uns einen Suchbegriff senden und mit einem Zeilenumbruch beenden, damit die Suche sofort beginnt.

element.sendKeys ("terminator \ n"); 

Da jetzt eine Suche läuft, müssen wir auf die Ergebnisseite warten. Wir können das wie folgt machen:

new WebDriverWait (driver, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("terminator")); 

Dieser Code weist im Wesentlichen an, dass Selenium 10 Sekunden wartet und zurückkehrt, wenn der Seitentitel mit beginnt Terminator. Wir verwenden eine Lambda-Funktion, um die Bedingung anzugeben, auf die gewartet werden soll.

Jetzt können wir den Titel der Seite erhalten.

System.out.println ("title:" + driver.getTitle ()); 

Wenn Sie mit der Sitzung fertig sind, können Sie das Browserfenster schließen mit:

driver.quit (); 

Und das, Leute, ist eine einfache Browsersitzung, die mit Java über Selen gesteuert wird. Scheint recht simpel, ermöglicht es Ihnen jedoch, viele Dinge zu programmieren, die Sie normalerweise von Hand erledigen müssten.

Google Chrome Inspector verwenden

Google Chrome Inspector Website-Probleme mit Chrome Developer Tools oder Firebug herausfinden Website-Probleme mit Chrome Developer Tools oder Firebug ermitteln Wenn Sie meine jQuery-Tutorials bisher befolgt haben, sind möglicherweise einige Code-Probleme aufgetreten, und es ist nicht bekannt, wie Sie das Problem beheben können Sie. Wenn Sie mit einem nicht funktionalen Code konfrontiert werden, ist es sehr hilfreich, um Elemente zu identifizieren, die mit Selenium verwendet werden sollen. Es erlaubt uns, genau das Element aus Java anzusprechen, um Informationen zu extrahieren sowie eine interaktive Aktion wie das Klicken auf eine Schaltfläche. Hier finden Sie eine Einführung in die Verwendung des Inspectors.

Öffnen Sie Google Chrome und navigieren Sie zu einer Seite, sagen Sie die IMDb-Seite für Justice League (2017)..

Lassen Sie uns das Element finden, das Sie anvisieren möchten, sagen wir die Filmzusammenfassung. Klicken Sie mit der rechten Maustaste auf die Zusammenfassung und wählen Sie aus “Prüfen” aus dem Popup-Menü.

Von dem “Elemente” Tab, können wir sehen, dass der Zusammenfassungstext a ist div mit einer Klasse von summary_text.

Verwenden von CSS oder XPath zur Auswahl

Selenium unterstützt die Auswahl von Elementen auf der Seite mithilfe von CSS. (Der unterstützte CSS-Dialekt ist CSS2). Um beispielsweise den Zusammenfassungstext von der IMDb-Seite oben auszuwählen, schreiben wir:

WebElement summaryEl = driver.findElement (By.cssSelector ("div.summary_text")); 

Sie können XPath auch verwenden, um Elemente auf sehr ähnliche Weise auszuwählen (die Spezifikationen finden Sie hier). Um den Zusammenfassungstext auszuwählen, würden wir Folgendes tun:

WebElement summaryEl = driver.findElement (By.xpath ("// div [@ class = 'summary_text']")); 

XPath und CSS verfügen über ähnliche Funktionen, sodass Sie das verwenden können, wo Sie sich wohl fühlen.

Google Mail von Java lesen

Lassen Sie uns nun ein komplexeres Beispiel betrachten: Google Mail abrufen.

Starten Sie den Chrome-Treiber, navigieren Sie zu gmail.com und warten Sie, bis die Seite geladen ist.

WebDriver-Treiber = neuer ChromeDriver (); driver.get ("https://gmail.com"); new WebDriverWait (Treiber, 10) .until (d -> d.getTitle (). toLowerCase (). startsWith ("gmail")); 

Suchen Sie dann nach dem E-Mail-Feld (es wird mit der ID benannt IdentifierId) und geben Sie die E-Mail-Adresse ein. Drücke den Nächster und warten Sie, bis die Passwortseite geladen ist.

/ * Geben Sie den Benutzernamen / email ein. * / Driver.findElement (By.cssSelector ("# IdentifierId")). SendKeys (email); driver.findElement (By.cssSelector (". RveJvd")). click ();  new WebDriverWait (Treiber, 10) .bis (d ->! d.findElements (By.xpath ("// div [@ id = 'password']")). isEmpty ()); 

Nun geben wir das Passwort ein und klicken auf Nächster Klicken Sie erneut auf die Schaltfläche und warten Sie, bis die Google Mail-Seite geladen ist.

/ * Passwort eingeben * / driver .findElement (By.xpath ("// div [@ id = 'password'] // eingabe [@ type = 'password']")) .sendKeys (password); driver.findElement (By.cssSelector (". RveJvd")). click ();  new WebDriverWait (Treiber, 10) .bis (d ->! d.findElements (By.xpath ("// div [@ class = 'Cp']")). isEmpty ()); 

Rufen Sie die Liste der E-Mail-Zeilen ab und führen Sie eine Schleife über jeden Eintrag aus.

Liste Zeilen = Treiber .findElements (By.xpath ("// div [@ class = 'Cp"] // table / tbody / tr ")); für (WebElement tr: Zeilen)  

Holen Sie für jeden Eintrag die Von Feld. Beachten Sie, dass einige From-Einträge je nach Anzahl der Personen in der Konversation mehrere Elemente enthalten können.

/ * From Element * / System.out.println ("From:"); für (WebElement e: tr .findElements (By.xpath (".// div [@ class = 'yW'] / *"))) System.out.println ("" + e.getAttribute ("email")) + "," + e.getAttribute ("name") + "," + e.getText ());  

Holen Sie sich jetzt das Thema.

/ * Subject * / System.out.println ("Sub:" + tr.findElement (By.xpath (".// div [@ class = 'y6']")). GetText ());  

Und das Datum und die Uhrzeit der Nachricht.

/ * Date / Time * / WebElement dt = tr.findElement (By.xpath ("./ td [8] / *")); System.out.println ("Date:" + dt.getAttribute ("title") + "," + dt.getText ());  

Hier ist die Gesamtzahl der E-Mail-Zeilen auf der Seite.

System.out.println (rows.size () + "mails."); 

Und zum Schluss sind wir fertig, also haben wir den Browser verlassen.

driver.quit (); 

Zusammenfassend können Sie Selenium mit Google Chrome zum Crawlen von Websites verwenden, die Javascript stark verwenden. Mit dem Google Chrome Inspector ist es sehr einfach, die erforderlichen CSS- oder XPath-Werte zu ermitteln, um aus einem Element zu extrahieren oder damit zu interagieren.

Haben Sie Projekte, die von der Verwendung von Selenium profitieren? Und welche Probleme haben Sie damit? Bitte beschreiben Sie es in den Kommentaren unten.

Erfahren Sie mehr über: API, Webentwicklung.