Web Scraping mit Python – Schritt-für-Schritt-Anleitung

Lernen Sie, Web Scraping mit Python durchzuführen, um schnell Daten von mehreren Websites zu sammeln und so Zeit und Mühe zu sparen.
22 min read
Web scraping with Python main blog image

Entdecken Sie die Kunst der schnellen Datenerfassung von verschiedenen Websites, indem Sie Web Scraping mit Python beherrschen. Sparen Sie Zeit und Mühe mit diesen wesentlichen Fähigkeiten!

Sehen Sie sich unser Tutorial zum Web-Scraping mit Python an

Beim Web Scraping geht es darum, Daten aus dem Web zu extrahieren. Ein Web Scraper ist ein Tool, das Web Scraping durchführt. Python gehört zu den einfachsten existierenden Skriptsprachen und verfügt über eine Vielzahl von Web-Scraping-Bibliotheken. Das macht sie zur perfekten Programmiersprache für Web Scraping. Python Web Scraping erfordert nur wenige Zeilen Code!

In diesem Tutorial lernen Sie Schritt für Schritt, wie Sie einen einfachen Python-Scraper erstellen. Diese Anwendung durchsucht eine gesamte Website, extrahiert Daten von jeder Seite und exportiert diese in eine CSV-Datei. In diesem Tutorial erfahren Sie, welche die besten Python-Bibliotheken für Data Scraping sind, welche Sie verwenden sollten und wie Sie sie einsetzen können. Folgen Sie diesem Tutorial Schritt für Schritt und lernen Sie, wie Sie ein Python-Skript zum Web Scraping erstellen.

Inhaltsangabe:

Voraussetzungen

Um einen Python-Web-Scraper zu erstellen, benötigen Sie die folgenden Voraussetzungen:

  • Python 3.4+
  • pip

Beachten Sie, dass pip standardmäßig in Python Version 3.4 oder höher enthalten ist. Sie müssen es also nicht manuell installieren. Falls Sie Python noch nicht auf Ihrem Computer installiert haben, befolgen Sie bitte die nachstehende Anleitung für Ihr Betriebssystem.

macOS

Früher war Python 2.7 auf Macs vorinstalliert, doch das ist nicht mehr der Fall. Diese Version ist inzwischen veraltet.

Wenn Sie mit der neuesten Version von Python arbeiten möchten, muss diese manuell installiert werden. Laden Sie dazu den Installer herunter, starten Sie ihn mit einem Doppelklick und führen Sie den Installationsassistenten aus.

Windows

Laden Sie den Python-Installer herunter und führen Sie ihn aus. Stellen Sie während der Ausführung des Installationsassistenten sicher, dass Sie das Kontrollkästchen „Add python.exe to PATH“ wie unten gezeigt aktivieren:

Installation von Python auf einem Computer
Das Installationsfenster von Python für Windows

Auf diese Weise erkennt Windows automatisch die Befehle python und pip im Terminal. Genauer betrachtet, ist pip ein Paketmanager für Python-Pakete.

Linux

Bei den meisten Linux-Distributionen ist Python bereits vorinstalliert, wobei es sich jedoch möglicherweise nicht um die neueste Version handelt. Der Befehl zum Installieren oder Aktualisieren von Python unter Linux variiert je nach Paketmanager. Bei Debian-basierten Linux-Distributionen führen Sie folgenden Befehl aus:


sudo apt-get install python3

Öffnen Sie unabhängig von Ihrem Betriebssystem das Terminal und stellen Sie sicher, dass Python erfolgreich installiert wurde:


python --version

Das Ergebnis sollte in etwa wie folgt aussehen:


Python 3.11.0

Sie sind nun bereit, Ihren ersten Python Web Scraper zu erstellen. Aber zuerst brauchen Sie eine Python Web Scraping Bibliothek!

Die besten Python-Bibliotheken für Web Scraping.

