Startseite BlogWeb-Scraping Die 8 besten Python-Bibliotheken und -Tools für Web Scraping im Jahr 2023

Die 8 besten Python-Bibliotheken und -Tools für Web Scraping im Jahr 2023

von Kadek

Python ist eine der am häufigsten verwendeten Programmiersprachen für Scraping, Data Science und maschinelles Lernen. Da sie recht einfach zu erlernen ist, ist sie auch für diejenigen geeignet, die noch nie programmiert haben.

Python verfügt über eine Reihe von Bibliotheken für Data Scraping, mit denen Sie das Schreiben von Skripten vereinfachen können. Wir haben bereits einen einführenden Artikel zu diesem Thema verfasst, aber heute werden wir acht der besten Python-Bibliotheken für Web Scraping genauer vorstellen.

Um zu verstehen, welche der untersuchten Bibliotheken am beliebtesten ist, haben wir die Download-Statistiken für einige der beliebtesten Python-Bibliotheken für Web Scraping der letzten drei Jahre gesammelt. Durch die Analyse dieser Trends erhalten wir Einblicke in die sich entwickelnden Bedürfnisse von Web Scraping-Entwicklern und wie sie ihre bevorzugten Bibliotheken auswählen.

Die Grafik zeigt, dass Requests und UrlLib3 deutlich mehr Downloads haben als andere Python-Bibliotheken für Web Scraping. Das liegt nicht nur an ihrer Beliebtheit bei Web-Scraping-Projekten, sondern auch daran, dass sie häufig in vielen anderen Python-Projekten verwendet werden, bei denen es um die Interaktion mit Websites geht. Insbesondere Requests ist eine weit verbreitete HTTP-Bibliothek für Python und wird häufig für API-Anfragen und webbasierte Anwendungen verwendet. UrlLib3 hingegen ist eine leistungsstarke Bibliothek für den Umgang mit URLs und wird häufig für das Parsen, Lesen und Öffnen von URLs verwendet.

Es ist interessant festzustellen, dass je beliebter eine Bibliothek ist, desto einfacher ist sie und desto weniger Funktionalität hat sie. Das könnte daran liegen, dass einfachere Bibliotheken eine niedrigere Einstiegshürde bieten, so dass auch Entwickler mit weniger Erfahrung schnell einsteigen können. Außerdem sind die komplexeren Bibliotheken auf größere Projekte ausgerichtet und erfordern mehr technisches Wissen, um sie effektiv zu nutzen. Das bedeutet, dass diejenigen, die die zusätzlichen Funktionen oder die Leistung dieser Tools nicht benötigen, sich stattdessen für einfachere Lösungen entscheiden.

TOP 8 Python Bibliotheken für Web Scraping

Hier sind die besten Python-Bibliotheken und -Frameworks für Web Scraping, mit denen Sie Daten aus Websites extrahieren können.

UrlLib3

UrlLib3 ist eine Python-Bibliothek für die Arbeit mit Abfragen. Sie verfügt über einen recht umfangreichen Funktionsumfang und unterstützt eine Reihe von Funktionen für die Arbeit mit Abfragen.

Vorteile

UrlLib3 ist eine leistungsstarke Abfragebibliothek. Sie hat viele Vorteile, wie z.B.:

  1. Organisation und Unterstützung von sicheren Streams.
  2. Überprüfung von SSL / TLS auf der Client-Seite.
  3. Unterstützung von Verbindungspools.
  4. Erstellen von wiederholten Abfragen.
  5. Proxy für HTTP und SOCKS.

Aus diesem Grund wurde die Bibliothek schnell zu einer der beliebtesten und meistgenutzten in Python.

Benachteiligungen

Trotz der Vorteile hat UrlLib leider auch eine Reihe von Nachteilen:

  1. Sie weiß nicht, wie man Daten verarbeitet, und ist daher als unabhängige Bibliothek nicht zum Scraping geeignet.
  2. Im Vergleich zu den Requests ist die Bibliothek nicht benutzerfreundlich.
  3. Der urllib3-Verbindungspool erschwert die Arbeit mit Cookies, da es sich nicht um einen Client mit Statusverfolgung handelt.

Verwendung

Die UrlLib-Bibliothek wird verwendet, um Abfragen zu bearbeiten und Daten zu empfangen und zu übertragen. Funktioniert gut mit Proxy.

Um zu verstehen, wie man es zum Scrapen verwendet, lassen Sie uns einen einfachen Scraper schreiben.

Installation der UrlLib3-Bibliothek

Installieren Sie die Bibliothek, indem Sie den folgenden Befehl in der Kommandozeile ausführen:

pip install urllib3

Wenn die Installation erfolgreich war, erscheint die folgende Meldung:

C:\Users\user>pip install urllib3
Collecting urllib3
  Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
     ---------------------------------------- 140.9/140.9 kB 832.1 kB/s eta 0:00:00
Installing collected packages: urllib3
Successfully installed urllib3-1.26.15

Wenn Sie auf Schwierigkeiten stoßen, stellen Sie sicher, dass der Python-Interpreter installiert ist. Geben Sie dazu in der Befehlszeile den Befehl:

python -V

Wenn die Version des Interpreters angezeigt wird, ist dies nicht das Problem. In diesem Fall sollten Sie den Hinweisen aus der Fehlermeldung folgen.

Verwendung der Bibliothek UrlLib3

Um die UrlLib3-Bibliothek zu verwenden, muss sie in eine Skriptdatei aufgenommen werden. Erstellen Sie dazu eine Datei mit einem beliebigen Namen und der Erweiterung *.py und fügen Sie die erste Codezeile ein:

import urllib3

Nun, da die Bibliothek installiert und verbunden ist, lassen Sie uns eine Anfrage starten, um den Code der Website-Seite abzurufen. Zur Überprüfung und zum Testen werden wir die Anfragen an https://example.com/ verwenden.

Erstellen Sie einen Verbindungsmanager und speichern Sie ihn in der Variable http:

http = urllib3.PoolManager()

Dieser Teil des Codes ermöglicht eine Verbindung zur Website und den Abruf von Daten. Die Anfrage selbst wird in einer einzigen Zeile ausgeführt und besteht aus zwei Teilen: der Anfragemethode und dem Link, zu dem die Anfrage ausgeführt werden soll:

resp = http.request('GET', 'https://example.com')

Das Ergebnis der Abfrage wird in der Variablen bzw. gespeichert. Um das Abfrageergebnis zu sehen, lassen Sie es sich auf dem Bildschirm anzeigen:

print(resp.data)

Ein solcher Befehl druckt das Ergebnis so aus, wie es empfangen wurde, d.h. in einer Zeile:

D:\scripts>urllib3_test.py

