Web Scraping ist die Idee, Informationen von einer Website zu extrahieren und für einen bestimmten Anwendungsfall zu verwenden.
Angenommen, Sie versuchen, eine Tabelle aus einer Webseite zu extrahieren, sie in eine JSON-Datei zu konvertieren und die JSON-Datei zum Erstellen einiger interner Tools zu verwenden. Mit Hilfe von Web Scraping können Sie die gewünschten Daten extrahieren, indem Sie auf bestimmte Elemente einer Webseite abzielen. Web-Scraping mit Python ist eine sehr beliebte Wahl, da Python mehrere Bibliotheken wie BeautifulSoup oder Scrapy bereitstellt, um Daten effektiv zu extrahieren.

Die Fähigkeit, Daten effizient zu extrahieren, ist auch als Entwickler oder A. sehr wichtig Datenwissenschaftler. Dieser Artikel wird Ihnen helfen zu verstehen, wie Sie eine Website effektiv schaben und die notwendigen Inhalte erhalten, um sie nach Ihren Bedürfnissen zu manipulieren. Für dieses Tutorial verwenden wir die BeautifulSuppe Paket. Es ist ein trendiges Paket zum Scrapen von Daten in Python.
Why use Python for Web Scraping?
Python ist für viele Entwickler die erste Wahl beim Bau von Web Scrapern. Es gibt viele Gründe, warum Python die erste Wahl ist, aber lassen Sie uns für diesen Artikel drei Hauptgründe diskutieren, warum Python für das Data Scraping verwendet wird.
Bibliotheks- und Community-Support: Es gibt mehrere großartige Bibliotheken wie BeautifulSoup, Scrapy, Selenium usw., die großartige Funktionen zum effektiven Scrapen von Webseiten bieten. Es hat ein hervorragendes Ökosystem für Web Scraping aufgebaut, und da viele Entwickler weltweit bereits Python verwenden, können Sie schnell Hilfe bekommen, wenn Sie nicht weiterkommen.
Automation: Python ist berühmt für seine Automatisierungsfähigkeiten. Wenn Sie versuchen, ein komplexes Tool zu erstellen, das auf Scraping basiert, ist mehr als nur Web Scraping erforderlich. Wenn Sie beispielsweise ein Tool erstellen möchten, das den Preis von Artikeln in einem Online-Shop verfolgt, müssen Sie einige Automatisierungsfunktionen hinzufügen, damit es die Preise täglich verfolgen und zu Ihrer Datenbank hinzufügen kann. Python gibt Ihnen die Möglichkeit, solche Prozesse mit Leichtigkeit zu automatisieren.
Datenvisualisierung: Web Scraping wird von Data Scientists stark genutzt. Data Scientists müssen häufig Daten aus Webseiten extrahieren. Mit Bibliotheken wie Pandas macht Python Datenvisualisierung einfacher aus Rohdaten.
Libraries for Web Scraping in Python
In Python sind mehrere Bibliotheken verfügbar, um das Web Scraping zu vereinfachen. Lassen Sie uns hier die drei beliebtesten Bibliotheken besprechen.
# 1. BeautifulSuppe
Eine der beliebtesten Bibliotheken für Web Scraping. BeautifulSuppe unterstützt Entwickler seit 2004 beim Scraping von Webseiten. Es bietet einfache Methoden zum Navigieren, Durchsuchen und Ändern des Parse-Baums. Beautifulsoup selbst übernimmt auch die Codierung für eingehende und ausgehende Daten. Es ist gut gepflegt und hat eine tolle Community.
# 2. Scrapy
Ein weiteres beliebtes Framework für die Datenextraktion. Scrapy hat mehr als 43000 Sterne auf GitHub. Es kann auch verwendet werden, um Daten von APIs zu kratzen. Es hat auch ein paar interessante integrierte Unterstützung, wie das Versenden von E-Mails.
# 3. Selenium
Selenium ist nicht hauptsächlich eine Web-Scraping-Bibliothek. Stattdessen handelt es sich um ein Browser-Automatisierungspaket. Aber wir können seine Funktionalitäten zum Scrapen von Webseiten leicht erweitern. Es verwendet das WebDriver-Protokoll zur Steuerung verschiedener Browser. Selen ist seit fast 20 Jahren auf dem Markt. Aber mit Selenium können Sie Daten von Webseiten einfach automatisieren und entfernen.
Challenges with Python Web Scraping
Beim Versuch, Daten von Websites zu kratzen, kann man sich vielen Herausforderungen stellen. Es gibt Probleme wie langsame Netzwerke, Anti-Scraping-Tools, IP-basierte Blockierung, Captcha-Blockierung usw. Diese Probleme können beim Versuch, eine Website zu scrapen, massive Probleme verursachen.
Aber Sie können Herausforderungen effektiv umgehen, indem Sie einige Wege gehen. Zum Beispiel in den meisten Fällen ein IP-Adresse wird von einer Website blockiert, wenn in einem bestimmten Zeitintervall mehr als eine bestimmte Anzahl von Anfragen gesendet wird. Um eine IP-Blockierung zu vermeiden, müssen Sie Ihren Scraper so codieren, dass er nach dem Senden von Anfragen abkühlt.

