Selenium Web Scraping - Alles, was Sie im Jahr 2024 wissen müssen

Leitfäden, Proxies, Python, Scraping, Mai-06-20225 Min. gelesen

Datenerfassung ist ein Begriff, der in den letzten zehn Jahren häufig verwendet wurde. Jedes Unternehmen möchte seine Kunden genau kennen, damit es die beste Strategie zur Lösung ihrer Probleme entwickeln kann. Normalerweise verfügen technologiebasierte Unternehmen über Data Lakes, um Daten für die Analyse zu erhalten. Aber manchmal müssen sie die Daten auch online sammeln, um

Datenerfassung ist ein Begriff, der in den letzten zehn Jahren häufig verwendet wurde. Jedes Unternehmen möchte seine Kunden genau kennen, damit es die beste Strategie zur Lösung ihrer Probleme entwickeln kann. Normalerweise verfügen technologiebasierte Unternehmen über Data Lakes, um Daten für die Analyse zu erhalten. Aber manchmal müssen sie die Daten auch online für verschiedene Analysen sammeln, z. B. für Stimmungsanalysen, SEO-Analysen und Monitoring. Web Scraping ist der Ansatz, um Daten aus einer gezielten Quelle zu extrahieren und sie in einem lokalen oder Cloud-Speicher zu speichern. Python ist die beste Programmiersprache, um Web Scraping durchzuführen. Es gibt viele Python-Bibliotheken, die Ihnen beim Scrapen von Daten aus Websites, Blogs und anderen Online-Quellen helfen können. Die bekanntesten davon sind BeautifulSoup und Selenium. In diesem Artikel werden wir sehen, wie man Selenium Web Scraping durchführt.

Was ist Web Scraping?

Web-Scraping ist das Extrahieren einer großen Menge von Daten aus verschiedenen Webseiten im Internet. Heutzutage investieren Anfänger im Bereich des maschinellen Lernens und der künstlichen Intelligenz viel Zeit in das Erlernen verschiedener Methoden des Web-Scraping. Web Scraping besteht aus zwei Teilen, dem Crawler und dem Scraper. Der Crawler ist für die Suche und Lokalisierung der erforderlichen Daten aus der Zielquelle verantwortlich, der Scraper hilft dann bei der Extraktion dieser Daten aus der Quelle.

Selen - Was ist das?

Selenium ist eine kostenlose und quelloffene Python-Bibliothek, ein automatisiertes Test-Framework, das hauptsächlich zum Testen und Validieren von Webanwendungen in verschiedenen Browsern verwendet wird. Sie können jede beliebige Programmiersprache verwenden, z. B. C#, Java und meine Lieblingssprache, Python. Die Selenium-Software ist eine Suite von Tools, die aus folgenden Komponenten besteht:

  • Integrierte Entwicklungsumgebung (IDE) von Selenium.
  • Selenium Remote Control.
  • Webdriver.
  • Selenium-Raster.

Sehen wir uns an, wie man Selenium mit Python verwendet, um den gesamten Web-Scraping-Prozess zu automatisieren.

Problemstellung:

Unser Ziel ist es, die Namen und Gehälter der NBA-Spieler des letzten Jahrzehnts zu erfassen und die Daten dann im Datenrahmenformat zu speichern. HINWEIS: Um zu lernen und zu erklären, wie Selenium Web Scraping funktioniert, verwenden wir die hoopshype-Website.

Installation des Chrome-Treibers:

Bevor Sie mit dem Web Scraping beginnen, müssen Sie den Chrome-Treiber auf Ihrem Computer installieren. Welchen Chrome-Treiber Sie installieren, hängt von der Version des Chrome-Browsers ab, die Sie verwenden. Sie können dies überprüfen, indem Sie die folgenden Schritte ausführen:

Schritt 1: Öffnen Sie den Chrome-Browser-> Klicken Sie auf das "Hamburger"-Symbol, das sich in der oberen rechten Ecke des Browsers befindet.

SCHRITT 2: Nachdem Sie auf das "Hamburger"-Symbol geklickt haben, sehen Sie die Option "Hilfe". Klicken Sie auf "Hilfe" und wählen Sie "Über den Chrome-Browser". Daraufhin wird die Versionsseite angezeigt. Die Abbildung unten zeigt die Versionsseite von Google Chrome.

