Web Scraping mit Jupyter Notebooks

Entdecken Sie, wie Jupyter Notebooks Web Scraping mit interaktiver Codierung, Datenanalyse und Visualisierung vereinfachen.
12 min read
Web Scraping With Jupyter Notebooks blog image

In diesem Leitfaden erfahren Sie Folgendes:

  • Was Jupyter Notebooks sind
  • Warum Sie Jupyter Notebooks für Web Scraping verwenden sollten
  • Schritt-für-Schritt-Anleitung zur Verwendung
  • Anwendungsfälle von Jupyter Notebooks für das Scraping von Online-Daten

Dann legen wir mal los!

Was sind Jupyter Notebooks?

Im Zusammenhang mit Jupyter ist ein Notebook „ein gemeinsam nutzbares Dokument, das Computercode, Beschreibungen in einfacher Sprache, Daten, Diagramme, Grafiken und Abbildungen sowie interaktive Steuerelemente kombiniert.“

Notebooks bieten interaktive Umgebungen für die Erstellung von Prototypen und die Erläuterung von Code, die Erkundung und Visualisierung von Daten und den Austausch von Ideen. Insbesondere werden Notebooks, die von der Jupyter Notebook App erstellt werden, Jupyter Notebooks genannt.

Die Jupyter Notebook App ist eine Server-Client-Anwendung, die die Bearbeitung und Ausführung von Notebook-Dokumenten über einen Webbrowser ermöglicht. Sie kann auf einem lokalen Desktop ausgeführt oder auf einem entfernten Server installiert werden.

Die Oberfläche der Jupyter Notebook App

Jupyter Notebooks bieten den sogenannten „Kernel“, eine „Rechenmaschine“, die den in einem Notebook-Dokument enthaltenen Code ausführt. Im Einzelnen führt der ipython-Kernel Python-Code aus (es gibt aber auch Kernels in anderen Sprachen):

Starten eines neuen Dokuments über den ipython-Kernel

Die Jupyter Notebook App bietet ein Dashboard, das typische Operationen wie die Anzeige lokaler Dateien, das Öffnen vorhandener Notebook-Dokumente, die Verwaltung von Dokumentenkernel und mehr unterstützt:

Das Dashboard der Jupyter Notebooks

Warum Jupyter Notebooks für Web Scraping verwenden?

Jupyter Notebooks sind speziell für die Datenanalyse sowie für F&E-Zwecke konzipiert und eignen sich aufgrund ihrer Eigenschaften gut für Web-Scraping-Zwecke:

  • Interaktive Entwicklung: Schreiben und Ausführen von Code in kleinen, überschaubaren Abschnitten, die Zellen genannt werden. Jede Zelle kann unabhängig von den anderen arbeiten. Das garantiert ein vereinfachtes Testen und Debuggen.
  • Organisation: Verwenden Sie Markdown in den Zellen, um den Code zu dokumentieren, die Logik zu erklären und Notizen oder Anweisungen hinzuzufügen.
  • Integration mit Datenanalysetools: Nach dem Scrapen können Sie die Daten sofort in Python bereinigen, verarbeiten und analysieren, da Jupyter Notebooks in Bibliotheken wie pandasmatplotlibseaborn und mehr integriert werden können.
  • Reproduzierbarkeit und Teilen: Jupyter Notebooks können als .ipynb-Dateien (das Standardformat) leicht mit anderen geteilt oder in andere Formate wie ReST, Markdown und mehr konvertiert werden.

Vor- und Nachteile

Dies sind die Vor- und Nachteile der Verwendung von Jupyter Notebooks für Daten-Scraping:

👍Vorteile:

  • Schritt-für-Schritt-Debugging: Da jede Zelle unabhängig laufen kann, können Sie Ihren Datenextraktionscode in verschiedene Zellen unterteilen und diese ausführen. Auf diese Weise können Sie kleine Codeblöcke debuggen, indem Sie die Zellen ausführen und Fehler auf Zellenebene abfangen.
  • Dokumentation: Verwenden Sie Markdown in Zellen, um Dateien zu erstellen, in denen Sie die Funktionsweise Ihres Scraping-Codes dokumentieren und die Logik hinter den getroffenen Entscheidungen beschreiben können.
  • Flexibilität: In Jupyter Notebooks können Sie Web Scraping, Datenbereinigung und Analyse in einer einzigen Umgebung kombinieren. Dies ermöglicht den Wechsel zwischen verschiedenen Umgebungen, beispielsweise das Schreiben des Scraping-Skripts in eine IDE und die Analyse der Daten an anderer Stelle.