Entwickler neigen auch dazu, Honeypot-Fallen für Scraper einzusetzen. Diese Fallen sind normalerweise für das bloße menschliche Auge unsichtbar, können aber von einem Schaber durchkämmt werden. Wenn Sie eine Website scrapen, die eine solche Honeypot-Falle installiert, müssen Sie Ihren Scraper entsprechend codieren.
Captcha ist ein weiteres schwerwiegendes Problem mit Scrapern. Die meisten Websites verwenden heutzutage ein Captcha, um den Bot-Zugriff auf ihre Seiten zu schützen. In einem solchen Fall müssen Sie möglicherweise einen Captcha-Löser verwenden.
Scraping a Website with Python
Wie wir besprochen haben, werden wir BeautifulSoup verwenden, um eine Website zu verschrotten. In diesem Tutorial werden wir die Vergangenheitsdaten of Ethereum von Coingecko und speichern Sie die Tabellendaten als JSON-Datei. Kommen wir zum Bau des Schabers.
Der erste Schritt besteht darin, BeautifulSoup und Requests zu installieren. Für dieses Tutorial verwende ich Pipenv. Pipenv ist ein virtueller Umgebungsmanager für Python. Sie können auch verwenden Venv wenn du willst, aber ich bevorzuge Pipenv. Die Erörterung von Pipenv würde den Rahmen dieses Tutorials sprengen. Aber wenn Sie erfahren möchten, wie Pipenv verwendet werden kann, folgen Sie dieser Leitfaden. Oder, wenn Sie virtuelle Python-Umgebungen verstehen möchten, folgen Sie dieser Leitfaden.
Starten Sie die Pipenv-Shell in Ihrem Projektverzeichnis, indem Sie den Befehl ausführen pipenv shell
. Es startet eine Subshell in Ihrer virtuellen Umgebung. Führen Sie nun den folgenden Befehl aus, um BeautifulSoup zu installieren:
pipenv install beautifulsoup4
Führen Sie zum Installieren von Anforderungen den Befehl ähnlich dem obigen aus:
pipenv install requests
Importieren Sie nach Abschluss der Installation die erforderlichen Pakete in die Hauptdatei. Erstellen Sie eine Datei namens main.py
und importieren Sie die Pakete wie folgt:
from bs4 import BeautifulSoup
import requests
import json
Der nächste Schritt besteht darin, den Inhalt der historischen Datenseite abzurufen und ihn mit dem in BeautifulSoup verfügbaren HTML-Parser zu parsen.
r = requests.get('https://www.coingecko.com/en/coins/ethereum/historical_data#panel')
soup = BeautifulSoup(r.content, 'html.parser')
Im obigen Code wird auf die Seite mit dem zugegriffen get
-Methode, die in der Anforderungsbibliothek verfügbar ist. Der analysierte Inhalt wird dann in einer Variablen namens gespeichert soup
.
Der ursprüngliche Scraping-Teil beginnt jetzt. Zunächst müssen Sie die Tabelle im DOM korrekt identifizieren. Wenn Sie öffnen diese Seite und sie mit den im Browser verfügbaren Entwicklertools untersuchen, werden Sie feststellen, dass die Tabelle diese Klassen enthält table table-striped text-sm text-lg-normal
.