Google Chrome Versionsfenster

Hinweis: Wenn Sie über Updates verfügen, sollten Sie diese vor der Installation des Chrome-Treibers installieren.

Sobald Sie die Version herausgefunden haben, gehen Sie auf die Website des Chrome-Treibers und laden Sie den Treiber für Ihre Version von Chrome herunter.

Installieren Sie Selenium:

Der einfachste Weg, das Selenium-Paket zu installieren, ist über PIP (Package Installer Python). Sie können ein beliebiges Notizbuch öffnen, entweder Juypter oder Google Collab, und den folgenden Python-Code eingeben:

pip install selenium

Der obige Befehl lädt alle Abhängigkeitspakete für Selenium herunter. Sehen wir uns nun an, wie man Web Scraping mit Selenium implementiert.

Web Scraping mit Selenium:

Wir empfehlen, eine virtuelle Umgebung zu schaffen und den Web-Scraping-Prozess zur besseren Übung zu implementieren. In diesem Beispiel verwenden wir das Juypter-Notebook für Web-Scraping.

SCHRITT 1: Importieren Sie alle erforderlichen Bibliotheken. Pandas und der Selenium-Webdriver sind die wichtigsten Bibliotheken für einfaches Web-Scraping. Der Python-Code zum Importieren aller erforderlichen Bibliotheken ist unten dargestellt:

from selenium import webdriver
from selenium.webdriver.common.keys importiert Schlüssel
import pandas as pd

Schritt 2: Sobald Sie die Bibliotheken importiert haben, besteht der nächste Schritt darin, den Chrome-Treiber zu starten. Der Python-Code zum Starten des Treibers ist unten dargestellt

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

HINWEIS: Geben Sie in dem Argument den vollständigen Pfad zum Speicherort des Chrome-Treibers auf Ihrem lokalen System an.

SCHRITT 3: Sobald Sie den Treiber starten, sollte sich der Chrome-Browser in einem neuen Fenster öffnen. Das Fenster sollte jedoch leer sein, da es keine Feed-URL gibt. Der Python-Code für die Ziel-URL des Feeds ist unten dargestellt:

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(seed_url)

SCHRITT 4: Nach Eingabe der Feed-URL sollten Sie in einem neuen Fenster die Ziel-Website sehen können. Der folgende Prozess dient dazu, den Namen jedes NBA-Spielers zu finden. In Selenium können Sie die HTML-Elemente mit den folgenden Methoden finden:

  • ID
  • CSS-Selektor
  • XPATH-Selektor
  • Name
  • Name der Klasse
  • Tag-Name

In unserem Beispiel wollen wir sehen, wie wir die Elemente mit Hilfe des XPATH-Selektors erkennen können. Wir möchten zwei Details aus diesen Daten extrahieren:

  • Name des Spielers
  • Gehalt

Hinweis: Es ist auch möglich, das Suchformular zu verwenden, um Webelemente zu finden. Das Suchformular befindet sich am unteren Rand der Seite Inspect.

Schritt 5: Wenn Sie auf der Zielseite angekommen sind, sollten Sie eine Liste der Spieler und ihrer Gehälter für die jeweilige Saison (Jahr) sehen. Wählen Sie einen der Spielernamen aus und klicken Sie ihn mit der rechten Maustaste an. Sie erhalten dann mehrere Optionen. Klicken Sie in diesen Optionen auf "Untersuchen". Die folgende Abbildung zeigt die Seite "Prüfen".

Seite der Zielsite inspizieren

Wie bereits erwähnt, geht es nun darum, die Namen der Spieler zu extrahieren. Der erste Schritt besteht also darin, ein einzelnes Spielerelement und den gemeinsamen Faktor aller Spielerelemente zu finden. Klicken Sie also im selben Prozess mit der rechten Maustaste auf den Spielernamen und untersuchen Sie ihn. Dies sollte Sie direkt zum Standort Ihres Elements führen. In unserem Szenario nehmen wir nicht den Namen eines Spielers, sondern die Namen aller Spieler. Das gemeinsame Element für alle Spieler ist "td class-'name'". Wenn wir also dieses Element verwenden und eine Schleife daraus machen, erhalten wir die Namen aller Spieler. Der Python-Code zum Extrahieren des Namens eines Spielers ist unten dargestellt:

