Web-Scraping ist ein leistungsstarkes Werkzeug, mit dem Sie Daten aus Websites extrahieren und für eine Vielzahl von Zwecken nutzen können. Es kann verwendet werden, um Daten für Business Intelligence zu sammeln, Änderungen auf Websites zu verfolgen oder eigene Webanwendungen zu erstellen. In diesem Artikel konzentrieren wir uns darauf, wie man JavaScript-Tabellen mit Python scrapt.
Einleitung
Was sind JavaScript-Tabellen?
JavaScript-Tabellen sind eine gängige Methode, um tabellarische Daten im Web darzustellen, und sie sind auf einer Vielzahl von Websites zu finden. Das Scraping dieser Tabellen kann eine Herausforderung darstellen, da die Daten oft als JavaScript-Objekt in den Quellcode der Seite eingebettet sind und nicht in einer Standard-HTML-Tabelle. Mit den richtigen Tools und Techniken ist es jedoch möglich, diese Daten mit Python zu extrahieren.
Wir beginnen damit, die erforderlichen Tools einzurichten und alle notwendigen Bibliotheken zu installieren. Anschließend gehen wir Schritt für Schritt durch den Prozess, bei dem wir Python und einen Web-Driver verwenden, um die Webseite zu laden und die Daten aus der Tabelle zu extrahieren. Abschließend besprechen wir einige Möglichkeiten, die Effizienz und Zuverlässigkeit des Scraping-Prozesses zu verbessern, und warum es für komplexere Aufgaben besser sein kann, einen professionellen Scraper zu verwenden.
Einrichtung
Bevor wir mit dem Scraping von JavaScript-Tabellen mit Python beginnen können, müssen wir zwei Voraussetzungen erfüllen:
- Python: Dieses Tutorial setzt voraus, dass Python auf Ihrem Rechner installiert ist. Falls Sie Python noch nicht installiert haben, können Sie es von der offiziellen Website herunterladen und die Anweisungen für Ihr Betriebssystem befolgen.
- Ein Web-Treiber: Um Webseiten mit Python zu laden und mit ihnen zu interagieren, benötigen wir einen Web-Treiber. Es stehen mehrere Optionen zur Verfügung, wie beispielsweise ChromeDriver, FirefoxDriver und SafariDriver. Für dieses Tutorial verwenden wir ChromeDriver.
Sobald Sie Python und einen Web-Treiber installiert haben, müssen Sie die folgenden Bibliotheken installieren:
- Selenium: Selenium ist eine Bibliothek, mit der Sie einen Webbrowser über Python steuern können. Wir werden sie verwenden, um die Webseite mit der Tabelle zu laden und mit ihr zu interagieren. Bei JavaScript-Tabellen ist es wichtig, eine Bibliothek wie Selenium anstelle von Python-Requests zu verwenden, da Sie so warten können, bis ein von JavaScript generiertes Element auf der Seite erscheint, falls es beim Laden der Webseite noch nicht vorhanden ist.
- Pandas: Pandas ist eine Bibliothek, die benutzerfreundliche Datenstrukturen und Datenanalyse-Tools für Python bereitstellt. Wir werden sie verwenden, um die Daten, die wir aus der Tabelle extrahieren, zu speichern und zu bearbeiten.
Um diese Bibliotheken zu installieren, öffnen Sie ein Terminal oder eine Eingabeaufforderung und verwenden Sie den Befehl pip, um sie zu installieren:
$ pip install selenium pandas
Das war's! Sie sind nun bereit, JavaScript-Tabellen mit Python zu scrapen. Im nächsten Abschnitt gehen wir den Prozess Schritt für Schritt durch.
Los geht’s mit dem Scraping
Nachdem wir nun alle erforderlichen Tools installiert haben, ist es an der Zeit, mit dem Scraping von JavaScript-Tabellen mit Python zu beginnen. Der Vorgang umfasst die folgenden Schritte
- Laden Sie die Webseite mit der Tabelle mithilfe von Selenium und einem Web-Treiber.
- Extrahieren Sie die Daten aus der Tabelle mit Selenium und Python.
- Speichern und bearbeiten Sie die Daten mit Pandas.
Lassen Sie uns jeden dieser Schritte genauer betrachten:
Schritt 1: Laden der Webseite
Als Erstes müssen wir die Webseite laden, die die Tabelle enthält, die wir scrapen möchten. Dies können wir mit Selenium und einem Web-Treiber tun.
Zunächst importieren wir die erforderlichen Bibliotheken:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byimport time
Als Nächstes erstellen wir eine Instanz des Web-Drivers und laden damit die Webseite:
# Replace "path/to/chromedriver" with the path to your ChromeDriver executable
driver = webdriver.Chrome(service=Service('path/to/chromedriver'))
# Load the webpagedriver.get('https://html.com/tags/table/')
Es ist wichtig zu beachten, dass die Webseite vollständig geladen sein muss, bevor die Daten aus der Tabelle extrahiert werden können. Möglicherweise müssen Sie die Funktion driver.implicitly_wait() verwenden, um das Laden der Seite abzuwarten, oder die Funktion driver.find_element(By.*, ‘’) nutzen, um zu warten, bis ein bestimmtes Element auf der Seite geladen ist.
Schritt 2: Extrahieren der Daten
Sobald die Webseite geladen ist, können wir Selenium verwenden, um die Daten aus der Tabelle zu extrahieren. Es gibt mehrere Möglichkeiten, dies zu tun, aber eine Methode besteht darin, die Funktion driver.find_elements(By.CSS_SELECTOR, ‘td’) zu verwenden, um die Zellen in der Tabelle zu lokalisieren und den Text aus jeder Zelle zu extrahieren.
Hier ist ein Beispiel dafür, wie man die Daten aus einer einfachen Tabelle mit zwei Spalten extrahiert:
# Find all of the rows in the table
rows = driver.find_elements(By.CSS_SELECTOR, 'table tr')
# For each row, find the cells and extract the text
for row in rows:
try:
cells = row.find_elements(By.CSS_SELECTOR, 'td') or row.find_elements(By.CSS_SELECTOR, 'th')
except:
continue
for cel in cells:
print(cel.text, end= " ")
print()
driver.quit()Beachten Sie, dass Sie je nach Struktur der Tabelle und den darin enthaltenen Elementen möglicherweise einen anderen CSS-Selektor verwenden müssen. Sie können die Entwicklertools Ihres Webbrowsers nutzen, um die Seite zu untersuchen und den passenden Selektor zu finden.
Schritt 3: Speichern und Bearbeiten der Daten
Sobald Sie die Daten aus der Tabelle extrahiert haben, können Sie sie in einem Pandas-Datenrahmen speichern und nach Bedarf bearbeiten. Hier ist ein Beispiel dafür, wie das geht:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
import pandas as pd
df = pd.DataFrame()
driver = webdriver.Chrome(service=Service('/path/to/chromedriver'))
# Use the webdriver to load a webpage
driver.get('https://html.com/tags/table/')
# When scraping JavaScript generated content it is important to wait a few seconds
time.sleep(4)
table = driver.find_element(By.CSS_SELECTOR, 'table')
# For each row, find the cells and extract the text
df = pd.read_html(table.get_attribute('outerHTML'))
print(df)driver.close()
Tiefer eintauchen
Mit den oben beschriebenen Schritten können Sie zwar JavaScript-Tabellen mit Python scrapen, es gibt jedoch einige Möglichkeiten, die Effizienz und Zuverlässigkeit des Prozesses zu verbessern.
Eine Möglichkeit zur Effizienzsteigerung ist die Verwendung eines Headless-Browsers, also eines Browsers, der ohne grafische Benutzeroberfläche im Hintergrund läuft. Dies kann schneller sein als der Betrieb eines vollständigen Browsers und ist weniger ressourcenintensiv. Um einen Headless-Browser mit Selenium zu verwenden, können Sie beim Erstellen der Web-Driver-Instanz das Flag --headless verwenden.
Eine weitere Möglichkeit zur Effizienzsteigerung ist die Nutzung eines Dienstes, der wechselnde IP-Adressen bereitstellt, wie beispielsweise ein Proxy-Server. Dies kann Ihnen helfen, nicht als Scraper erkannt und von der Website blockiert zu werden, da sich die IP-Adresse der Anfrage bei jeder Anfrage scheinbar ändert. WebScrapingAPI ist ein Dienst, der die Möglichkeit bietet, eine Website über einen Proxy-Server zu scrapen. Weitere Informationen zur Verwendung von Proxys für das Web-Scraping finden Sie in unserer Dokumentation.
Um einen Proxy-Server mit Selenium zu verwenden, empfehle ich Ihnen dringend, selenium-wire zu nutzen, da dies im Vergleich zu Selenium selbst einfacher ist, wenn es um die Verbindung zu einem Proxy-Server geht. Wie jedes andere Python-Paket können Sie es einfach installieren, indem Sie den folgenden Befehl ausführen:
$ pip install selenium-wire
Anschließend können Sie das folgende Codebeispiel verwenden, um einen Proxy-Server mit Selenium zu nutzen:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
import time
# Create a webdriver instance with the desired proxy server and authentication details
API_KEY = '<YOUR-API-KEY-HERE>'
options = {
'proxy': {
'http': f'http://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',
'https': f'https://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',
'no_proxy': 'localhost,127.0.0.1'
}
}
driver = webdriver.Chrome(service=Service('/path/to/chromedriver'), seleniumwire_options=options)
# Use the webdriver to load a webpage
driver.get('http://httpbin.org/ip')
# When scraping JavaScript generated content it is important to wait a few seconds
time.sleep(5)
# Do something with the page, such as extract data or take a screenshot
# ...
# Close the webdriver
driver.quit()Obwohl diese Techniken nützlich sein können, um die Effizienz und Zuverlässigkeit Ihres Web-Scrapings zu verbessern, ist es wichtig zu beachten, dass sie den Rahmen dieses Artikels sprengen. Für komplexere Scraping-Aufgaben kann es effizienter und zuverlässiger sein, einen professionellen Scraper wie WebScrapingAPI zu verwenden. Dieses Tool bietet zusätzliche Funktionen wie IP-Rotation und CAPTCHA-Umgehung, die den Scraping-Prozess wesentlich einfacher und zuverlässiger machen können.
Im nächsten Abschnitt fassen wir die Schritte zum Scraping von JavaScript-Tabellen mit Python zusammen und erörtern die Vorteile der Verwendung eines professionellen Scrapers für komplexere Aufgaben.
Zusammenfassung
Zusammenfassend lässt sich sagen, dass das Scraping von JavaScript-Tabellen mit Python eine leistungsstarke Methode ist, um Daten von Websites zu extrahieren und für eine Vielzahl von Zwecken zu nutzen. Unabhängig davon, ob Sie Ihren eigenen Code oder einen professionellen Scraper verwenden, kann diese Technik ein wertvolles Werkzeug sein, um Daten zu sammeln und Erkenntnisse zu gewinnen.