Sie können ein Web-Scraping-Skript von Grund auf mit Python Vanilla erstellen, aber das ist nicht die ideale Lösung. Python ist schließlich für seine breite Auswahl an Paketen bekannt – und es stehen zahlreiche Web-Scraping-Bibliotheken zur Verfügung. Werfen wir daher nun einen Blick auf die wichtigsten!

Requests

Mit der Requests-Bibliothek können Sie HTTP-Anfragen in Python ausführen. Im Vergleich zu den Standard-HTTP-Bibliotheken von Python erleichtert Requests das Senden von HTTP-Anfragen. Requests spielt in einem Python Web Scraping Projekt eine zentrale Rolle. Das liegt daran, dass Sie die in einer Webseite enthaltenen Daten, die gescrapt werden sollen, zunächst über einen HTTP-GET-Request abrufen müssen. Außerdem müssen Sie möglicherweise weitere HTTP-Anfragen an den Server der Zielwebsite stellen.  

Sie können Requests mit dem folgenden pip-Befehl installieren:

pip install requests

Beautiful Soup

Die Python-Bibliothek Beautiful Soup erleichtert das Sammeln von Informationen aus Webseiten. Beautiful Soup funktioniert mit jedem HTML- oder XML-Parser und bietet alles, was Sie zum Iterieren, Suchen und Ändern des Parsebaums benötigen. Beachten Sie, dass Sie Beautiful Soup mit html.parser verwenden können, dem Parser, der in der Python-Standardbibliothek enthalten ist und mit dem Sie HTML-Textdateien parsen können. Sie können Beautiful Soup verwenden, um das DOM zu durchlaufen und die benötigten Daten daraus zu extrahieren.

Sie können Beautiful Soup mit pip wie folgt installieren:

pip install beautifulsoup4

Selenium

Selenium ist ein fortschrittliches, automatisiertes Open-Source-Testframework, mit dem Sie Operationen auf einer Webseite in einem Browser ausführen können. Mit anderen Worten: Sie können Selenium verwenden, um einen Browser anzuweisen, bestimmte Aufgaben auszuführen. Beachten Sie, dass Sie Selenium aufgrund seiner Headless-Browser-Fähigkeiten auch als Web-Scraping-Bibliothek verwenden können. Falls Sie mit diesem Konzept nicht vertraut sind: Ein Headless Browser ist ein Webbrowser, der ohne eine grafische Benutzeroberfläche (GUI) läuft. Wenn Selenium im Headless-Modus konfiguriert ist, wird der gesteuerte Browser im Hintergrund ausgeführt.

Die in Selenium besuchten Webseiten werden in einem echten Browser gerendert. Daher unterstützt es das Scrapen von Webseiten, die beim Rendern oder Abrufen von Daten auf JavaScript angewiesen sind. Selenium stellt Ihnen alles zur Verfügung, was Sie brauchen, um einen Web Scraper ohne weitere Bibliotheken zu erstellen. Sie können es mit dem folgenden pip-Befehl installieren:  

pip install selenium

Erstellen eines Web Scrapers in Python

Im Folgenden lernen Sie, wie man einen Web Scraper in Python erstellt. So sieht die Zielwebsite aus:

Quotes to Scrape Seite gif
Eine allgemeine Übersicht über Quotes to Scrape

Dies ist die Website von Quotes to Scrape, einer Web-Scraping-Sandbox, die eine paginierte Liste mit Zitaten enthält.

Das Ziel dieses Tutorials besteht darin, zu lernen, wie man alle Zitate extrahiert. Für jedes Zitat werden Sie lernen, wie Sie den Text, den Autor und die Liste der Tags auslesen können. Anschließend werden die gescrapten Daten in CSV konvertiert.

Wie Sie sehen können, ist Quotes to Scrape nichts anderes als eine Testumgebung für Web Scraping. Sie enthält insbesondere eine paginierte Liste von Quotes. Der Python-Web-Scraper, den Sie erstellen werden, wird alle auf jeder Seite enthaltenen Quotes abrufen und sie als CSV-Daten zurückgeben.

Schritt 1: Auswahl der richtigen Python-Scraping-Bibliothek