nba_players = driver.find_elements_by_xpath('//td[@class="name"]')
players_list = []
for p in range(len(nba_players)):
    players_list.append(nba_players[p].text)
print(spieler_liste)

Erläuterung: Wie oben erwähnt, suchen wir das HTML-Code-Element mit Hilfe des XPATH-Ansatzes. Offensichtlich benötigen wir den XPATH-Pfad mehrerer Elemente. Am einfachsten ist es, das Element name zu finden, das "td class-name" heißt. Klicken Sie mit der rechten Maustaste auf das Element und wählen Sie "Kopieren". Sie sollten viele Optionen erhalten, z. B. "JS-Pfad kopieren" und "XPATH kopieren". Wählen Sie "XPATH kopieren", und Sie sollten automatisch den XPATH-Speicherort des Elements erhalten. Fügen Sie den Pfad in das Argument find_elements_by_XPATH ein. Sobald Sie den Pfad eingefügt haben, sollte Python beginnen, diese Elemente zu identifizieren und ihre Adressen abzurufen, nicht den eigentlichen Namen. Um die tatsächlichen Namen der Spieler zu erhalten, werden wir die Funktion in einer Schleife ausführen und die Ergebnisse an eine leere Liste als Ausgabe anhängen. Wenn Sie das obige Codeschnipsel ausführen, sollten Sie die in der folgenden Abbildung gezeigte Ausgabe erhalten.

Ausgabe zum Extrahieren von Spielernamen

Da wir nun die Namen der Spieler haben, besteht der nächste Schritt darin, ihre jeweiligen Gehälter zu ermitteln. Der genaue Prozess der Extraktion des Namens wird durchgeführt, um die Gehaltsangaben zu erhalten.

Schritt 6: Die Gehaltsdaten werden mithilfe des Python-Codes extrahiert (siehe unten):

spieler_gehalt=driver.find_elements_by_xpath('//td[@class="hh-gehälter-sortiert"]')
gehalt_liste=[]
for s in range(len(gehalt_spieler)):
    gehalt_liste.append(spielergehalt[s].text)
print(gehalt_liste)

Erläuterung: Der Vorgang ist derselbe. Der einzige Unterschied ist das gemeinsame Element der Akteure. Das Webelement "td class-'hh-salaries-sorted'" war das gemeinsame Element. Nachdem wir das Element gefunden haben, erstellen wir eine leere Liste, um die gesamte Funktion zu wiederholen und die Gehaltsangaben an die leere Liste anzuhängen. Die Ausgabe sollte wie das folgende Bild aussehen:

Ausgabe für die Extraktion von Spielergehältern

SCHRITT 7: Jetzt haben wir Daten von unserem Ziel abgerufen. Aber wenn Sie genau hinsehen, beziehen sich die Daten nur auf eine Saison (das laufende Jahr). Unsere Problemstellung besagt, dass wir die Daten für das letzte Jahrzehnt extrahieren müssen. An dieser Stelle kommt die Browser-Automatisierung ins Spiel. Kein Grund zur Sorge. Wir können denselben Code für die Saison verwenden wie die Schleifenfunktion. Der Python-Code zur Automatisierung des Scraping-Prozesses und zur Beschaffung der Daten für das letzte Jahrzehnt ist unten dargestellt:

for i in range(2010,2021):
    page_number = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + page_number
    driver.get(feed_url)
    
    Spieler = driver.find_elements_by_xpath('//td[@class="name"]')
    Gehälter = driver.find_elements_by_xpath('//td[@class="hh-gehälter-sortiert"]') 
    
    player = []
   for j in range(len(players)):
        player.append(players[j].text)
    
    gehalt = []
   for k in range(len(gehalt)):
        gehalt.append(gehalt[k].text)

Erläuterung: Wie oben erwähnt, wollen wir die Daten der letzten zehn Jahre abrufen. Zu diesem Zweck müssen wir eine Paginierung durchführen. Bei der Paginierung werden fortlaufende Nummern, in der Regel Seitenzahlen, hinzugefügt, um die Reihenfolge der Seite zu kennzeichnen. Die Jahreszeiten werden im Format JJJJ/MM dargestellt. Um dies zu erkennen, verwenden wir die Verkettungstechnik. Danach verwenden wir denselben Prozess und denselben Code innerhalb der Schleife.