b'<!doctype html>\n<html>\n<head>\n    <title>Beispiel Domain</title>\n\n    <meta charset="utf-8" />\n    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />\n    <meta name="viewport" content="width=device-width, initial-scale=1" />\n    <style type="text/css">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Beispiel Domain</h1>\n    <p>Diese Domain ist zur Verwendung in illustrativen Beispielen in Dokumenten bestimmt. Sie können diese Domain in der Literatur verwenden, ohne sie vorher abzustimmen oder um Erlaubnis zu fragen.</p>\n    <p><a href="https://www.iana.org/domains/example">Mehr Informationen...</a></p>\n</div>\n</body>\n</html>\n'

Um den resultierenden Code der Seite in einer geeigneten Form auszugeben, muss er dekodiert werden:

print(resp.data.decode('utf-8'))

Das Ergebnis einer solchen Abfrage:

D:\scripts&gt;urllib3_test.py
<!doctype html>
<html>
<head>
    <title>Beispiel Domain</title>
      ...
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            Breite: auto;
        }
    }
    </style>
</head>
<body>
<div>
    <h1>Beispiel Domain</h1>
    <p>Diese Domain ist zur Verwendung in illustrativen Beispielen in Dokumenten bestimmt. Sie können diese Domain in der Literatur verwenden, ohne sie vorher abzustimmen oder um Erlaubnis zu fragen.</p>
    <p><a href="https://www.iana.org/domains/example">Mehr Informationen...</a></p>
</div>
</body>
</html>

Der Skriptcode:

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'https://example.com')
print(resp.data.decode('utf-8'))

Als nächstes verarbeiten wir den resultierenden Code, um nur nützliche Daten zu extrahieren. Verwenden Sie dazu spezielle Bibliotheken oder verwenden Sie reguläre Ausdrücke.

In Anbetracht der Tatsache, dass reguläre Ausdrücke universeller sind und dass wir später spezielle Bibliotheken verwenden werden, lassen Sie uns die Datenverarbeitung mit regulären Ausdrücken betrachten.

Datenverarbeitung mit regulären Ausdrücken

Die RE-Bibliothek wird für die Arbeit mit regulären Ausdrücken verwendet. Sie ist vorinstalliert. Das heißt, sie muss nicht zusätzlich über pip install installiert werden. Es reicht aus, sie in die Skriptdatei selbst zu importieren.

import re

Nehmen wir an, wir müssen alle Kopfzeilen finden. In diesem Fall befinden sie sich im h1-Tag. Um sie per Code zu finden, können Sie Folgendes anwenden:

re.findall(r'<h1>(.+?)</h1>', Daten)

Skriptergebnis:

['Example Domain']

Vollständiger Skriptcode:

urllib3 importieren
importieren re
http = urllib3.PoolManager()
resp = http.request('GET', 'https://example.com')
data = resp.data.decode('utf-8')
print(re.findall(r'<h1>(.+?)</h1>', data))

Um Daten aus anderen Tags oder z.B. den Inhalt von Tags zu erhalten, können auch reguläre Ausdrücke verwendet werden.

Anfragen

Die nächste beliebte Bibliothek ist Requests. Diese Bibliothek wird, wie die vorherige, ebenfalls für die Ausführung von Abfragen verwendet. Sie ist jedoch einfacher und leichter zu verwenden. Darüber hinaus ist sie vorinstalliert und muss nicht installiert werden.

Vorteile

Die Requests-Bibliothek ist wie UrlLib3 für die Durchführung verschiedener Abfragen konzipiert und hat ebenfalls eine Reihe von Vorteilen:

  1. Es basiert auf urllib3 und httplib und verfügt daher über alle deren Funktionen.
  2. Erheblich einfacher zu benutzen als UrlLib3.
  3. Unterstützt HEAD, POST, PUT, PATCH und DELETE Anfragen.
  4. Fügt automatisch Abfragezeichenfolgen zu Adressen hinzu und kodiert POST-Daten.

Zusätzlich zu den oben genannten Vorteilen ist die Bibliothek auch benutzerfreundlich, hat eine sehr große Community und ist mit klaren Beispielen gut dokumentiert.

Benachteiligungen

Leider hat diese Bibliothek auch Nachteile:

  1. Es kann keine Datenverarbeitung durchführen und ist daher als eigenständige Lösung für das Scraping nicht sehr geeignet.
  2. Es handelt sich um eine synchrone Bibliothek. Das heißt, das gesamte Programm wird vor der Abfrage und der Antwort blockiert.

Das Problem des Synchronismus und der fehlenden Datenverarbeitung kann jedoch durch die Anbindung zusätzlicher Bibliotheken gelöst werden.

Verwendung

Die Requests-Bibliothek wurde entwickelt, um Python-Abfragen zu vereinfachen. Sie eignet sich daher gut für Scraping, wenn Sie den Code der gesamten Seite erhalten möchten.

Installieren der Anforderungsbibliothek

Falls sie gelöscht wurde, können Sie sie mit dem Befehl neu installieren:

pip install requests

Jetzt ist die Bibliothek einsatzbereit.

Verwendung der Anforderungsbibliothek

Diese HTTP-Bibliothek unterstützt, wie die vorherige, zwei Arten von Abfragen: Get und Post. Get-Anfragen werden verwendet, um Daten von der Website abzurufen, und Post-Anfragen werden verwendet, um Daten zu senden. Schauen wir uns nun unser Tutorial an.

Erstellen Sie dazu eine Datei mit der Erweiterung *.py und importieren Sie die requests-Bibliothek:

import requests

Lassen Sie uns zunächst die Daten mit der Methode Get abrufen. Anders als bei der vorherigen Bibliothek reicht dafür eine Zeile aus:

print(requests.get('https://example.com').text)

Ergebnis der Ausführung:

D:\scripts&gt;anfragen_test.py
<!doctype html>
<html>
<head>
    <title>Beispiel Domain</title>
    <style>
…
    </style>
</head>
<body>
<div>
    <h1>Beispiel Domain</h1>
    <p>Diese Domain ist zur Verwendung in illustrativen Beispielen in Dokumenten bestimmt. Sie können diese Domain in der Literatur verwenden, ohne sie vorher abzustimmen oder um Erlaubnis zu fragen.</p>
    <p><a href="https://www.iana.org/domains/example">Mehr Informationen...</a></p>
</div>
</body>
</html>

Wenn Sie diese Bibliothek verwenden, müssen Sie das Ergebnis weder dekodieren noch kodieren - es wird in einer praktischen Form gespeichert. Skript-Code:

import requests
print(requests.get('https://example.com').text)

Leider können Sie mit dieser Bibliothek nur vorgegebene Daten empfangen oder senden, so dass Sie sie anschließend selbst verarbeiten müssen. Aber wie wir bereits gesagt haben, sind reguläre Ausdrücke ein universelles Werkzeug, so dass wir die Bibliothek für reguläre Ausdrücke erneut verwenden werden.