👎Nachteile:

  • Nicht ideal für große Projekte: Jupyter Notebooks neigen dazu, lange Dokumente zu werden. Das macht sie nicht zur idealen Wahl für groß angelegte Daten-Scraping-Projekte.
  • Leistungseinschränkungen: Notebooks neigen dazu, langsam zu werden oder nicht mehr zu reagieren, wenn sie mit großen Datensätzen arbeiten oder lange Skripte ausführen. Erfahren Sie mehr darüber, wie Sie Web Scraping schneller machen.
  • Nicht ideal für die Automatisierung: Wenn Sie Ihren Scraper nach einem Zeitplan ausführen oder ihn als Teil eines größeren Systems einsetzen müssen, sind Jupyter Notebooks nicht die beste Wahl. Der Grund dafür ist, dass sie in erster Linie für die interaktive, manuelle Ausführung von Zellen konzipiert sind.

Wie man Jupyter Notebooks für Web Scraping verwendet: Schritt-für-Schritt-Anleitung

Jetzt wissen Sie, warum Sie Jupyter Notebooks für Web Scraping verwenden sollten. Jetzt können Sie sehen, wie Sie sie in einem realen Scraping-Szenario verwenden können!

Voraussetzungen

Um dieses Tutorial zu wiederholen, muss Ihr System die folgenden Voraussetzungen erfüllen:

  • Python 3.6 oder höher: Jede Python-Version höher als 3.6 ist geeignet. Insbesondere werden wir die Abhängigkeiten über pip installieren, das bereits mit jeder Python-Version größer als 3.4 installiert wird.

Schritt 1: Einrichtung der Umgebung und Installation von Abhängigkeiten

Angenommen, Sie nennen den Hauptordner Ihres Projekts scraper/. Am Ende dieses Schritts hat der Ordner die folgende Struktur:

scraper/
    ├── analysis.ipynb
    └── venv/

Wo:

  • analysis.ipynb ist das Jupyter Notebook, das den gesamten Code enthält.
  • venv/ enthält die virtuelle Umgebung.

Sie können das Verzeichnis venv/ virtual environment wie folgt erstellen:

python -m venv venv

Zur Aktivierung unter Windows, führen Sie Folgendes aus:

venv\Scripts\activate

Entsprechend führen Sie unter macOS/Linux Folgendes aus:

source venv/bin/activate

Installieren Sie in der aktivierten virtuellen Umgebung alle für dieses Tutorial benötigten Bibliotheken:

pip install requests beautifulsoup4 pandas jupyter seaborn

Diese Bibliotheken dienen den folgenden Zwecken:

  • requests: Zur Durchführung von HTTP-Requests.
  • beautifulsoup4: Zum Parsen von HTML- und XML-Dokumenten.
  • pandas: Eine leistungsstarke Bibliothek zur Datenmanipulation und -analyse, ideal für die Arbeit mit strukturierten Daten wie CSV-Dateien oder Tabellen.
  • jupyter: Eine webbasierte interaktive Entwicklungsumgebung zum Ausführen und Weitergeben von Python-Code, ideal für Analyse und Visualisierung.
  • seaborn: Eine Python-Bibliothek zur Datenvisualisierung basierend auf Matplotlib.

Um die Datei analysis.ipynb zu erstellen, müssen Sie zunächst den Ordner scraper/ eingeben:

cd scraper

Dann initialisieren Sie ein neues Jupyter Notebook mit diesem Befehl:

jupyter notebook

Sie können jetzt auf Ihre Jupyter Notebook App über locahost8888 zugreifen.

Erstellen Sie eine neue Datei, indem Sie auf die Option „Neu > Python 3“ klicken:

Erstellung einer neuen Jupyter Notebook-Datei

Die neue Datei wird automatisch untitled.ipynb genannt. Sie können sie im Dashboard umbenennen:

Umbenennung einer Jupyter Notebook-Datei

Großartig! Sie sind nun vollständig für das Web Scrpaing mit Jupyter Notebooks eingerichtet.

Schritt 2: Zielseite definieren

In diesem Tutorial werden Sie die Daten von der Website worldometer scrapen. Die Zielseite ist insbesondere die Seite mit den jährlichen CO2-Emissionen in den USA, die tabellarische Daten wie diese bereitstellt:

Die tabellarischen Daten über die jährlichen C02-Emissionen in den Vereinigten Staaten

Schritt 3: Abrufen der Daten