Schritt 8: Der letzte Schritt besteht darin, die Daten im Datenrahmen für verschiedene Analysen zu speichern, z. B. für die Stimmungsanalyse und die Wettbewerbsanalyse. Der Python-Code zum Speichern der Daten im Datenrahmen wird im Folgenden gezeigt:

df = pd.DataFrame(columns=['Spieler','Gehalt','Jahr'])
data = list(zip(Spieler[1:],Gehalt[1:])) 
df1 = pd.DataFrame(data, columns=['Spieler','Gehalt']) 
df1['Jahr'] = i
df = df.append(df1)

HINWEIS: In der zweiten Zeile des Codes können Sie sehen, dass ich Slicing durchgeführt habe. Der Grund dafür ist, dass bei der Ausgabe der Namen und Gehälter der Spieler der erste Index, d. h. Index 0, "PLAYER" und "DATE" ist. Diese Elemente haben keine große Bedeutung für die Tabelle. Wir können diese Elemente also weglassen.

Erläuterung: Wir haben einen leeren Rahmen mit den Spalten "Spieler", "Gehalt" und "Jahr" erstellt. Wir fassen alle Daten in einer einzigen Liste zusammen und fügen sie mit der Funktion Zip an den Datenrahmen an. Sobald die Daten dem Datenrahmen hinzugefügt wurden, ist es an der Zeit, die Automatisierung zu beenden und den Treiber zu schließen. Bei Bedarf können Sie den Datenrahmen in einer CSV-Datei für ein Daten-Repository speichern.

Das war's! Sie haben erfolgreich Automatisierung und Web Scraping mit Selenium und Python durchgeführt.

FAQs:

1. Ist Selenium für Web Scraping geeignet?
Ja, wenn Sie vorhaben, dynamische Webseiten, die JavaScript verwenden, zu scrapen. Aber es ist auch eine gute Option für Python. Selenium ist ein guter Ausgangspunkt für Anfänger, die sich für Web Scraping interessieren.
2. Was ist besser, BeautifulSoup oder Selenium?
Diese Antwort hängt von der Art der Ziel-Webseite und dem Umfang Ihres Projekts ab. Wenn Sie eine kleine und gut strukturierte statische Seite scrapen wollen, dann ist BeautifulSoup besser geeignet. Wenn Ihr Projekt komplex strukturierte dynamische Webseiten umfasst, ist Selenium Web Scraping möglicherweise die beste Option.
3. Welches sind die besten Tools für Web Scraping?
Python ist das beste und günstigste Werkzeug zur Durchführung von Web Scraping. Die Python-Bibliotheken wie BeautifulSoup, Selenium und Request sowie andere Tools wie Scrapy sind die besten Werkzeuge für Web Scraping.

Schlussfolgerung:

Dieser Artikel zeigt, wie Sie einen Chrome-Treiber auf Ihrem lokalen System installieren, um einen kleinen Web-Scraping-Prozess zu automatisieren. Die Verarbeitung großer Datenmengen in Echtzeit (in Form von MB, GB und manchmal TB) erfordert komplexe Schritte. Selenium ist ein guter Einstieg für Anfänger, die sich für das Sammeln von Daten, den Screen Scraping-Prozess und die Datenwissenschaft im Allgemeinen interessieren. Wie bereits erwähnt, erfordert ein komplexer Web-Scraping-Prozess eine Menge Zeit, um die Daten zu sammeln. Die meisten Websites lassen Web-Scraping über einen längeren Zeitraum nicht zu; sobald Sie diesen Schwellenwert erreichen, wird die Website wahrscheinlich Ihre IP-Adresse sperren und Ihren Web-Scraping-Prozess stoppen. Um solche Schwierigkeiten zu vermeiden, empfiehlt es sich, einen Proxy zu verwenden. ProxyScrape bietet hervorragende Proxys für Wohngebiete, die sich am besten für anspruchsvolle Aufgaben wie Web Scraping eignen.

HAFTUNGSAUSSCHLUSS: Dieser Artikel ist ausschließlich zu Lernzwecken gedacht. Ohne die Einhaltung der entsprechenden Richtlinien kann die Durchführung von Web Scraping illegal sein. Dieser Artikel unterstützt kein illegales Web Scraping in irgendeiner Form.