Text-Scraping: Ein Schritt-für-Schritt-Tutorial

Dieser Leitfaden behandelt Text-Scraping in Python, von der Einrichtung bis zur Datenspeicherung, mit Tipps zur Verwendung von Proxys, um IP-Sperren zu vermeiden.
13 min read
Text scraping tutorial blog image

Web-Scraping ist der Vorgang des Extrahierens von Daten von Websites. Da Daten viele Formen annehmen können, wird der Begriff Text-Scraping speziell für die Sammlung von Textdaten verwendet.

Eine große Menge an relevanten Daten ist für jede erfolgreiche Unternehmensentscheidung unerlässlich. Das Scrapen von Informationen von Websites von Mitbewerbern kann Ihnen einen Einblick in deren Geschäftslogik geben, was Ihnen einen Wettbewerbsvorteil verschaffen kann. In diesem Tutorial lernen Sie, wie man einen Text-Scraper in Python implementiert, um Webdaten einfach zu extrahieren und zu nutzen.

Voraussetzungen

Bevor Sie mit diesem Tutorial beginnen können, benötigen Sie die folgenden Voraussetzungen:

  • Die neueste Version von Python und pip ist auf Ihrem System installiert.
  • Eine virtuelle Python-Umgebung. Stellen Sie sicher, dass Sie alle erforderlichen Pakete in der virtuellen Umgebung installieren, einschließlich request , um den HTML-Inhalt einer Webseite abzurufen, Beautiful Soup , um den gewünschten Text oder die Daten von HTML zu analysieren und zu extrahieren, und pandas, um die extrahierten Daten zu organisieren und in einem strukturierten Format wie einer CSV-Datei zu speichern.

Wenn Sie nach weiteren Informationen suchen, die Ihnen den Einstieg in das Web-Scraping mit Python erleichtern, lesen Sie diesen Artikel.

Die Struktur der Website verstehen

Bevor Sie mit dem Scrapen beginnen, müssen Sie die Struktur der Website analysieren, auf die Sie abzielen. Websites werden mit HTML erstellt, einer Auszeichnungssprache, die definiert, wie der Inhalt organisiert und angezeigt wird.

Jeder Inhalt, sei es eine Überschrift, ein Absatz oder ein Link, wird von HTML-Tags umschlossen. Anhand dieser Tags können Sie feststellen, wo sich die Daten befinden, die Sie scrapen möchten. In diesem Beispiel scrapen Sie die Zitate aus Quotes to Scrape, einer Mock-Website. Um die Struktur dieser Website zu betrachten, müssen Sie die Website in Ihrem Browser öffnen und auf die Entwicklertools durch Rechtsklick auf die Seite und Auswahl von Inspect oder Inspect Element zugreifen. Dadurch wird der HTML-Code der Seite angezeigt:

Element in einem Webbrowser inspizieren

Nehmen Sie sich etwas Zeit, um sich mit der Struktur vertraut zu machen – achten Sie auf Tags wie <div><span><p>und <a> , da diese oft den Text oder die Links enthalten, die Sie extrahieren möchten. Beachten Sie auch, dass Tags in der Regel ein Attribut class enthalten. Ihr Zweck ist es, eine bestimmte Klasse für das HTML-Element zu definieren, so dass es mit CSS gestaltet oder mit JavaScript ausgewählt werden kann.

Hinweis: Das Attribut class  ist besonders nützlich beim Text-Scraping, da es Ihnen hilft, bestimmte Elemente auf einer Seite anzusteuern, die dasselbe Styling oder dieselbe Struktur haben, was es einfacher macht, genau die Daten zu extrahieren, die Sie brauchen.

Hier ist jedes Zitat in einem div-Element mit der Klasse quote enthalten. Wenn Sie sich für den Text und den Autor eines jeden Zitats interessieren, ist der Text in einem div mit der Klasse text und der Autor in einem small-Element mit der Klasse author enthalten :

HTML-Struktur eines Zitats

Wenn Sie nicht wissen, wie HTML funktioniert, lesen Sie diesen HTML-Web-Scraping-Artikel, um mehr zu erfahren.

Text-Scraping einer Website

Wenn Sie die Struktur der Website im Kopf haben, schreiben Sie als Nächstes den Code, den Sie zum Scrapen der Website Quotes to Scrape  nutzen.

Python ist aufgrund seiner Benutzerfreundlichkeit und seiner gewaltigen Bibliotheken, darunter requests und BeautifulSoup eine beliebte Wahl für diese Aufgabe. Sie verwenden die Bibliothek requests, um den HTML-Inhalt der Seite abzurufen. Dies ist notwendig, weil Sie die Rohdaten abrufen müssen, bevor Sie sie analysieren oder extrahieren können. Sobald Sie den HTML-Inhalt haben, können Sie ihn mit BeautifulSoup in eine handlichere Struktur aufteilen.