Sie können die Daten von der Zielseite abrufen und wie folgt in einer CSV-Datei speichern:

import requests
from bs4 import BeautifulSoup
import csv

# URL of the website
url = "https://www.worldometers.info/co2-emissions/us-co2-emissions/"

# Send a GET request to the website
response = requests.get(url)
response.raise_for_status() 

# Parse the HTML content
soup = BeautifulSoup(response.text, "html.parser")

# Locate the table
table = soup.find("table") 

# Extract table headers
headers = [header.text.strip() for header in table.find_all("th")]

# Extract table rows
rows = []
for row in table.find_all("tr")[1:]:  # Skip the header row
    cells = row.find_all("td")
    row_data = [cell.text.strip() for cell in cells]
    rows.append(row_data)

# Save the data to a CSV file
csv_file = "emissions.csv"
with open(csv_file, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(headers)  # Write headers
    writer.writerows(rows)    # Write rows

print(f"Data has been saved to {csv_file}")

Dieser Code funktioniert folgendermaßen:

  • Es verwendet dierequests.Bibliothek, um eine GET-Request an die Zielseite über die requests.get()-Methode zu senden und prüft auf Request-Fehler über die Methode response.raise_for_status().
  • Es verwendet BeautifulSoup, um den HTML-Inhalt zu parsen, indem die Klasse BeautifulSoup() instanziiert wird und der Selektor table (Tabelle) mit der Methode soup.find() gefunden wird. Diese Methode ist insbesondere nützlich, um die Tabelle zu finden, die die Daten enthält. Wenn Sie mit dieser Syntax nicht vertraut sind, lesen Sie unsere Anleitung zu BeautifulSoup Web Scraping.
  • Sie verwendet ein Listenverständnis, um die Kopfzeile der Tabelle zu extrahieren.
  • Es verwendet eine for-Schleife, um alle Daten aus der Tabelle abzurufen, wobei die Kopfzeile übersprungen wird.
  • Schließlich wird eine neue CVS-Datei geöffnet, an die alle abgerufenen Daten angehängt werden.

Sie können diesen Code in eine Zelle einfügen und ihn durch Drücken von UMSCHALT+EINGABE ausführen.

Eine andere Möglichkeit, die Zelle auszuführen, besteht darin, sie zu markieren und die Schaltfläche „Ausführen“ im Dashboard zu drücken:

Ausführung einer Zelle in einem Jupyter Notebook

Erstaunlich, wie die Meldung „Daten wurden in emissions.csv gespeichert“ Sie über die erfolgreiche Datenextraktion informiert.

Schritt 4: Sicherstellen, dass die Daten korrekt sind

Nun haben Sie die Daten in einer CVS-Datei gespeichert. Öffnen Sie die CSV-Datei und sehen Sie nach, ob alles gut gelaufen ist – manchmal gibt es Probleme bei der Konvertierung. Dazu können Sie den folgenden Code in eine neue Zelle eingeben:

import pandas as pd

# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)

# Print the DataFrame
df.head()

Dieser Code bewirkt Folgendes:

  • Öffnet die CSV-Datei als Datenrahmen, dank pandas, mit der Methode pd.read_csv().
  • Druckt die ersten fünf Zeilen des Datenrahmens mit der Methode df.head().

Hier ist das erwartete Ergebnis:

Die ersten fünf Zeilen des Datenrahmens

Ausgezeichnet! Es müssen nur noch die extrahierten Daten dargestellt werden.

Schritt 5: Visualisierung der Daten

Jetzt können Sie jede beliebige Datenanalyse durchführen. Sie können zum Beispiel seaborn verwenden, um ein Liniendiagramm zu erstellen, das den Trend der C02-Emissionen im Laufe der Jahre zeigt. Gehen Sie dabei wie folgt vor:

import seaborn as sns
import matplotlib.pyplot as plt

# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)

# Clean column names be removing extra spaces
df.columns = df.columns.str.strip().str.replace('  ', ' ')

# Convert 'Fossil CO2 Emissions (tons)' to numeric
df['Fossil CO2 Emissions (tons)'] = df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)

# Ensure the 'Year' column is numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
df = df.sort_values(by='Year')

# Create the line plot
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='Year', y='Fossil CO2 Emissions (tons)', marker='o')

# Add labels and title
plt.title('Trend of Fossil CO2 Emissions Over the Years', fontsize=16)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Fossil CO2 Emissions (tons)', fontsize=12)
plt.grid(True)
plt.show()