Um diese Tabelle korrekt anzusprechen, können Sie die verwenden find
Methode.
table = soup.find('table', attrs={'class': 'table table-striped text-sm text-lg-normal'})
table_data = table.find_all('tr')
table_headings = []
for th in table_data[0].find_all('th'):
table_headings.append(th.text)
Im obigen Code wird zunächst die Tabelle mithilfe von gefunden soup.find
Methode, dann mit der find_all
Methode, alle tr
Elemente innerhalb der Tabelle werden durchsucht. Diese tr
Elemente werden in einer Variablen namens gespeichert table_data
. Der Tisch hat ein paar th
Elemente für den Titel. Eine neue Variable namens table_headings
wird initialisiert, um die Titel in einer Liste zu halten.
Dann wird eine for-Schleife für die erste Zeile der Tabelle ausgeführt. In dieser Zeile sind alle Elemente mit th
werden durchsucht, und ihr Textwert wird zu addiert table_headings
aufführen. Der Text wird mit extrahiert text
Methode. Wenn Sie die ausdrucken table_headings
Variable jetzt, können Sie die folgende Ausgabe sehen:
['Date', 'Market Cap', 'Volume', 'Open', 'Close']
Der nächste Schritt besteht darin, die restlichen Elemente zu kratzen, ein Wörterbuch für jede Zeile zu generieren und die Zeilen dann an eine Liste anzuhängen.
for tr in table_data:
th = tr.find_all('th')
td = tr.find_all('td')
data = {}
for i in range(len(td)):
data.update({table_headings[0]: th[0].text})
data.update({table_headings[i+1]: td[i].text.replace('\n', '')})
if data.__len__() > 0:
table_details.append(data)
Dies ist der wesentliche Teil des Codes. Für jeden tr
der table_data
Variable, zuerst die th
Elemente werden gesucht. Das th
Elemente sind die in der Tabelle angezeigten Daten. Diese th
Elemente werden in einer Variablen gespeichert th
. Ebenso alle td
Elemente werden in gespeichert td
variabel.
Ein leeres Wörterbuch data
wird initialisiert. Nach der Initialisierung durchlaufen wir den Bereich von td
Elemente. Für jede Zeile aktualisieren wir zuerst das erste Feld des Wörterbuchs mit dem ersten Element von th
. Der Code table_headings[0]: th[0].text
weist ein Schlüssel-Wert-Paar aus Datum und dem ersten zu th
Element.
Nach der Initialisierung des ersten Elements werden die anderen Elemente mit zugewiesen data.update({table_headings[i+1]: td[i].text.replace('\\n', '')})
. Hier, td
Elements Text wird zuerst mit extrahiert text
Methode, und dann alle \\n
wird durch die ersetzt replace
Methode. Der Wert wird dann dem zugewiesen i+1
das Element von table_headings
Liste, weil die i
Element ist bereits vergeben.
Dann, wenn die data
die Wörterbuchlänge null überschreitet, hängen wir das Wörterbuch an die an table_details
aufführen. Sie können die ausdrucken table_details
Liste zu prüfen. Aber wir schreiben die Werte in eine JSON-Datei. Werfen wir einen Blick auf den Code dafür,
with open('table.json', 'w') as f:
json.dump(table_details, f, indent=2)
print('Data saved to json file...')
Wir benutzen die json.dump
Methode hier, um die Werte in eine JSON-Datei mit dem Namen zu schreiben table.json
. Sobald das Schreiben abgeschlossen ist, drucken wir Data saved to json file...
in die Konsole.
Führen Sie nun die Datei mit dem folgenden Befehl aus:
python run main.py
Nach einiger Zeit können Sie den Text Data saved to JSON file… in der Konsole sehen. Sie sehen auch eine neue Datei namens table.json im Arbeitsdateiverzeichnis. Die Datei sieht ähnlich aus wie die folgende JSON-Datei:
[
{
"Date": "2022-11-27",
"Market Cap": "$145,222,050,633",
"Volume": "$5,271,100,860",
"Open": "$1,205.66",
"Close": "N/A"
},
{
"Date": "2022-11-26",
"Market Cap": "$144,810,246,845",
"Volume": "$5,823,202,533",
"Open": "$1,198.98",
"Close": "$1,205.66"
},
{
"Date": "2022-11-25",
"Market Cap": "$145,091,739,838",
"Volume": "$6,955,523,718",
"Open": "$1,204.21",
"Close": "$1,198.98"
},
// ...
// ...
]
Sie haben erfolgreich einen Web Scraper mit Python implementiert. Um den vollständigen Code anzuzeigen, können Sie dies besuchen GitHub Repo.
Fazit
In diesem Artikel wurde erläutert, wie Sie ein einfaches Python-Scrape implementieren können. Wir haben diskutiert, wie BeautifulSoup zum schnellen Scrapen von Daten von der Website verwendet werden könnte. Wir haben auch andere verfügbare Bibliotheken besprochen und warum Python für viele Entwickler die erste Wahl zum Scrapen von Websites ist.
Diese können Sie sich auch anschauen Web Scraping Frameworks.