Erstellen Sie zunächst eine Python-Datei für das Text-Scraping-Skript mit dem Namen text-scraper.py. Dann importieren Sie BeautifulSoup und requests:

import requests
from bs4 import BeautifulSoup

Geben Sie die URL der Website an, die Sie scrapen möchten, und senden Sie eine GET-Request:

# URL of the quotes website
url = 'https://quotes.toscrape.com/'

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

Nach dem Senden der GET-Request erhalten Sie den HTML-Code einer ganzen Seite. Sie müssen sie parsen, um nur die Daten zu extrahieren, die Sie benötigen, d. h. in diesem Fall den Text und den Autor des jeweiligen Zitats. Dazu müssen Sie zunächst ein BeautifulSoup-Objekt erstellen, um das HTML zu parsen:

soup = BeautifulSoup(response.text, 'html.parser')

Finden Sie alle div-Elemente, die Anführungszeichen enthalten (d. h. sie sind von der Klasse quote):

quotes = soup.find_all('div', class_='quote')

Erstellen Sie eine Liste, in der die Zitate gespeichert werden:

data = []

Extrahieren Sie dann aus jedem Zitat den Text sowie den Autor und speichern Sie ihn in der data-Liste:

for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

Das Skript sollte in etwa so aussehen:

import requests
from bs4 import BeautifulSoup

# URL of the quotes website
url = 'http://quotes.toscrape.com/'

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

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

# Find all quote containers
quotes = soup.find_all('div', class_='quote')

# Extract data from each quote
data = []
for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

print(data)

Nun ist es an der Zeit, das Skript von Ihrem Terminal aus auszuführen:

# For Linux and macOS
python3 text-scraper.py

# For Windows
python text-scraper.py

Sie sollten eine Liste der extrahierten Zitate ausgedruckt bekommen:

[{'Author': 'Albert Einstein',
  'Text': '"The world as we have created it is a process of our thinking. It '
        'cannot be changed without changing our thinking."'},
 {'Author': 'J.K. Rowling',
  'Text': '"It is our choices, Harry, that show what we truly are, far more '
        'than our abilities."'},
 {'Author': 'Albert Einstein',
  'Text': '"There are only two ways to live your life. One is as though '
        'nothing is a miracle. The other is as though everything is a '
        'miracle."'},
 {'Author': 'Jane Austen',
  'Text': '"The person, be it gentleman or lady, who has not pleasure in a '
        'good novel, must be intolerably stupid."'},
 {'Author': 'Marilyn Monroe',
  'Text': ""Imperfection is beauty, madness is genius and it's better to be "
        'absolutely ridiculous than absolutely boring."'},
 {'Author': 'Albert Einstein',
  'Text': '"Try not to become a man of success. Rather become a man of '
        'value."'},
 {'Author': 'André Gide',
  'Text': '"It is better to be hated for what you are than to be loved for '
        'what you are not."'},
 {'Author': 'Thomas A. Edison',
  'Text': ""I have not failed. I've just found 10,000 ways that won't work.""},
 {'Author': 'Eleanor Roosevelt',
  'Text': '"A woman is like a tea bag; you never know how strong it is until '
        "it's in hot water.""},
 {'Author': 'Steve Martin',
  'Text': '"A day without sunshine is like, you know, night."'}]

Während dieses Text-Scraping ziemlich unkompliziert erscheint, werden Sie beim Web-Scraping wahrscheinlich auf Herausforderungen stoßen, wie z. B. IP-Sperre, wenn die Website zu viele Requests erkennt, oder CAPTCHAs, um automatisierten Zugriff zu verhindern. Um diese Herausforderungen zu überwinden, können Sie Proxys verwenden.

Verwendung von Proxys für anonymes Scraping

Proxys helfen Ihnen, IP-Sperren und CAPTCHAs zu vermeiden und zu umgehen, indem sie Ihre IP-Adresse rotieren und Ihre Requests so aussehen lassen, als kämen sie von verschiedenen Orten. Um Proxys zu verwenden, müssen Sie die Methode request.get() so konfigurieren, dass alle Requests über einen Proxy-Server geleitet werden.

In diesem Szenario verwenden Sie die Rotationsproxys von Bright Data, mit denen Sie Zugang zu mehr als 72 Millionen IP-Adressen aus über 195 Ländern haben. Um zu beginnen, erstellen Sie ein kostenloses Bright Data-Konto, indem Sie Kostenlose Testversion starten in der oberen rechten Ecke auswählen, das Registrierungsformular ausfüllen und auf Konto erstellen klicken:

Bright Data-Anmeldeformular

Erstellen eines einfachen Privatanwender-Proxys

Sobald Sie ein Bright Data-Konto haben, melden Sie sich an und navigieren Sie zum Abschnitt Proxys und Scraping. Unter dem Abschnitt Proxy-Netzwerke finden Sie Privatanwender-Proxys. Klicken Sie auf Starten:

Bright Data-Dashboard: Abschnitt **Proxies und Scraping**

Sie werden aufgefordert, eine neue Zone für den Privatanwender-Proxy hinzuzufügen. Behalten Sie alle Standardeinstellungen bei, benennen Sie die Zone und klicken Sie auf Hinzufügen:

Neuen Privatanwender-Proxy erstellen

Und das ist alles, was es braucht, um eine Privatanwender-Proxy-Zone zu erstellen!

Um den Proxy zu nutzen, benötigen Sie Ihre Anmeldedaten (d. h. Benutzername, Passwort und Host). Um diese Anmeldedaten zu finden, gehen Sie zu Proxys und Scraping und wählen Sie die soeben erstellte Proxy-Zone:

Liste der erstellten Proxy-Zonen

Nachdem Sie auf die Proxy-Zone geklickt haben, wird das Control-Panel der Zone angezeigt. Unter dem Abschnitt Autorisierung sehen Sie Ihre Anmeldedaten:

Bright Data-Proxy-Zone-Anmeldedaten

Update des Scraping-Skripts

Jetzt, da Sie Ihre Proxy-Anmeldedaten haben, können Sie den Proxy konfigurieren. Speichern Sie zunächst Ihre Anmeldedaten als Variablen:

host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<customer_id>-zone-<zone_name>'
password = '<zone_password>'

Stellen Sie dann aus den gespeicherten Anmeldedaten eine Proxy-URL zusammen:

proxy_url = f'http://{username}:{password}@{host}:{port}'

Erstellen Sie eine Proxy-Konfiguration sowohl für HTTP- als auch für HTTPS-Requests:

proxies = {
    'http': proxy_url,
    'https': proxy_url
}

Und fügen Sie die Proxy-Konfiguration zum bestehenden Aufruf requests.get() hinzu:

response = requests.get(url, proxies=proxies)

An diesem Punkt sollte Ihr Skript folgendermaßen aussehen:

import requests
from bs4 import BeautifulSoup

# BrightData credentials
host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<customer_id>-zone-<zone_name>'
password = '<zone_password>'

# Compose a proxy URL
proxy_url = f'http://{username}:{password}@{host}:{port}'

# Create a proxy configuration
proxies = {
    'http': proxy_url,
    'https': proxy_url
}

# URL of the quotes website
url = 'http://quotes.toscrape.com/'

# Send a GET request to the URL via the specified proxy
response = requests.get(url, proxies=proxies)

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

# Find all quote containers
quotes = soup.find_all('div', class_='quote')

# Extract data from each quote
data = []
for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

print(data)

Ausführen und Testen des Skripts

Wenn Sie dieses Skript ausführen, erhalten Sie das gleiche Ergebnis wie bei dem Skript ohne Proxys. Der Unterschied besteht darin, dass die Website, die Sie scrapen, nun denkt, dass Sie eine Request von einem anderen Ort aus senden, sodass Ihr tatsächlicher Standort vertraulich bleibt. Um dies zu veranschaulichen, schreiben wir ein neues einfaches Skript.

Importieren Sie die notwendigen Bibliotheken und setzen Sie die url auf "http://lumtest.com/myip.json" im Skript:

import requests
from bs4 import BeautifulSoup

url = "http://lumtest.com/myip.json"

Senden Sie eine GET-Request an die Url ohne Proxy-Konfiguration und erstellen Sie ein BeautifulSoup-Objekt für die Antwort:

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

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

Drucken Sie schließlich das Objekt soup:

print(soup)

Führen Sie dieses Skript aus. Sie erhalten dann als Antwort Informationen über Ihre IP-Adresse und Ihren Standort.

Zum Vergleich konfigurieren Sie die GET-Request so, dass ein Bright Data-Proxy verwendet wird, und lassen alles andere unverändert:

# BrightData credentials
host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-hl_459f8bd4-zone-test_residential_proxy'
password = '8sdgouh1dq5h'

proxy_url = f'http://{username}:{password}@{host}:{port}'

proxies = {
    'http': proxy_url,
    'https': proxy_url
}

# Send a GET request to the URL
response = requests.get(url, proxies=proxies)

Wenn Sie das aktualisierte Skript ausführen, sollten Sie sehen, dass Sie als Antwort eine andere IP-Adresse erhalten; das ist nicht Ihre tatsächliche IP, sondern die IP-Adresse eines von Ihnen eingerichteten Proxys. Im Wesentlichen verbergen Sie Ihre IP-Adresse hinter einem der Proxy-Server.

Speichern von Daten

Nachdem Sie erfolgreich Daten von einer Website gescrapt haben, müssen Sie sie in einem strukturierten Format speichern, das einen einfachen Zugriff und eine einfache Analyse ermöglicht. CSV ist dafür sehr beliebt, da es von vielen Datenanalysetools und Programmiersprachen unterstützt wird.

Um die gescrapten Daten in einer CSV-Datei zu speichern, importieren Sie zunächst die Bibliothek pandas (am Anfang des Scraping-Skripts), da sie über Methoden zur Konvertierung von Daten in das CSV-Format verfügt:

import pandas as pd

Erstellen Sie dann ein pandas-DataFrame-Objekt aus den gescrapten Daten:

df = pd.DataFrame(data)

Schließlich konvertieren Sie das DataFrame in eine CSV-Datei und geben ihr einen Namen (z. B. quotes.csv):

df.to_csv('quotes.csv', index=False)

Nachdem Sie diese Änderungen vorgenommen haben, führen Sie das Skript aus. Anschließend erhalten Sie die gescrapten Daten in der CSV-Datei.

In diesem einfachen Beispiel können Sie mit den Zitaten nicht viel anfangen. Je nachdem, welche Daten Sie scrapen, gibt es jedoch alle möglichen Möglichkeiten, sie zu analysieren, um Erkenntnisse zu gewinnen.

Sie könnten damit beginnen, deskriptive Statistiken mithilfe der pandas-Funktion describe() zu erkunden. Diese Funktion bietet einen schnellen Überblick über Ihre numerischen Daten, einschließlich Mittelwert, Median und Standardabweichung. Sie könnten Ihre Daten mit Matplotlib oder seaborn visualisieren, um Histogramme, Streudiagramme oder Balkendiagramme zu erstellen, die Ihnen helfen, Muster oder Trends zu erkennen. Bei Textdaten sollten Sie Techniken zur Verarbeitung natürlicher Sprache, wie z. B. die Analyse der Worthäufigkeit oder die Stimmungsanalyse, verwenden, um gemeinsame Themen oder die allgemeine Stimmung in Bewertungen oder Kommentaren zu verstehen.

Um tiefere Einblicke zu gewinnen, sollten Sie nach Korrelationen zwischen verschiedenen Variablen in Ihrem Datensatz suchen. Sie könnten zum Beispiel die Beziehung zwischen Buchbewertungen und der Länge der Rezensionen untersuchen, oder analysieren, wie sich die Bewertungen zwischen verschiedenen Genres oder Autoren unterscheiden. Verwenden Sie die pandas-Funktion groupby(), um Daten zu aggregieren und Metriken zwischen Kategorien zu vergleichen.

Vergessen Sie nicht, den Kontext Ihrer Daten und die Fragen, die Sie zu beantworten versuchen, zu berücksichtigen. Wenn Sie beispielsweise Buchrezensionen analysieren, können Sie untersuchen, welche Faktoren am meisten zu hohen Bewertungen beitragen, oder Trends in beliebten Genres im Zeitverlauf erkennen. Seien Sie stets kritisch gegenüber Ihren Ergebnissen und berücksichtigen Sie mögliche Verzerrungen bei der Datenerhebung.

Fazit

In diesem Tutorial haben Sie gelernt, wie man mit Python Text scrapen kann, die Vorteile der Verwendung von Proxys erkundet und entdeckt, wie die rotierenden Proxys von Bright Data dabei helfen können, IP-Sperren zu vermeiden und Anonymität zu wahren.

Die Entwicklung eigener Scraping-Lösungen kann zwar lohnenswert sein, bringt aber oft auch Herausforderungen mit sich, z. B. die Pflege des Codes, die Handhabung von CAPTCHAs und die Einhaltung von Website-Richtlinien. An dieser Stelle können die Scraping-APIs von Bright Data helfen. Mit Funktionen wie automatischer CAPTCHA-Auflösung, IP-Rotation und robustem Daten-Parsing vereinfacht Bright Data den Scraping-Prozess und ermöglicht es Ihnen, sich auf die Datenanalyse statt auf das Infrastrukturmanagement zu konzentrieren.

Melden Sie sich für eine kostenlose Testversion von Bright Data an, um zu sehen, wie Bright Data Ihre Web-Scraping-Projekte verbessern kann und Ihnen zuverlässige, skalierbare und effiziente Lösungen für die Datenerhebung in Ihrem Unternehmen bietet.

Keine Kreditkarte erforderlich