Zuallererst sollten Sie wissen, welche Web-Scraping-Bibliotheken in Python zum Erreichen Ihres Ziels am besten geeignet sind. Besuchen Sie hierfür die Zielwebsite in Ihrem Website-Browser. Klicken Sie mit der rechten Maustaste auf den Hintergrund und wählen Sie „Untersuchen“. Daraufhin öffnet sich das DevTools-Browserfenster. Wechseln Sie zur Registerkarte Netzwerk und laden Sie die Seite neu.

Sie werden feststellen, dass die Zielwebsite keine Fetch/XHR-Anfrage durchführt.

Netzwerk-Registerkarte des Chrome DevTools-Fensters
Beachten Sie, dass der Abschnitt Fetch/XHR leer ist

Das bedeutet, dass Quotes to Scrape für den dynamischen Abruf von Daten nicht auf JavaScript angewiesen ist. Mit anderen Worten: Die vom Server zurückgegebenen Seiten enthalten bereits die gewünschten Daten. Dies ist bei Websites mit statischen Inhalten der Fall.

Da die Zielwebsite nicht auf JavaScript angewiesen ist, um die Seite zu rendern oder Daten abzurufen, brauchen Sie Selenium nicht, um sie zu scrapen. Sie können es trotzdem verwenden, doch möchten wir davon abraten: Der Grund dafür ist, dass Selenium Webseiten in einem Browser öffnet. Da dies Zeit und Ressourcen benötigt, führt Selenium einen Leistungs-Overhead ein. Sie können dies vermeiden, indem Sie Beautiful Soup zusammen mit Requests verwenden.

Nachdem Sie nun wissen, welche Python-Web-Scraping-Bibliotheken am besten geeignet sind, erklären wir Ihnen, wie Sie mit Beautiful Soup einen einfachen Scraper erstellen können!

Schritt 2: Initialisieren eines Python-Projekts

Bevor Sie mit dem Schreiben der ersten Codezeile beginnen, müssen Sie Ihr Python Web Scraping Projekt einrichten. Technisch gesehen brauchen Sie nur eine einzige .py-Datei. Die Verwendung einer fortgeschrittenen IDE (Integrated Development Environment) erleichtert Ihnen jedoch das Programmieren. Hier erfahren Sie, wie Sie ein Python-Projekt in PyCharm einrichten, aber auch jede andere Python IDE ist hierfür geeignet.  

Öffnen Sie PyCharm und wählen Sie „Datei > Neues Projekt…“. Im Popup-Fenster „Neues Projekt“ wählen Sie „Pure Python“ und erstellen Sie ein neues Projekt.

Erstellung eines neuen Projekts in PyCharm
Das PyCharm-Popup-Fenster „Neues Projekt“

Sie können Ihr Projekt zum Beispiel python-web-scraper nennen. Klicken Sie auf „Erstellen“. Sie haben nun Zugang zu Ihrem leeren Python-Projekt. Standardmäßig wird PyCharm eine Datei main.py initialisieren. Benennen Sie diese der Übersichtlichkeit halber in scraper.py um. So sieht Ihr Projekt dann aus:  

python-web-scraping Python-Projekt in PyCharm
Das python-web-scraping Python-Leerprojekt in PyCharm

Wie Sie sehen können, initialisiert PyCharm die Python-Datei automatisch mit einigen Codezeilen. Löschen Sie diese, um ganz von vorne zu beginnen.

Installieren Sie anschließend die Abhängigkeiten des Projekts. Sie können Requests und Beautiful Soup installieren, indem Sie den folgenden Befehl im Terminal aufrufen:

pip install requests beautifulsoup4

Damit werden die beiden Bibliotheken auf einmal installiert. Warten Sie, bis der Installationsprozess abgeschlossen ist. Jetzt können Sie Beautiful Soup und Requests verwenden, um Ihren Web Crawler und -Web Scraper in Python zu erstellen. Stellen Sie sicher, dass Sie die beiden Bibliotheken importieren, indem Sie die folgenden Zeilen am Anfang Ihrer scraper.py-Skriptdatei hinzufügen:  