Datenverarbeitung mit regulären Ausdrücken

Wir haben bereits Kopfdaten auf der Seite erhalten, also holen wir uns diesmal den Link, der in der Datei <a> Tag:

re.findall(r'<a\shref=\S(.+?)\S>', data)

Hier haben wir spezielle reguläre Ausdrucksmuster verwendet, nämlich "\S" und "\s". Sie werden benötigt, um ein bestimmtes Zeichen zu kodieren. In diesem Fall ersetzt \S ein Zeichen (Anführungszeichen) und \s ersetzt ein Leerzeichen.

Als Ergebnis der Skriptausführung erhielten wir einen Link, der im Tag gespeichert wurde <a>:

D:\scripts>requests_test.py

['https://www.iana.org/domains/example']

Skript-Code:

import requests
import re
data = requests.get('https://example.com').text
print(re.findall(r'<a\shref=\S(.+?)\S>', data))

Wie Sie aus dem Code ersehen können, ist die Anfragen-Bibliothek sehr bequem und funktionell. Die Verwendung regulärer Ausdrücke ist jedoch nicht immer komfortabel und die Anbindung zusätzlicher Bibliotheken für die Verwendung von CSS-Selektoren kann recht schwierig und ressourcenintensiv sein.

Lesen Sie auch HWie Sie cURL in Python verwenden

In diesem Fall können Sie die Requests-Bibliothek und spezielle Tools für das Scraping verwenden, die die Funktionen übernehmen, die normalerweise von speziellen Bibliotheken ausgeführt werden. Nehmen wir unsere Web Scraping API als Beispiel.

Um sie zu nutzen, müssen Sie sich registrieren und den API-Schlüssel Ihres Kontos kopieren. Sie werden ihn etwas später benötigen. Um mit der Ressource zu arbeiten, benötigen wir die POST-Methode:

import requests
import json
 