Dieser Code funktioniert folgendermaßen:

  • Er verwendet pandas für Folgendes:
    • Öffnen der CSV-Datei.
    • Bereinigen Sie die Spaltennamen durch Entfernen zusätzlicher Leerzeichen mit der Methode df.columns.str.strip().str.replace(' ', ' ') (wenn Sie dies nicht verwenden, erhalten Sie in diesem Beispiel Fehler in Ihrem Code).
    • Greift auf die Spalte „Fossil CO2 Emissions (tons) (Fossile CO2-Emissionen (Tonnen))“ zu und konvertiert Daten in Zahlen mit der Methode df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float).
    • Greift auf die Spalte „Jahre (Years)“ zu, wandelt die Werte mit der Methode pd.to_numeric()in Zahlen um, und sortiert die Werte in aufsteigender Reihenfolge mit der Methode df.sort_values().
  • Es verwendet die Bibliotheken matplotlib und seaborn (die auf matplotlib aufgebaut ist, sodass sie installiert wird, wenn Sie seaborn installieren), um den eigentlichen Plot zu erstellen.

Hier ist das erwartete Ergebnis:

Die resultierende Darstellung

Beeindruckend! So leistungsfähig ist das Jupyter Notebook Scraping.

Schritt Nr. 6: Das Ganze zusammensetzen

So sieht das endgültige Jupyter Notebook Web-Scraping-Dokument aus:

Das gesamte Jupyter Notebook-Dokument

Beachten Sie das Vorhandensein von verschiedenen Blöcken, jeder mit seinem Output.

Anwendungsfälle von Jupyter Notebook Web Scraping

Zeit, Anwendungsfälle für den Einsatz von Jupyter Notebooks beim Web Scraping zu diskutieren!

Tutorials

Vergessen Sie nicht, dass jede Zelle in einem Jupyter Notebook unabhängig ausgeführt werden kann. Mit der zusätzlichen Unterstützung für Markdown wird die Bibliothek zu einem hervorragenden Tool für die Erstellung von Schritt-für-Schritt-Anleitungen.

Sie können z. B. zwischen Zellen mit Code und solchen, die die Logik und Argumentation dahinter erklären, abwechseln. Beim Web Scraping sind Jupyter Notebooks besonders nützlich. Sie können verwendet werden, um Tutorials für Nachwuchsentwickler zu erstellen, die sie durch jeden Schritt des Prozesses führen.

Wissenschaft und Forschung (F&E)

Aufgrund ihres interaktiven Charakters und der Möglichkeit, sie für die Zusammenarbeit zu exportieren, sind Jupyter Notebooks ideal für Forschung und Entwicklung. Dies gilt insbesondere für Web Scraping. Wenn Sie z. B. Websites scrapen, die mehrere Runden des Testens erfordern, können Sie alle Tests in einem einzigen Notebook speichern und Markdown verwenden, um die erfolgreichen Tests zu markieren.

Datenexploration

Die Jupyter-Bibliothek wurde speziell für die Datenexploration und -analyse entwickelt. Das macht sie auch zu einem perfekten Tool für Web Scraping für maschinelles Lernen.

Dieser Anwendungsfall bezieht sich direkt auf das Beispiel, das Sie oben kodiert haben. Sie haben die Daten von der Website abgerufen und sofort analysiert, alles in derselben Programmierumgebung.

Fazit

In diesem Beitrag haben Sie erfahren, wie Jupyter Notebooks ein leistungsstarkes Tool für Web Scraping sein können, das eine interaktive und flexible Umgebung für die Datenextraktion und -analyse bietet. Wenn es jedoch darum geht, Ihre Web-Scraping-Aktivitäten zu skalieren oder Aufgaben zu automatisieren, sind Jupyter Notebooks möglicherweise nicht die effizienteste Lösung.

Hier kommen unsere Web Scraper ins Spiel. Ganz gleich, ob Sie als Entwickler nach API-basierten Lösungen oder nach einer Option ohne Code suchen, unsere Web Scraper sind so konzipiert, dass sie Ihre Datenerhebung vereinfachen und verbessern. Mit Funktionen wie dedizierten Endpunkten für mehr als 100 Domains, Massenanfrageverarbeitung, automatischer IP-Rotation und CAPTCHA-Auflösungkönnen strukturierte Daten mühelos und in großem Umfang extrahieren. Erstellen Sie noch heute ein kostenloses Bright Data-Konto, um unsere Scraping-Lösungen und unsere Proxys zu testen!

Keine Kreditkarte erforderlich