import requests
from bs4 import BeautifulSoup

PyCharm zeigt diese beiden Zeilen in grau an, da die Bibliotheken im Code nicht verwendet werden. Wenn sie rot unterstrichen sind, bedeutet dies, dass bei der Installation etwas schief gelaufen ist. Versuchen Sie sie in diesem Fall erneut zu installieren.

Die Datei scraper.py
Die aktuelle Datei scraper.py

Klasse! Nun können Sie mit dem Schreiben der Python-Web-Scraping-Logik beginnen.

Schritt 2: Verbinden mit der Ziel-URL

Zuerst muss in einem Web Scraper eine Verbindung zu Ihrer Zielwebsite hergestellt werden. Rufen Sie zunächst die vollständige URL der Zielwebsite von Ihrem Webbrowser ab. Stellen Sie sicher, dass Sie auch http:// bzw. https:// kopieren. HTTP-Protokollabschnitt. In diesem Fall handelt es sich um die gesamte URL der Zielwebsite:

https://quotes.toscrape.com

Mit der folgenden Codezeile können Sie nun Anfragen zum Herunterladen einer Webseite verwenden:  

page = requests.get('https://quotes.toscrape.com')

Diese Zeile weist das Ergebnis einfach der Methode request.get() der variablen Seite zu. Im Hintergrund führt request.get() eine GET-Anforderung unter Verwendung der als Parameter übergebenen URL aus. Anschließend wird ein Response-Objekt zurückgegeben, das die Serverantwort auf die HTTP-Anfrage enthält.

Wenn die HTTP-Anfrage erfolgreich ausgeführt wurde, enthält page.status_code den Wert 200. Der HTTP-Statuscode 200 OK zeigt an, zeigt an, dass die HTTP-Anfrage erfolgreich ausgeführt wurde. Ein HTTP-Statuscode 4xx oder 5xx weist auf einen Fehler hin. Dafür kann es mehrere Gründe geben. Bedenken Sie jedoch, dass die meisten Websites Anfragen blockieren, die keinen gültigen User-Agent enthalten. Bei diesem speziellen Header handelt es sich um eine Zeichenfolge, die die Anwendung und die Version des Betriebssystems angibt, von der eine Anfrage stammt. Erfahren Sie mehr über User-Agents für Web Scraping.

Sie können einen gültigen User-Agent-Header in Anfragen wie folgt festlegen:


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}