url = "https://api.scrape-it.cloud//scrape"
payload = json.dumps({
    "extract_rules": {
        "title": "h1"
    },
    "url": "example.com"
})
headers = {
  'x-api-key': 'YOUR-API-KEY',
  'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

Es reicht aus, Ihre Regeln in extraction_rules zu konfigurieren, die erforderliche URL anzugeben und Ihren API-Schlüssel einzugeben, damit es funktioniert.

Scrape-It.Cloud

Scrape-It.Cloud SDK ist eine Bibliothek, die eine Reihe von vorgefertigten Funktionen und Methoden bereitstellt, die einfach in Ihren Python-Code integriert werden können und Ihnen den Zugriff auf und die Interaktion mit unserer Web Scraping API ermöglichen. Es ist eine optimale Lösung, um sich vor Blockaden zu schützen, Captchas zu lösen und Probleme bei der Beschaffung von JavaScript-Daten zu lösen.

Vorteile

Da diese Bibliothek mit der Web Scraping API arbeitet, hat sie mehrere Vorteile:

  1. Es hat eine einfache Syntax, die auch Anfänger verwenden können.
  2. Es erlaubt die Verwendung von Proxys (privat und im Rechenzentrum).
  3. Es scannt dynamische Websites, die JavaScript verwenden.
  4. Es parst Daten aus jeder Struktur gut.

Die Bibliothek verfügt über viele zusätzliche Einstellungen und Funktionen, die in der offiziellen Dokumentation ausführlich beschrieben werden.

Benachteiligungen

Sie hat einen Nachteil:

  1. Die gescrapten Daten liegen im JSON-Format vor, so dass eine zusätzliche Verarbeitung erforderlich ist, um mit ihnen zu arbeiten.

Dieser Nachteil lässt sich leicht beheben, indem Sie die zusätzliche integrierte JSON-Bibliothek einbinden.

Verwendung

Die Scrape-It.Cloud-Bibliothek ist für das Scrapen von Daten konzipiert. Sie hilft Ihnen, jede beliebige Website zu scrapen, auch wenn Ihre IP blockiert ist. Sie eignet sich sowohl zum Ausführen von Anfragen als auch zum Abrufen bestimmter Daten von einer Seite.

Installation der Scrape-It.Cloud Bibliothek

Sie können die Bibliothek über pip install installieren:

pip install scrapeit-cloud

Wir empfehlen auch die Installation der Bibliotheken für das Scraping von Google Maps und Google SERP, die wir ebenfalls berücksichtigen werden:

pip install google-serp-api
pip install sc-google-maps-api

Um diese Bibliotheken zu nutzen, benötigen wir einen API-Schlüssel, den Sie nach der Anmeldung bei scrape-it.cloud in Ihrem persönlichen Konto finden. Danach können Sie beginnen, einen Scraper zu erstellen.

Scrape-It.Cloud Bibliothek verwenden

Erstellen Sie eine Datei mit der Erweiterung *.py und binden Sie die Bibliotheken ein:

from scrapeit_cloud import ScrapeitCloudClient
import json

Geben Sie nun Ihren API-Schlüssel ein:

client = ScrapeitCloudClient(api_key='YOUR_API_KEY')
Let’s get the code of the page and display the result:
response = client.scrape(
    params={
        "url": "https://quotes.toscrape.com/"
    }
)
print(response.text)

Prüfen Sie das Ergebnis:

D:\scripts&gt;scrape_test.py

{"status": "ok", "scrapingResult":{"content":"<!DOCTYPE html><html lang="\"en\""><head>\n\t<meta charset="\"UTF-8\"">\n\t<title>Zitate zum Kratzen</title>\n    <link rel="\"stylesheet\"" href="\"/static/bootstrap.min.css\"">\n    <link rel="\"stylesheet\"" href="\"/static/main.css\"">\n</head>\n<body>\n    <div class="\"container\"">\n        <div class="\"row" header-box\">\n            <div class="\"col-md-8\"">\n                <h1>\n                    <a href="/de/\"/\"/" style="\"text-decoration:" none\">Zitate zum Kratzen</a>\n                </h1>\n            </div>\n            <div class="\"col-md-4\"">\n                <p>\n \n                    <a href="/de/\"/login\"/">Anmeldung</a>\n \n                </p>\n ...   </>}}

Wie bereits gesagt, gibt die Bibliothek JSON-Code zurück und wenn Sie auf die Struktur achten, befindet sie sich in diesem Fall im Parameter "content". Lassen Sie uns die JSON-Bibliothek importieren und nur den Inhalt dieses Parameters ausgeben:

data = json.loads(response.text)
result = data["scrapingResult"]["content"]
print(result)

Das Ergebnis:

D:\scripts&gt;scrape_test.py
<!DOCTYPE html><html lang="en"><head>
        <meta charset="UTF-8">
        <title>Zitate zum Kratzen</title>
    <link rel="stylesheet" href="https://scrape-it.cloud/static/bootstrap.min.css">
    <link rel="stylesheet" href="http://scrape-it.cloud/static/main.css">
</head>
<body>
    <div class="container">
        <div class="row header-box">
            ...
</html>

Skript-Code:

from scrapeit_cloud import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR-API-KEY')
response = client.scrape(
    params={
        "url": "https://quotes.toscrape.com/"
    }
)
data = json.loads(response.text)
result = data["scrapingResult"]["content"]
print(result)

Jetzt sind die Daten genau so, wie wir sie haben wollten.

Datenverarbeitung mit Scrape-It.Cloud Bibliothek

Es gibt zusätzliche Bibliotheken für das Scraping von Ressourcen wie Google Maps oder Google SERPs. Sehen wir uns Beispiele an, wie Sie diese verwenden können.

Die grundlegenden Elemente der Arbeit mit Bibliotheken sind die gleichen und unterscheiden sich nicht von der Scrape-It.Cloud-Bibliothek. Ihr einziger Unterschied ist, dass sie zusätzliche Parameter haben.

Für das Scraping von Google-Suchergebnissen können Sie zum Beispiel Folgendes verwenden:

from google_serp_api import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR_API_KEY') 
response = client.scrape(
    params={
        "keyword": "pizza",
        "country": "US",
        "num_results": 10,
        "domain": "com"
    }
)
data = json.loads(response.text)
print (data)

Um Daten von Google Maps zu erhalten:

from sc_google_maps_api import ScrapeitCloudClient
import json
client = ScrapeitCloudClient(api_key='YOUR_API_KEY')
response = client.scrape(
    params={
        "keyword": "plumber in new york",
        "country": "US",
        "domain": "com"
    }
)
data = json.loads(response.text)
print (data)

Ergebnis:

D:\scripts>scrape_test.py

{'status': 'ok', 'scrapingResult': {'pagination': {'start': 0}, 'locals': [{'position': 1, 'title': 'RR Plumbing Roto-Rooter', 'phone': '+1 212-687-1215', 'address': '450 7th Ave Ste B, New York, NY 10123, United States', 'website': 'https://www.rotorooter.com/manhattan/', 'workingHours': {'timezone': 'America/New_York', 'days': [{'day': 'Wednesday', 'time': 'Open 24 hours'}

Mit diesen Bibliotheken wird das Scraping auch für Anfänger einfach genug sein.

LXML

Lxml ist eine Bibliothek zum Parsen und Verarbeiten von HTML- und XML-Strukturen. Sie ist schnell und funktional genug, kann aber selbst keine GET-Anfragen stellen. Sie benötigen also eine zusätzliche Bibliothek, wie z.B. Requests, um Abfragen durchzuführen.

Vorteile

Zu den Vorteilen von Lxml gehören die folgenden:

  1. Schnelligkeit der Bedienung.
  2. Für gute Arbeit ist es egal, wie gut die Struktur einer Website ist.
  3. Unterstützung für XSLT-Transformationen.
  4. Funktioniert genauso gut mit CSS-Selektoren wie mit XPath.

Daher erstellt die lxml-Bibliothek sehr praktische Datenbäume.

Benachteiligungen

Allerdings sind auch die Nachteile vorhanden:

  1. Es handelt sich um eine komplizierte Bibliothek, die für Anfänger nicht gut geeignet ist.
  2. Hoher Speicherbedarf.
  3. Das Fehlen einer großen Anzahl von Beispielen und einer aktiven Community.

Aus diesem Grund wird die Bibliothek in der Regel für bestimmte Aufgaben verwendet.

Verwendung

Wie bereits erwähnt, wird lxml nicht immer verwendet. Aufgrund ihrer Unzulänglichkeiten wird diese Bibliothek nur dann verwendet, wenn es notwendig ist, den Baum einer Website mit einer schlechten Struktur oder XML-Dokumenten zu parsen. Das liegt daran, dass sie in diesem Fall besser als andere Bibliotheken geeignet ist, diese Aufgabe zu bewältigen.

Installieren der Lxml-Bibliothek

Die Installation erfolgt über pip install:

pip install lxml

Nachdem Sie den Befehl ausgeführt haben, können Sie mit der installierten Bibliothek arbeiten.

Verwendung der Lxml-Bibliothek

Um zu verstehen, wie diese Bibliothek funktioniert, müssen wir Daten von der Website abrufen und sie verarbeiten. Um die Anfrage auszuführen, verwenden wir die Anfragen-Bibliothek:

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

Um mit HTML-Seiten zu arbeiten, importieren wir ein spezielles Modul der xml-Bibliothek:

from lxml import html

Geben Sie die Struktur der Website in eine Variable ein:

tree = html.fromstring(data.content)

Wir können das jetzt anzeigen, aber dann erhalten wir den gesamten Code der Seite. Lassen Sie uns also mit der weiteren Verarbeitung fortfahren.

Datenverarbeitung mit Lxml

Wir können XPath oder CSS-Selektoren verwenden, um bestimmte Daten auszuwählen. Da wir für die Arbeit mit CSS-Selektoren das zusätzliche lxml-Modul cssselect importieren müssen, können wir Anführungszeichen mit xpath auswählen und das Ergebnis anzeigen:

quotes = tree.xpath('//div[@class="quote"]/span[@class="text"]/text()')
print(quotes)

Das Ergebnis:

D:\scripts>lxml_test.py

['“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”', '“It is our choices, Harry, that show what we truly are, far more than our abilities.”', '“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.”', '“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”', "“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”", '“Try not to become a man of success. Rather become a man of value.”', '“It is better to be hated for what you are than to be loved for what you are not.”', "“I have not failed. I've just found 10,000 ways that won't work.”", "“A woman is like a tea bag; you never know how strong it is until it's in hot water.”", '“A day without sunshine is like, you know, night.”']

Um Element für Element aus einer neuen Zeile auszugeben, ändern wir die Ausgabemethode:

for quote in quotes:
    print(quote)

Die Ausgabe wird nun in einer neuen Zeile ausgeführt. Der gesamte Skriptcode:

import requests
from lxml import html
data = requests.get('https://quotes.toscrape.com')
tree = html.fromstring(data.content)
quotes = tree.xpath('//div[@class="quote"]/span[@class="text"]/text()')
for quote in quotes:
    print(quote)

Daraus können wir schließen, dass lxml seine Funktionen recht gut beherrscht.

SchöneSuppe4

BeautifulSoup4, oder einfach BS4, ist eine Bibliothek, die für das Parsen von Ressourcen entwickelt wurde. Während wir die beiden vorangegangenen Bibliotheken verwenden konnten, um Daten über Abfragen zu erhalten, wird BS4 zur Verarbeitung der resultierenden Daten verwendet. Sowohl HTML- als auch XML-Strukturen sind für die Verarbeitung geeignet.

Diese Bibliothek kann nicht allein verwendet werden. Sie benötigt eine zusätzliche Bibliothek für die Ausführung von Abfragen. In diesem Artikel verwenden wir die Requests-Bibliothek, aber Sie können auch jede andere Bibliothek verwenden.

Vorteile

BS4 ist eine wunderbare Bibliothek, mit der Sie Webseiten verarbeiten und Daten schnell und einfach abrufen können. Sie hat mehrere Vorteile:

  1. Es kann sowohl mit HTML- als auch mit XML-Strukturen arbeiten.
  2. Einsteigerfreundlich. Es ist leicht zu erlernen und aufgrund seiner einfachen Syntax auch für Anfänger geeignet.
  3. Es gibt eine Reihe von Suchmöglichkeiten: nach Name, nach ID, nach Attributen (z.B. Klassen) und nach Text.
  4. Es ist nicht ressourcenintensiv.
  5. Verfügt über gut dokumentierte Funktionen.

Und beautifulsoup kann sowohl kleine als auch große Seiten bearbeiten.

Benachteiligungen

Im Zusammenhang mit der Funktionalität und den Aufgaben der Bibliothek können Sie auch eine Reihe von Nachteilen hervorheben:

  1. Es funktioniert nur mit statischen Seiten. Leider unterstützt BS4 die Arbeit von Headless Browsern nicht, so dass es nicht mit dynamischen Seiten arbeiten kann.
  2. Diese Bibliothek ist im Prinzip nicht für Abfragen konzipiert und kann daher nicht für Scraping allein verwendet werden.
  3. Im Falle einer unübersichtlichen Seitenstruktur kann dies sehr ungenau funktionieren.

Verwendung

Die schöne Soup-Bibliothek wird verwendet, um den XML- oder HTML-Code zu verarbeiten, den Sie bereits erhalten haben. Sie leistet großartige Arbeit beim Empfangen, Suchen und Verarbeiten von Daten.

Damit es richtig funktioniert, muss es jedoch mit einer Abfragebibliothek verwendet werden: UrlLib, Requests, oder http.client.

Installation der BeautifulSoup4-Bibliothek

Die Bibliothek ist nicht vorinstalliert und kann daher mit pip install installiert werden:

pip install beautifulsoup4

Nach der Installation erscheint eine Meldung über den erfolgreichen Betrieb:

D:\scripts>pip install beautifulsoup4
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.12.0-py3-none-any.whl (132 kB)
     ---------------------------------------- 132.2/132.2 kB 865.1 kB/s eta 0:00:00
Requirement already satisfied: soupsieve>1.2 in c:\users\user\appdata\local\programs\python\python310\lib\site-packages (from beautifulsoup4) (2.3.2.post1)
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.12.0

Wenn alles gut geht, können wir zum nächsten Teil übergehen - der Anwendung der Bibliothek in der Praxis.

Verwendung der BeautifulSoup4-Bibliothek

Lassen Sie uns zunächst eine Datei mit der Erweiterung *.py erstellen, die erforderlichen Bibliotheken einbinden und den Code der Seite abrufen. Das haben wir schon einmal gemacht, also gehen wir nicht näher darauf ein:

import requests
from bs4 import BeautifulSoup
data = requests.get('https://example.com')

Nun müssen wir diesen Code mit der BS4-Bibliothek verarbeiten:

soup = BeautifulSoup(data.text, "html.parser")

Um sicherzustellen, dass alles in Ordnung ist, lassen Sie sich das Ergebnis anzeigen:

D:\scripts&gt;bs4_test.py
<!DOCTYPE html>
<html>
<head>
<title>Beispiel Domain</title>
<style type="text/css">
    …
</style>
</head>
<body>
<div>
<h1>Beispiel Domain</h1>
<p>Diese Domain ist zur Verwendung in illustrativen Beispielen in Dokumenten bestimmt. Sie können diese Domain in der Literatur verwenden, ohne sie vorher abzustimmen oder um Erlaubnis zu fragen.</p>
<p><a href="https://www.iana.org/domains/example">Mehr Informationen...</a></p>
</div>
</body>
</html>

Oberflächlich betrachtet unterscheidet sich das Ergebnis nicht von der Ausführung einer Abfrage und der Anzeige des Inhalts auf dem Bildschirm, aber das ist nicht wahr. Durch die Verarbeitung des Codes mit der BS4-Bibliothek können wir die Daten schnell abrufen, ohne reguläre Ausdrücke zu verwenden.

Datenverarbeitung mit BS4

Der einfachste Weg ist die Suche nach Daten anhand von Tags. Lassen Sie uns sowohl die Überschriften als auch den Inhalt der <a> Tag. Das heißt, wir machen dasselbe wie bei den regulären Ausdrücken, nur mit der BS4-Bibliothek:

titles = soup.find('h1').text
href = soup.find('a').get("href")

Wenn es mehrere Header oder Links gäbe, könnten wir soup.find_all anstelle von soup.find verwenden. Darüber hinaus können Sie mit BS4 optional nach Klassen suchen. Für dieses Beispiel reicht uns eine einfache Testseite nicht aus, also verwenden wir https://quotes.toscrape.com als Beispiel.

Zitate werden in der Datei <span> Tag und haben die Klasse "text". Lassen Sie uns diese Parameter in unserem Code festlegen:

 soup.find_all('span', class_='text')

Dieser Code gibt jedoch alle Anführungszeichen zusammen mit den Tags aus:

D:\scripts&gt;bs4_test.py

[<span class="text" itemprop="text">"Die Welt, wie wir sie geschaffen haben, ist ein Prozess unseres Denkens. Sie kann nicht verändert werden, ohne unser Denken zu verändern."</span>, <span class="text" itemprop="text">"Es sind unsere Entscheidungen, Harry, die zeigen, was wir wirklich sind, weit mehr als unsere Fähigkeiten."</span>, <span class="text" itemprop="text">"Es gibt nur zwei Möglichkeiten, Ihr Leben zu leben. Die eine ist, als ob nichts ein Wunder wäre. Die andere ist, als ob alles ein Wunder wäre."</span>, <span class="text" itemprop="text">"Der Mensch, ob Herr oder Dame, der kein Vergnügen an einem guten Roman hat, muss unerträglich dumm sein."</span>, <span class="text" itemprop="text">"Unvollkommenheit ist Schönheit, Wahnsinn ist Genialität und es ist besser, absolut lächerlich zu sein als absolut langweilig."</span>, <span class="text" itemprop="text">"Versuchen Sie nicht, ein Mann des Erfolgs zu werden. Werden Sie vielmehr ein Mann von Wert."</span>, <span class="text" itemprop="text">"Es ist besser, für das gehasst zu werden, was man ist, als für das geliebt zu werden, was man nicht ist."</span>, <span class="text" itemprop="text">"Ich habe nicht versagt. Ich habe nur 10.000 Wege gefunden, die nicht funktionieren."</span>, <span class="text" itemprop="text">"Eine Frau ist wie ein Teebeutel, man weiß nie, wie stark er ist, bis er in heißem Wasser liegt."</span>, <span class="text" itemprop="text">"Ein Tag ohne Sonnenschein ist wie, Sie wissen schon, Nacht."</span>]   

Um dieses Problem zu lösen, lassen Sie uns alle Daten Zeile für Zeile durchgehen und nur den Inhalt auswählen:

for result in text:
    print(result.text)

Das Ergebnis des Skripts:

D:\scripts>bs4_test.py
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“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.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”

Skript-Code:

import requests
from bs4 import BeautifulSoup

data = requests.get()
soup = BeautifulSoup(data.text, "html.parser")
text = soup.find_all('span', class_='text')
for result in text:
    print(result.text)

Diese Flexibilität und Vielseitigkeit haben die BS4-Bibliothek so beliebt gemacht.

Selen

Selenium ist eine bekannte Python 3-Bibliothek, die sowohl zum Testen als auch zum Scraping verwendet wird. Sie eignet sich gut für die Simulation des Verhaltens eines echten Benutzers, was hilft, Blockierungen zu vermeiden.

Bei der Verwendung von Selenium wird ein Webdriver gestartet, der das Verhalten eines Browsers simuliert.

 Vorteile

Selenium ist eine ausgewogene Bibliothek, die für Anfänger und Profis gleichermaßen geeignet ist. Sie hat die folgenden Vorteile:

  1. Es unterstützt die Arbeit mit Headless Browsern und kann dynamische Daten scrapen.
  2. Unterstützt eine Vielzahl von Möglichkeiten, nach Daten zu suchen, sei es über Attribute oder mit XPath.
  3. Unterstützt die Möglichkeit, mit Elementen auf der Seite zu interagieren (z. B. Schaltflächen oder Eingabefelder in Webanwendungen).
  4. Es bietet analoge Bibliotheken für alle gängigen Programmiersprachen.

Außerdem ist die Bibliothek recht einfach und angenehm zu bedienen. Daher bereitet der Umgang mit ihr keine großen Schwierigkeiten.

Benachteiligungen

Die Nachteile sind in der Tat nicht so zahlreich:

  1. Da der Webtreiber aufgerufen wird, um das Skript auszuführen, ist er ziemlich ressourcenintensiv.
  2. Scraping und andere Aktionen werden erst ausgeführt, wenn die Seite vollständig geladen ist, und das kann ziemlich lange dauern.

Ansonsten hat die Bibliothek keine so eklatanten Nachteile.

Verwendung

Selenium wird für automatisierte Tests verwendet und eignet sich hervorragend für das Scraping von Websites, die JavaScript verwenden. Mit einem Headless-Browser können Sie erfolgreich Daten von dynamischen Websites sammeln.

Es eignet sich auch hervorragend für Fälle, in denen Sie vor dem Scraping einige Aktionen durchführen müssen, wie z. B. das Klicken auf eine Schaltfläche oder das Einloggen.

Installieren von Selenium

Wie andere Bibliotheken auch, kann Selenium mit pip install installiert werden:

pip install selenium

Danach kann sie in den Code importiert und wie jede andere Bibliothek verwendet werden.

Selenium benötigt Webdriver für die Arbeit. Es sollte die gleiche Version wie der Chrome-Browser sein. Entpacken Sie den Webdriver auf dem Laufwerk C. Wir werden ihn später benötigen.

Selenium verwenden

Bevor Sie mit Selenium beginnen, sollten Sie verstehen, in welcher Form einige Webseiten gespeichert sind und wie sich Entwickler gegen Scraping wehren.

Die wichtigste Methode, um Scraping zu verhindern, ist das Hinzufügen von Javascript-Code, der nach dem Laden der Seite ausgeführt wird und die Daten dynamisch abruft. In diesem Fall würden die zuvor betrachteten Bibliotheken eine leere Anfrage oder eine Anfrage mit Javascript-Code, aber nicht mit dem Seiteninhalt zurückgeben.

Im Falle von Selenium wird die Anfrage den Inhalt zurückgeben, da WebDriver wartet, bis die Seite vollständig geladen ist, und erst dann die erforderlichen Aktionen ausführt. 

Erstellen Sie eine Datei mit der Erweiterung *.py und hängen Sie Selenium WebDriver an:

from selenium import webdriver

Damit das funktioniert, geben wir den Pfad an, in den wir den WebDriver entpackt haben:

DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)

Lassen Sie uns nun die Daten von der Seite abrufen:

driver.get("https://quotes.toscrape.com/")

Sobald die Seite empfangen wurde, können Sie mit ihr arbeiten und die erforderlichen Informationen filtern. Damit das Skript seine Arbeit korrekt beenden kann, müssen Sie WebDriver am Ende schließen:

driver.close()

Skript-Code:

from selenium import webdriver

DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
text = driver.get("https://quotes.toscrape.com/")
driver.close()

 

Datenverarbeitung mit Selenium

Lassen Sie uns die Anführungszeichen erneut extrahieren. Dazu benötigen wir das By-Modul der Selenium-Bibliothek. Lassen Sie es uns importieren:

from selenium.webdriver.common.by import By

Jetzt können wir die verbundene Bibliothek verwenden, um die gewünschten Daten zu verarbeiten und zu suchen. Die einfachste Art, Zitate auszuwählen, ist die Verwendung von CSS-Selektoren.

Zusätzlich zu den CSS-Selektoren unterstützt Selenium auch die folgenden Methoden:

  1. ID. Suche nach Element-ID.
  2. NAME. Suche nach Elementnamen.
  3. XPATH. Suche nach XPath.
  4. LINK_TEXT. Suche nach Linktext.
  5. PARTIAL_LINK_TEXT. Suche nach partiellem Linktext.
  6. TAG_NAME. Suche nach Tag-Name.
  7. CLASS_NAME. Suche nach Klassennamen.
  8. CSS_SELECTOR. Suche nach CSS-Selektor.

Finden Sie Anführungszeichen mit dem CSS-Selektor span.text und speichern Sie sie in der Variablen text:

text = driver.find_element(By.CSS_SELECTOR, "span.text")

Zeigen Sie die Variable an und stellen Sie sicher, dass alles richtig funktioniert:

D:\scripts>selenium_test.py
D:\scripts\selenium_test.py:5: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(executable_path=DRIVER_PATH)
 DevTools listening on ws://127.0.0.1:52684/devtools/browser/fe204bdd-2d10-47ca-999e-ddf22d5c3854
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“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.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”

Skript-Code:

from selenium import webdriver
from selenium.webdriver.common.by import By

DRIVER_PATH = 'C:\chromedriver.exe'
driver = webdriver.Chrome(executable_path=DRIVER_PATH)
driver.get("https://quotes.toscrape.com/")
text = driver.find_elements(By.CSS_SELECTOR, "span.text")
for res in text:
    print(res.text)
driver.close()

Selenium ist also eine funktionsreiche Bibliothek, die das Risiko von Blockierungen beim Scraping verringert. Außerdem ist sie nützlich für Datenwissenschaftler oder für Bots, die Bots schreiben.

Scrapy

Scrapy ist ein Open-Source-Framework für Web Scraping, das sich ideal für große oder skalierbare Projekte eignet. Es verfügt über integrierte Funktionen zur Erstellung von Scrapern, passt die Scraping-Geschwindigkeit automatisch an und ermöglicht es Ihnen, die Ausgabedaten mithilfe integrierter Tools in den Formaten JSON, CSV und XML zu speichern. Darüber hinaus führt Scrapy Abfragen asynchron aus, so dass Sie sie mit höherer Geschwindigkeit ausführen können.

Im Gegensatz zu den vorherigen Optionen ist es besser, Scrapy mit den integrierten Funktionen zu erstellen.

Vorteile

Dieser Rahmen hat die folgenden Vorteile:

  1. Geeignet für jedes Projekt, auch für skalierbare Projekte.
  2. Sie können innerhalb desselben Projekts separate Webcrawler erstellen, die jeweils für ihre eigenen Aufgaben zuständig sind.
  3. Unterstützt die Erstellung ganzer Projekte mit gemeinsamen und separaten Einstellungen, Upload-Regeln, Ausnahmen und Skripten.
  4. Es ist asynchron.

Leider ist dieses Web Scraping Framework für Anfänger ziemlich schwierig.

Benachteiligungen

Zu den Nachteilen von Scrapy gehören:

  1. Hohe Komplexität der Arbeit für Anfänger.
  2. Hoher Ressourcenverbrauch.
  3. Nicht geeignet für das Scraping dynamischer Webseiten.

Aus diesem Grund wird Scrapy recht selten und meist für Projekte verwendet, die skaliert werden müssen.

Verwendung

Scrapy ist ein spezialisiertes Scraping-Framework für das Crawling von Websites. Es eignet sich hervorragend für große und skalierbare Projekte, bei denen es eine Aufteilung nach Scraping-Richtung gibt. Aufgrund seiner Fähigkeit, mehrere Webcrawler in einem einzigen Projekt zu erstellen, ist Scrapy sehr beliebt, auch wenn es schwierig zu bedienen ist.

Scrapy installieren

Zur Installation verwenden Sie pip install:

pip install scrapy

Danach können Sie anfangen, mit Scrapy zu arbeiten.

Scrapy verwenden

Um mit der Erstellung eines Scrapers fortzufahren, geben Sie einen Befehl in die Befehlszeile ein, um ein neues Projekt zu erstellen:

scrapy startproject scrapy_test

Wenn Sie alles richtig gemacht haben, wird Folgendes angezeigt:

D:\scripts>scrapy startproject scrapy_test
New Scrapy project 'scrapy_test', using template directory 'C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\scrapy\templates\project', created in:
    D:\scripts\scrapy_test
 You can start your first spider with:
    cd scrapy_test
    scrapy genspider example example.com

Wechseln Sie nun mit dem Befehl in das Projektverzeichnis:

cd scrapy_test

Die folgenden Dateien wurden automatisch in diesem Verzeichnis erstellt:

  1. Items.py. Diese Datei beschreibt die Klassen.
  2. Pipelines.py. Beschreiben Sie die Aktionen, die ausgeführt werden, wenn Sie die Spinne öffnen oder schließen. Sie können auch festlegen, wie die Daten gespeichert werden.
  3. Einstellungen.py. Diese Datei enthält die Einstellungen des Benutzers für den Spider.
  4. Spinnen. Der Ordner, in dem die Spider des gewählten Projekts gespeichert sind.

Dann erstellen wir die grundlegende Spinne in diesem Projekt:

scrapy genspider quotes quotes.toscrape.com

Code der automatisch generierten Datei:

import scrapy

class QuotesSpider(scrapy.Spider):
    name="quotes"
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']
 
    def parse(self, response):
        pass

Datenverarbeitung mit Scrapy

Der Block def parse(self, response) beschreibt die Elemente, die ausgewertet werden müssen. Scrapy unterstützt sowohl CSS-Selektoren als auch XPath. Lassen Sie uns XPath verwenden:

item = DemoItem()
      item["text"] = response.xpath("span[@class="text"]/text()").extract()
      return items

 Vollständiger Skriptcode:

import scrapy

class QuotesSpider(scrapy.Spider):
    name="quotes"
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
      item = DemoItem()
      item["text"] = response.xpath("span[@class="text"]/text()").extract()
      return items

Pyppeteer

Die letzte Bibliothek auf der Liste ist die Python-Version der berühmten NodeJS-Bibliothek - Puppeteer. Wie Selenium erlaubt uns Pyppeteer, das Benutzerverhalten zu simulieren und mit JavaScript zu arbeiten.

Vorteile

Diese Bibliothek hat eine Reihe von Vorteilen:

  1. Es gibt ein Pendant in NodeJS, das sehr beliebt ist.
  2. Hat eine sehr aktive Community und eine gut geschriebene Dokumentation.
  3. Hervorragend geeignet für das Scraping dynamischer Seiten dank der Verwendung eines Headless Browsers.

Für diejenigen, die es gewohnt sind, mit NodeJS zu arbeiten, wird es sehr bequem sein.

Benachteiligungen

Leider gibt es auch die Nachteile:

  1. Sie ist ursprünglich eine NodeJS-Bibliothek und hat daher nicht sehr viele Beispiele in Python.
  2. Ziemlich komplex für Anfänger.
  3. Ressourcenintensiv.

Trotz aller Nachteile verdient sie jedoch Aufmerksamkeit.

Verwendung

Gut für große Projekte. Es lohnt sich auch, diese Bibliothek zu verwenden, wenn Sie dynamische Daten scrapen müssen.

Dank seiner großen Funktionalität eignet es sich für die meisten Aufgaben, z.B. für die Datenextraktion oder das Parsen von HTML-Dokumenten.

Installation von Pyppeteer

Installieren Sie die Bibliothek mit pip install:

pip install pyppeteer

In der Regel wird die asyncio-Bibliothek auch mit dieser Bibliothek verwendet, so dass es empfehlenswert ist, diese ebenfalls zu installieren:

pip install asyncio

Pyppeteer verwenden

Erstellen Sie zunächst eine Datei mit der Erweiterung *.py und importieren Sie die erforderlichen Bibliotheken:

import asyncio
from pyppeteer import launch

Fügen wir eine asynchrone Funktion hinzu, um den Ländercode zu ermitteln und den Code anzuzeigen:

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://quotes.toscrape.com')
    html = await page.content()
    print(html)
    await browser.close()

Lassen Sie den Code laufen und sehen Sie, was das Ergebnis ist. Bei der ersten Verwendung wird möglicherweise Chromium geladen:

D:\scripts\pyppeteer_test.py:12: DeprecationWarning: There is no current event loop
  asyncio.get_event_loop().run_until_complete(main())
[INFO] Starting Chromium download.
  4%|██

Dadurch wird der Code ausgeführt, der den gesamten Code der Seite anzeigt:

D:\scripts&gt;pyppeteer_test.py
D:\scripts\pyppeteer_test.py:12: DeprecationWarning: Es gibt keine aktuelle Ereignisschleife
  asyncio.get_event_loop().run_until_complete(main())
[INFO] Chromium-Download wird gestartet.
100%|████████████████████████████████████████████████████████████████████████████████| 137M/137M [06:26<00:00, 354kb/s]
[INFO] Beginning extraction
[INFO] Chromium extracted to: C:\Users\user\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429
<!DOCTYPE html><html lang="en"><head>
        <meta charset="UTF-8">
        <title>Zitate zum Kratzen</title>
    <link rel="stylesheet" href="https://scrape-it.cloud/static/bootstrap.min.css">
    <link rel="stylesheet" href="http://scrape-it.cloud/static/main.css">
</head>
<body>
    <div class="container">
        <div class="row header-box">
            <div class="col-md-8">
                <h1>
                    <a href="https://scrape-it.cloud/">Zitate zum Kratzen</a>
                </h1>
...

Datenverarbeitung mit Pyppeteer

Sie können auch CSS-Selektoren verwenden, um bestimmte Daten auszuwählen. Lassen Sie uns nur Zitate auswählen:

text = await page.querySelectorAll("span.text")
    for t in text:
        qout = await t.getProperty("textContent")
        print(await qout.jsonValue())

Ergebnis der Ausführung:

D:\scripts>pyppeteer_test.py
D:\scripts\pyppeteer_test.py:15: DeprecationWarning: There is no current event loop
  asyncio.get_event_loop().run_until_complete(main())
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
“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.”
“The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.”
“Imperfection is beauty, madness is genius and it's better to be absolutely ridiculous than absolutely boring.”
“Try not to become a man of success. Rather become a man of value.”
“It is better to be hated for what you are than to be loved for what you are not.”
“I have not failed. I've just found 10,000 ways that won't work.”
“A woman is like a tea bag; you never know how strong it is until it's in hot water.”
“A day without sunshine is like, you know, night.”

Vollständiger Skriptcode:

import asyncio
from pyppeteer import launch
async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://quotes.toscrape.com')
    html = await page.content()
    text = await page.querySelectorAll("span.text")
    for t in text:
        qout = await t.getProperty("textContent")
        print(await qout.jsonValue())
    await browser.close()
asyncio.get_event_loop().run_until_complete(main())

 Pyppeteer ist also eine gute Wahl, wenn Sie das Verhalten echter Benutzer simulieren oder Daten in großen Mengen schnell extrahieren müssen.

Fazit und Schlussfolgerungen

Lassen Sie uns eine Vergleichstabelle erstellen, um Ihnen die Wahl des richtigen Tools zu erleichtern:

Bibliothek Benutzerfreundlich Leistung JavaScript-Unterstützung
urllib Einfach zu benutzen Schnell für kleine Anfragen, aber langsamer für umfangreiches Scraping Nein
Anfragen Einfach zu benutzen Schnell für kleine Anfragen, aber langsamer für umfangreiches Scraping Nein
lxml Einfach zu benutzen Sehr schnell beim Parsen und Verarbeiten von XML und HTML Nein
Scrape-It.Cloud Einfach zu benutzen Sehr schnell beim Scrapen von Webressourcen Ja
SchöneSuppe4 Einfach zu benutzen Langsamer als einige andere Bibliotheken für umfangreiches Scraping, aber immer noch schnell für die meisten Anwendungsfälle Nein
Selen Kann für Anfänger komplex sein Relativ langsamer aufgrund des Overheads durch die Verwendung von Web-Treibern, bietet aber eine vollständige Browser-Emulation Ja
Scrapy Kann für Anfänger komplex sein Sehr schnell und skalierbar für groß angelegte Scraping-Projekte Nein
Pyppeteer Kann für Anfänger komplex sein, erfordert einige Kenntnisse in JavaScript und Browser-Automatisierung Relativ langsamer aufgrund des Overheads der Browsernutzung, bietet aber eine vollständige Browseremulation Ja

Wenn Sie Anfänger sind, sollten Sie sich die speziellen Bibliotheken für Scraper genauer ansehen, um Blockierungen zu vermeiden. Dies wird Ihnen helfen, besser zu verstehen, wie man Scraper schreibt.

Wenn Sie lernen möchten, selbst Scraper zu schreiben, ist Python ideal - es ist recht einfach zu erlernen und verfügt über eine breite Palette von Tools.

Scraping in Python ist eine ziemlich einfache Aufgabe, unabhängig davon, ob Sie einen Konstruktor verwenden oder Ihren eigenen Code mit einer der beliebten Scraping-Bibliotheken schreiben.

FAQ

Ist Python gut für Web Scraping?

Python eignet sich hervorragend für Web Scraping und die Datenverarbeitung im Allgemeinen. Es verfügt über viele Funktionen und Bibliotheken, die auf die Beschaffung und Verarbeitung großer Datenmengen ausgerichtet sind, und eignet sich sehr gut zum Schreiben kleiner, funktionaler Skripte.

Ist Scrapy besser als BeautifulSoup?

Was Scrapy und BeautifulSoup betrifft, so sind beide für unterschiedliche Aufgaben nützlich. Scrapy eignet sich eher für skalierbare oder große Projekte, während BeautifulSoup eher für Projekte geeignet ist, bei denen die Daten nicht von einer Website bezogen werden müssen, sondern unter den bereits erhaltenen Daten gesucht und verarbeitet werden sollen.

Was ist die beste Python-Bibliothek bzw. das beste Python-Framework für Web Scraping?

Eine der besten Bibliotheken für Funktionalität ist Selenium. Sie eignet sich für praktisch jede Aufgabe, auch für das Scraping dynamischer Daten. Wenn Daten nur verarbeitet und nicht beschafft werden müssen, dann sind BS4 oder Lxml die beste Wahl.

Ist Selen besser als BeautifulSoup?

Selenium verfügt über einen breiteren Funktionsumfang als BeautifulSoup. Im Gegensatz zu BeautifulSoup ermöglicht es das Scraping von Websites mit JavaScript, die Verwendung von Headless Browsern und das Stellen von Anfragen. BeautifulSoup ist jedoch einfacher und besser für Anfänger geeignet.

Verwandte Beiträge

Einen Kommentar hinterlassen