page = requests.get('https://quotes.toscrape.com', headers=headers

Requests wird nun die HTTP-Anfrage mit den als Parameter übergebenen Headern ausführen.

Worauf Sie achten sollten, ist die Eigenschaft page.text. Diese enthält das vom Server zurückgegebene HTML-Dokument im String-Format. Geben Sie die text-Eigenschaft an Beautiful Soup weiter, um Daten aus der Web-Seite zu extrahieren. Hier erfahren Sie, wie das geht.  

Achten Sie unbedingt auf die Eigenschaft page.text. Diese enthält das vom Server zurückgegebene HTML-Dokument im String-Format. Geben Sie die text-Eigenschaft an Beautiful Soup weiter, um Daten aus der Webseite zu extrahieren. Hier erfahren Sie, wie das geht.

Schritt 3: Parsen des HTML-Dokuments

Zum Parsen des vom Server nach der GET-Anfrage zurückgegebenen HTML-Dokuments übergeben Sie page.text an den BeautifulSoup()-Konstruktor:

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

Der zweite Parameter gibt den Parser an, den Beautiful Soup verwenden wird.

Die Soup-Variable enthält nun ein BeautifulSoup-Objekt. Das ist eine Baumstruktur, die durch das Parsen des in page.text enthaltenen HTML-Dokuments mit dem in Python integrierten html.parser erzeugt wurde.

Nun können Sie damit das gewünschte HTML-Element auf der Seite auswählen. Schauen wir uns an, wie das geht!

Schritt 4: Auswahl von HTML-Elementen mit Beautiful Soup

Beautiful Soup bietet Ihnen für die Auswahl von Elementen aus dem DOM verschiedene Möglichkeiten. Die Ausgangspunkte sind folgende:

  • find(): Gibt das erste HTML-Element zurück, das der ggf. vorhandenen Eingabeselektor-Strategie entspricht.
  • find_all(): Gibt eine Liste von HTML-Elementen zurück, die der als Parameter übergebenen Selektorbedingung entsprechen.

Ausgehend von den an sie übergebenen Parametern suchen diese beiden Methoden auf unterschiedliche Weise nach Elementen auf der Seite. Sie können HTML-Elemente wie folgt auswählen:

  • Nach Tag:

# get all <h1> elements 
# on the page
h1_elements = soup.find_all('h1')
  • Nach ID:

# get the element with id="main-title"
main_title_element = soup.find(id='main-title')
  • Nach Text:

# find the footer element 
# based on the text it contains
footer_element = soup.find(text={'Powered by WordPress'})
  • Nach Attribut:

# find the email input element
# through its "name" attribute
email_element = soup.find(attrs={'name': 'email'})
  • Nach Klasse:

# find all the centered elements
# on the page
centered_element = soup.find_all(class_='text-center')

Durch die Verkettung dieser Methoden können Sie jedes HTML-Element aus der Seite extrahieren. Sehen Sie sich das unten stehende Beispiel an:


# get all "li" elements
# in the ".navbar" element
soup.find(class_='navbar').find_all('li')

Um das Ganze zu vereinfachen, verfügt Beautiful Soup auch über die Methode select(). Diese ermöglicht es Ihnen, einen CSS-Selektor direkt anzuwenden:


# get all "li" elements
# in the ".navbar" element
soup.select('.navbar > li')

Beachten Sie, dass XPath-Selektoren zum Zeitpunkt der Erstellung dieses Artikels nicht unterstützt werden.

Es ist wichtig zu wissen, dass Sie zum Extrahieren von Daten aus einer Webseite zunächst die HTML-Elemente ermitteln müssen, die Sie interessieren. Insbesondere ist eine Auswahlstrategie für die Elemente zu definieren, die die gewünschten auszulesenden Daten enthalten.

Dies können Sie mithilfe der Entwicklungswerkzeuge Ihres Browsers erreichen. Klicken Sie in Chrome mit der rechten Maustaste auf das gewünschte HTML-Element und wählen Sie „Untersuchen“. Wählen Sie hierfür in unserem Fall ein Zitat-Element.

Überprüfung des HTML-Elements des Quotes
Untersuchen des HTML-Elements „quote“ in Chrome DevTools

Das HTML-Element quote <div> wird durch die Klasse quote identifiziert, wie Sie hier sehen können. Dieses enthält:  

  1. Den Text des Quotes in einem HTML-Element <span>  
  2. Den Verfasser des Quotes in einem HTML-Element <small>
  3. Eine Liste von Tags in einem <div>-Element, die jeweils in einem <a>-HTML-Element enthalten sind  

Im Einzelnen können Sie diese Daten mit den folgenden CSS-Selektoren in .quote extrahieren:  

  1. .text
  2. .author
  3. .tags .tag

Schritt 5: Extrahieren von Daten aus den Elementen

Zunächst benötigen Sie eine Datenstruktur, in der die gescrapten Daten gespeichert werden. Initialisieren Sie daher eine Array-Variable.

quotes = []

Verwenden Sie anschließend soup, um die Zitat-Elemente aus dem DOM zu extrahieren, indem Sie den zuvor definierten CSS-Selektor .quote anwenden:

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

Die Methode find_all() gibt die Liste aller

-HTML-Elemente aus, die durch die Klasse quote gekennzeichnet sind. Iterieren Sie über die Zitatliste, um die Zitatdaten wie folgt abzurufen:


for quote_element in quote_elements:
    # extract the text of the quote
    text = quote_element.find('span', class_='text').text
    # extract the author of the quote
    author = quote_element.find('small', class_='author').text

    # extract the tag <a> HTML elements related to the quote
    tag_elements = quote_element.select('.tags .tag')

    # store the list of tag strings in a list
    tags = []
    for tag_element in tag_elements:
        tags.append(tag_element.text)

Die Methode find() von Beautiful Soup ruft das gewünschte einzelne HTML-Element ab. Da es sich bei den mit dem Zitat verknüpften Tag-Strings um mehr als einen handelt, sollten Sie sie in einer Liste speichern.

Dann können Sie die gescrapten Daten in ein Wörterbuch umwandeln und dieses wie folgt an die Zitatliste anhängen:  


quotes.append(
    {
        'text': text,
        'author': author,
        'tags': ', '.join(tags) # merge the tags into a "A, B, ..., Z" string
    }
)

Wenn Sie die Daten in einem strukturierten Wörterbuch speichern, sind sie leichter zugänglich und besser verständlich.

Klasse! Sie haben gerade gelernt, wie Sie alle Zitatdaten aus einer einzigen Seite extrahieren können. Denken Sie aber daran, dass die Zielwebsite aus mehreren Seiten besteht. Daher sehen wir uns nun an, wie Sie die gesamte Website crawlen können.

Schritt 6: Implementieren der Crawling-Logik

Am unteren Ende der Startseite finden Sie ein -HTML-Element „Next →“, das auf die nächste Seite weiterleitet. Dieses HTML-Element ist auf allen Seiten – außer auf der letzten – enthalten. Ein solches Szenario ist bei jeder paginierten Website üblich.

Das „Next“-Element

Wenn Sie dem Link in diesem HTML-Element folgen, können Sie problemlos durch die gesamte Website navigieren. Beginnen wir also mit der Startseite und sehen wir uns an, wie man die einzelnen Seiten der Zielwebsite durchläuft. Sie müssen nur nach dem

  • -HTML-Element .next suchen und den zur nächsten Seite führenden Link extrahieren.  
  • Sie können die Crawling-Logik wie folgt implementieren:

    # the URL of the home page of the target website
    base_url = 'https://quotes.toscrape.com'
    
    # retrieve the page and initializing soup...
    
    # get the "Next →" HTML element
    next_li_element = soup.find('li', class_='next')
    
    # if there is a next page to scrape
    while next_li_element is not None:
        next_page_relative_url = next_li_element.find('a', href=True)['href']
    
        # get the new page
        page = requests.get(base_url + next_page_relative_url, headers=headers)
    
        # parse the new page
        soup = BeautifulSoup(page.text, 'html.parser')
    
        # scraping logic...
    
        # look for the "Next →" HTML element in the new page
        next_li_element = soup.find('li', class_='next')

    Der „Wo-Zyklus“ durchläuft jede Seite, bis es keine nächste Seite mehr gibt. Insbesondere extrahiert er die relative URL der nächsten Seite und verwendet sie, um die URL der nächsten zu scrapenden Seite zu erstellen. Dann wird die nächste Seite heruntergeladen. Anschließend wird sie gescrapt und die Logik wird wiederholt.  

    Großartig! Jetzt wissen Sie, wie Sie eine ganze Website scrapen können. Nun bleibt nur noch zu lernen, wie man die extrahierten Daten in ein nützlicheres Format wie CSV konvertiert.

    Schritt 7: Extrahieren der gescrapten Daten in eine CSV-Datei

    Sehen wir uns an, wie man die Liste der Wörterbücher, die die gecrawlten Zitat-Daten enthalten, in eine CSV-Datei exportiert. Das erreichen Sie mit den folgenden Zeilen:

    import csv
    
    # scraping logic...
    
    # reading  the "quotes.csv" file and creating it
    # if not present
    csv_file = open('quotes.csv', 'w', encoding='utf-8', newline='')
    
    # initializing the writer object to insert data
    # in the CSV file
    writer = csv.writer(csv_file)
    
    # writing the header of the CSV file
    writer.writerow(['Text', 'Author', 'Tags'])
    
    # writing each row of the CSV
    for quote in quotes:
        writer.writerow(quote.values())
    
    # terminating the operation and releasing the resources
    csv_file.close()

    Dieses Schnipsel schreibt die in der Liste der Wörterbücher enthaltenen Zitat-Daten in eine quotes.csv-Datei. Beachten Sie, dass csv Teil der Python-Standardbibliothek ist. Sie können es also importieren und verwenden, ohne eine zusätzliche Abhängigkeit zu installieren.

    Konkret bedeutet dies, dass Sie einfach mit open() eine CSV-Datei erstellen müssen. Dann können Sie diese mit der Funktion writerow() aus dem Writer-Objekt der csv-Bibliothek ausfüllen. Dadurch wird jedes Zitat-Wörterbuch als CSV-formatierte Zeile geschrieben.

    Sie sind von Rohdaten einer Website zu halbstrukturierten Daten in einer CSV-Datei übergegangen. Der Prozess der Datenextraktion ist abgeschlossen, und Sie können nun einen Blick auf den gesamten Python Data Scraper werfen.

    Schritt 8: Alles zusammenfügen

    So sieht das komplette Python-Skript zum Daten-Scraping aus:

    import requests
    from bs4 import BeautifulSoup
    import csv
    
    def scrape_page(soup, quotes):
        # retrieving all the quote <div> HTML element on the page
        quote_elements = soup.find_all('div', class_='quote')
    
        # iterating over the list of quote elements
        # to extract the data of interest and store it
        # in quotes
        for quote_element in quote_elements:
            # extracting the text of the quote
            text = quote_element.find('span', class_='text').text
            # extracting the author of the quote
            author = quote_element.find('small', class_='author').text
    
            # extracting the tag <a> HTML elements related to the quote
            tag_elements = quote_element.find('div', class_='tags').find_all('a', class_='tag')
    
            # storing the list of tag strings in a list
            tags = []
            for tag_element in tag_elements:
                tags.append(tag_element.text)
    
            # appending a dictionary containing the quote data
            # in a new format in the quote list
            quotes.append(
                {
                    'text': text,
                    'author': author,
                    'tags': ', '.join(tags)  # merging the tags into a "A, B, ..., Z" string
                }
            )
    
    # the url of the home page of the target website
    base_url = 'https://quotes.toscrape.com'
    
    # defining the User-Agent header to use in the GET request below
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
    }
    
    # retrieving the target web page
    page = requests.get(base_url, headers=headers)
    
    # parsing the target web page with Beautiful Soup
    soup = BeautifulSoup(page.text, 'html.parser')
    
    # initializing the variable that will contain
    # the list of all quote data
    quotes = []
    
    # scraping the home page
    scrape_page(soup, quotes)
    
    # getting the "Next →" HTML element
    next_li_element = soup.find('li', class_='next')
    
    # if there is a next page to scrape
    while next_li_element is not None:
        next_page_relative_url = next_li_element.find('a', href=True)['href']
    
        # getting the new page
        page = requests.get(base_url + next_page_relative_url, headers=headers)
    
        # parsing the new page
        soup = BeautifulSoup(page.text, 'html.parser')
    
        # scraping the new page
        scrape_page(soup, quotes)
    
        # looking for the "Next →" HTML element in the new page
        next_li_element = soup.find('li', class_='next')
    
    # reading  the "quotes.csv" file and creating it
    # if not present
    csv_file = open('quotes.csv', 'w', encoding='utf-8', newline='')
    
    # initializing the writer object to insert data
    # in the CSV file
    writer = csv.writer(csv_file)
    
    # writing the header of the CSV file
    writer.writerow(['Text', 'Author', 'Tags'])
    
    # writing each row of the CSV
    for quote in quotes:
        writer.writerow(quote.values())
    
    # terminating the operation and releasing the resources
    csv_file.close()

    Wie Sie hier gelernt haben, können Sie in weniger als 100 Zeilen Code einen Web Scraper erstellen. Dieses Python-Skript ist in der Lage, eine ganze Website zu crawlen, automatisch alle Daten zu extrahieren und diese in eine CSV-Datei zu exportieren.

    Herzlichen Glückwunsch! Sie haben gerade gelernt, wie man mithilfe der Bibliotheken Requests und Beautiful Soup einen Python Web Scraper erstellt!

    Schritt 9: Ausführen des Python Web-Scraping-Skripts

    Wenn Sie ein PyCharm-Benutzer sind, führen Sie das Skript aus, indem Sie auf die Schaltfläche unten klicken:

    Schaltfläche „Ausführen“ in PyCharm
    Die PyCharm-Schaltfläche „Ausführen“

    Andernfalls starten Sie den folgenden Python-Befehl im Terminal innerhalb des Projektverzeichnisses:

    python scraper.py

    Warten Sie, bis der Prozess beendet ist. Sie haben nun Zugriff auf eine quotes.csv-Datei. Öffnen Sie die Datei. Sie sollte die folgenden Daten enthalten:  

    Die extrahierte quotes.csv-Datei
    Die quotes.csv-Datei

    Et voilà! Nun haben Sie alle 100 Zitate, die in der Zielwebsite enthalten sind, in einer einzigen, leicht lesbaren Datei!

    Fazit

    In diesem Tutorial haben Sie gelernt, wie Web Scraping mit Python funktioniert, was Sie für den Einstieg in Python brauchen und welches die besten Python-Bibliotheken zum Web Scraping sind. Dann haben Sie gesehen, wie man Beautiful Soup und Requests verwendet, um eine Web-Scraping-Anwendung anhand eines realen Beispiels zu erstellen. Wie Sie wissen, sind für Web Scraping in Python nur ein paar Zeilen Code erforderlich.

    Web Scraping ist jedoch mit einigen Herausforderungen verbunden. Insbesondere Anti-Bot- und Anti-Scraping-Technologien werden immer beliebter. Aus diesem Grund benötigen Sie ein fortschrittliches Web-Scraping-Tool, das von Bright Data bereitgestellt wird.

    Ein Proxy-Server fungiert als Vermittler zwischen Ihrem Scraping-Skript in X und den Zielwebseiten. Er empfängt Ihre Anfragen, leitet sie an den Zielserver weiter, empfängt die Antworten und sendet sie an Sie zurück. Auf diese Weise sieht die Zielwebsite ihre IP-Adressen und nicht die Ihren. Das bedeutet, dass Ihre IP verborgen bleibt, um ihren Ruf zu bewahren und Ihre Privatsphäre zu schützen, und um Sperren und geografische Beschränkungen zu vermeiden. Dank rotierender Proxies können Sie bei jeder Anfrage frische IPs erhalten, um sogar Systeme mit Ratenbegrenzung zu umgehen.

    Es bleibt nur noch, einen zuverlässigen Anbieter auszuwählen, der Ihnen Zugang zu erstklassigen Proxy-Servern mit seriösen IP-Adressen bieten kann. Bright Data ist der weltweit beliebteste Proxy-Anbieter und bedient Dutzende von Fortune-500-Unternehmen sowie über 20.000 Kunden. Sein weltweites Proxy-Netzwerk umfasst:

    FAQ

    Is Python a good language for web scraping?

    Python is not only a good choice for web scraping, it is actually considered one of the best languages for that. This is because of its readability and low learning curve. On top of that, it comes with of the largest communities in the IT world and a wide selection of libraries and tools designed for web scraping.

    Is web scraping and crawling a part of data science?

    Yes, web scraping and crawling are part of the greater field of data science. Scraping/crawling serves as the foundation for all other by-products that can be derived from structured, and unstructured data. This includes analytics, algorithmic models/output, insights, and ‘applicable knowledge’. 

    How do you scrape specific data from a website in Python?

    Scraping data from a website using Python entails inspecting the page of your target URL, identifying the data you would like to extract, writing and running the data extraction code, and finally storing the data in your desired format.

    How do you build a web scraper with Python?

    The first step to building a Python data scraper is utilizing string methods in order to parse website data, then parsing website data using an HTML parser, and finally interacting with necessary forms and website components.