Wie man CURL mit Python für Web Scraping verwendet

Mihnea-Octavian Manolache am 30. November 2022

Die grundlegendste Aufgabe einer Web-Scraping-Anwendung besteht darin, zunächst die HTML-Datei zu sammeln und sich erst dann auf ihre Bearbeitung zu konzentrieren. Natürlich gibt es verschiedene Möglichkeiten, dies zu erreichen. Im heutigen Artikel werden wir jedoch herausfinden, wie man CURL mit Python für einen Web Scraper verwendet. Hier ist eine Vorschau auf nur einen Bruchteil der Dinge, die Sie nach dem Lesen dieses Artikels lernen werden:

  • Was ist cURL und wie kann man es von der Kommandozeile aus aufrufen?
  • Wie man den cURL-Befehl verwendet, um Informationen von einer beliebigen Website zu sammeln
  • Wie man cURL in Python verwendet, um einen einfachen Web Scraper zu erstellen

Wie benutzt man CURL mit Python?

Kurz gesagt, cURL ist hauptsächlich ein Befehlszeilentool, das zum Abrufen von Daten von einem Server verwendet wird. Ich weiß, dass bei der Erwähnung der Befehlszeile die Dinge kompliziert erscheinen mögen. Ich kann Ihnen jedoch versichern, dass cURL in der Praxis, wie Sie im Laufe dieses Artikels feststellen werden, vielleicht eines der einfachsten Tools ist, die Sie als Programmierer jemals verwenden werden.

Um cURL von der Kommandozeile aus zu verwenden, öffnen Sie einfach ein neues Terminalfenster und geben Sie `curl` gefolgt von der URL ein, die Sie abrufen möchten. Zum Beispiel:

~ " curl 'https://api.ipify.org?format=json'

Dieser einfache Befehl greift auf die API von ipify zu und fordert Informationen vom Server an, genau wie es ein herkömmlicher Browser tun würde. Die Ausgabe dieses Beispiels ist ein JSON-Objekt, das Ihre IP-Adresse enthält. Auch wenn es nicht so aussieht, haben Sie gerade die Infrastruktur für einen zukünftigen Web Scraper aufgebaut. Und das alles in nur einer Zeile Code.

cURL ist eigentlich ein fortgeschritteneres Werkzeug. Wenn Sie mehr über die Verwendung von curl erfahren wollen, können Sie die offizielle Dokumentation lesen. Sie können auch den `--help` Schalter benutzen und über die verschiedenen verfügbaren Optionen lesen. 

Wie man cURL zum Abrufen von HTML-Dateien verwendet

Im obigen Beispiel war die Antwort, die wir vom ipify-Server erhalten haben, eine JSON-Datei. Das liegt daran, dass dieser spezielle API-Endpunkt Daten im JSON-Format zurückgibt. Beim Web-Scraping stößt man in der Regel auf herkömmliche Websites, die eine HTML-Datei bereitstellen, die man dann parsen und aus der man Daten extrahieren muss.

Im Moment liegt unser Schwerpunkt jedoch nicht auf der Datenmanipulation, sondern auf der Datenextraktion. Und wir wissen, dass wir cURL zum Scrapen von Websites verwenden können, aber wie machen wir das eigentlich? Nun, falls Sie noch nicht neugierig geworden sind und es ausprobiert haben, bitten Sie curl einfach, auf eine beliebige generische URL zuzugreifen, von der Sie wissen, dass es sich um eine herkömmliche HTML-basierte Website handelt. Nehmen wir als Beispiel httpbin.org:

curl 'https://httpbin.org/forms/post'

Geben Sie diesen Befehl in Ihr Terminal ein, und Sie erhalten den einfachen HTML-Code als Antwort:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<!-- Example form from HTML5 spec http://www.w3.org/TR/html5/forms.html#writing-a-form's-user-interface -->
<form method="post" action="/post">
<p><label>Customer name: <input name="custname"></label></p>
<p><label>Telephone: <input type=tel name="custtel"></label></p>
<p><label>E-mail address: <input type=email name="custemail"></label></p>
<fieldset>
<legend> Pizza Size </legend>
<p><label> <input type=radio name=size value="small"> Small </label></p>
<p><label> <input type=radio name=size value="medium"> Medium </label></p>
<p><label> <input type=radio name=size value="large"> Large </label></p>
</fieldset>
<fieldset>
<legend> Pizza Toppings </legend>
<p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p>
<p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p>
<p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p>
<p><label> <input type=checkbox name="topping" value="mushroom"> Mushroom </label></p>
</fieldset>
<p><label>Preferred delivery time: <input type=time min="11:00" max="21:00" step="900" name="delivery"></label></p>
<p><label>Delivery instructions: <textarea name="comments"></textarea></label></p>
<p><button>Submit order</button></p>
</form>
</body>
</html>

Wie man cURL in Python verwendet 

Wie Sie gesehen haben, ist das Extrahieren von Daten mit cURL eine unkomplizierte Lösung, die keine eigentliche Codierung erfordert. Es geht einfach darum, einen Befehl zu senden und einige Informationen zu erhalten. Wenn Sie ein echtes Web-Scraping-Projekt aufbauen wollen, müssen Sie die gesammelten Daten irgendwie verwenden. Und da wir Programmierer sind, wollen wir die Daten programmatisch manipulieren. Hier kommt Python ins Spiel.

Warum Python für ein Web-Scraping-Projekt wählen?

Python ist zweifelsohne eine der beliebtesten Programmiersprachen. Sie ist nicht nur sehr leistungsfähig, sondern eignet sich dank ihrer einfachen Syntax auch perfekt für Programmieranfänger. Außerdem gibt es eine große Gemeinschaft, die immer bereit ist, zu helfen. Wenn Sie also irgendwann auf ein Problem stoßen und nicht weiterkommen, zögern Sie nicht, eine Frage zu stellen, zum Beispiel auf Stackoverflow, und jemand wird Ihnen sicher helfen. 

Vor allem für das Web Scraping ist Python eine gute Wahl, da es eine Vielzahl von Paketen enthält. Wie Sie später in diesem Artikel sehen werden, erfordert die Datenmanipulation das Parsen der HTML-Dateien, so dass Sie anschließend die Elemente "auslesen" und nur die Informationen extrahieren können, die Sie von dieser bestimmten Webseite benötigen.

Web Scraping mit cURL und Python

Bis jetzt haben wir curl kennengelernt, wie man es im Terminal benutzt, aber wie integrieren wir es eigentlich in Python? Nun, es gibt tatsächlich mehrere Möglichkeiten, wie man dies angehen kann. Sie könnten zum Beispiel Pythons `os`-Modul verwenden und Terminalbefehle senden:

import os 
curl = os.system(f'curl "https://httpbin.org/forms/post"')
print(curl)

Sie können sogar Ihre eigene Funktion um diese herum aufbauen und sie im gesamten Projekt verwenden:

import os  
def curl(website):
return os.system(f'curl "{website}"')

print(curl('https://httpbin.org/forms/post'))

Aber wie gesagt, eine der größten Stärken von Python ist seine Paketvielfalt. Da cURL sehr viel vielfältiger ist, müsste unsere Funktion sehr viel komplexer sein, um alle seine Funktionen zu berücksichtigen. Anstatt also das Rad neu zu erfinden, empfehle ich, ein bestehendes Paket für die Integration von cURL in Python zu verwenden: PycURL.

Was ist PycURL und wie wird es installiert?

Laut ihrer Website ist PycURL eine Schnittstelle zur cURL-Bibliothek und erbt daher alle libcURL-Fähigkeiten. Kurz gesagt, PycURL ist das Mittel, mit dem wir cURL in Python verwenden werden. Zur Installation verwenden wir, wie bei jedem anderen Python-Paket, pip. Falls Sie pip noch nicht kennen, es ist ein Paketverwaltungssystem für Python und Python-Entwickler verwenden es ständig, um schnell Abhängigkeiten zu installieren.

Um PycURL zu installieren, fügen Sie einfach den folgenden Befehl in Ihr Terminal ein:

~ " pip install pycurl 

Parsen von HTML mit BeautifulSoup

Da wir gerade über Abhängigkeiten und Pip sprechen, ist es auch erwähnenswert, dass die Python-Gemeinschaft eine ganze Reihe von Lösungen für das HTML-Parsing entwickelt hat. Eines der beliebtesten HTML-Parsing-Pakete ist BeautifulSoup. Bei WebScrapingAPI haben wir sogar einen ganzen Blogbeitrag darüber geschrieben, wie man mit Python und BeautifulSoup Webdaten extrahiert und parst

Genau wie bei PycURL ist für die Installation von BeautifulSoup nur ein Befehl erforderlich:

~ "pip install beautifulsoup4

Wie man einen Web Scraper mit Python und cURL erstellt

Nachdem wir nun den theoretischen Teil abgedeckt haben und wissen, wie man cURL sowohl mit dem Terminal als auch in Python benutzt, wollen wir uns gleich ans Programmieren machen. In diesem Abschnitt werden wir lernen, wie man curl in Python verwendet, indem wir einen echten Web Scraper bauen. Also, ohne weitere Umschweife, lasst das Programmierspiel beginnen!

1. Das Verzeichnis einrichten

Als Softwareentwickler ist es wichtig, unsere Projekte so zu strukturieren, dass sie sowohl für uns als auch für andere Entwickler leicht zu pflegen und zu lesen sind. Um alles zu organisieren, beginnen wir mit der Erstellung eines neuen Verzeichnisses, das alle Dateien unseres Projekts enthalten wird. Öffnen Sie ein neues Terminalfenster, gehen Sie mit "cd" auf den Desktop und erstellen Sie einen neuen Ordner mit dem Namen "py_scraper":

~ " cd desktop && mkdir py_scraper && cd py_scraper

Lassen Sie mich kurz die Befehle erklären, die wir bisher verwendet haben:

  1. `cd` - aktuelles Verzeichnis wechseln
  2. &&" - führt den folgenden Befehl nur aus, wenn der vorherige erfolgreich war
  3. `mkdir` - neues Verzeichnis erstellen

Öffnen Sie Ihr Projekt in Ihrer bevorzugten IDE und erstellen Sie eine neue Datei mit dem Namen 'scraper.py' im Verzeichnis `py_scraper`. Tipp: Sie können dies auch von der Kommandozeile aus tun, indem Sie diesen Befehl verwenden:

~/desktop/py_scraper " touch scraper.py && code .

Wenn Sie VSCode verwenden (so wie ich), sehen Sie nun ein Fenster, das wie folgt aussehen sollte:

blog-image

2. Installieren von Paketen

Ihr Terminal sollte sich nun im Verzeichnis `py_scraper` befinden. Das letzte, was wir tun müssen, bevor wir den eigentlichen Scraper programmieren, ist die Installation der Pakete, die wir zuvor vorgestellt haben, und eines weiteren. Wir wollen sie jedoch nur innerhalb des `py_scraper`-Verzeichnisses haben (und sie nicht global installieren). Um dies zu erreichen, müssen wir die virtuellen Umgebungen von Python verwenden. Diese ermöglichen es uns, den Python-Interpreter, die Bibliotheken und die installierten Skripte zu isolieren.

Um eine neue virtuelle Umgebung innerhalb des `py_scraper`-Verzeichnisses einzurichten, verwenden Sie den folgenden Befehl:

~/Desktop/py_scraper " python3 -m venv env

Dadurch wird ein neuer `env`-Ordner erstellt, den wir aktivieren müssen, bevor wir die gewünschten Pakete installieren. Aktivieren Sie ihn mit dem folgenden Befehl:

~/desktop/py_scraper " source env/bin/activate

Nachdem Sie nun Ihre virtuelle Umgebung erstellt und aktiviert haben, müssen Sie nur noch die benötigten Pakete mit Hilfe der pip-Befehle installieren, die wir zuvor vorgestellt haben.

~/desktop/py_scraper " pip install pycurl beautifulsoup4 certify

3. Erstellen des Python- und cURL-Web-Scrapers

Sie sind nun bereit, PycURL und BeautifulSoup zu verwenden. Um diese Pakete verwenden zu können, müssen wir sie zunächst in unsere Datei "scraper.py" importieren. Fügen Sie einfach dieses Snippet am Anfang der Datei ein:

import pycurl
import certify
from io import BytesIO
from bs4 import BeautifulSoup

# Unsere gesamte Logik wird unter dieser Zeile stehen

Nachdem Sie nun die Pakete importiert haben, können wir uns um die Logik unseres Web Scrapers kümmern. Aus dem, was wir bisher besprochen haben, wissen wir, dass wir zwei Aspekte abdecken müssen: Datenextraktion und Datenverarbeitung. Der erste Bereich wird von PycURL und der zweite von BeautifulSoup abgedeckt. Für eine bessere Strukturierung schlage ich vor, dass wir jeden Abschnitt separat behandeln.

3.1. Scraping von Daten mit cURL und Python

Wenn ich von Scraping spreche, beziehe ich mich auf den Extraktionsteil des Web Scrapers. Nachdem wir dies im Kopf haben und wissen, wie man curl in Python verwendet, indem man mit der PycURL-Schnittstelle interagiert, können wir den Code schreiben:

# Globale Variablen setzen
TARGET_URL = 'https://httpbin.org/forms/post'

# cURL und Python verwenden, um Daten von einem Server über PycURL zu sammeln
buffer = BytesIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, TARGET_URL)
curl.setopt(curl.WRITEDATA, buffer)
curl.setopt(curl.CAINFO, certifi.where())
curl.perform()
curl.close()

# Verwendung von BytesIO zum Abrufen der gescrapten Daten
body = buffer.getvalue()

# Speichern der Ausgabe und Drucken im Terminal
data = body.decode('iso-8859-1')
print(data)

Im obigen Code deklarieren wir zunächst die globale Variable `TARGET_URL`, die die URL der Website enthält, aus der wir Daten extrahieren wollen. Als nächstes erstellen wir einen Puffer mit `BufferIO`, initialisieren PycURL und setzen zwei Optionen: eine für die Datenübertragung und eine für den Dateinamen, der die Zertifikate enthält. Zu guter Letzt führen wir die Curl-Aktion aus und schließen die Sitzung. 

Das war's. Sie haben erfolgreich Python verwendet, um eine cURL-Anfrage zu stellen und die HTML-Datei in Ihrer Konsole zu drucken. Jetzt müssen wir uns nur noch um den zweiten Abschnitt kümmern, nämlich die Datenverarbeitung.

3.2. Parsen von HTML mit Python und BeautifulSoup

Having the raw data is redundant in web scraping, unless we perform some sort of action on it. As the most basic scope of any web scraper is to extract data from HTML. For our example, let us assume that we want to scrape all text inside the `<p>` elements from the `data` variable (that is currently holding all the scraped HTML). Here is how we do this using BeautifulSoup:

# Parsen von Daten mit BeautifoulSoup
soup = BeautifulSoup(data, 'html.parser')
# Finden von Elementen mit BeautifoulSoup
paragraphs = soup.find_all("p")
for p in paragraphs:
print(p.text)

Wie Sie sehen, sind mit BeautifulSoup nur 4 Codezeilen erforderlich, um das gewünschte Ergebnis zu erzielen. Die Ausführung des vollständigen Skripts sollte nun den Text innerhalb jedes Absatzes in der HTML-Datei ausgeben, die wir von unserer Ziel-Website gesammelt haben. 

Unter der Annahme, dass Sie die Anweisungen befolgt haben und dass Ihre `scraper.py` den gesamten Code enthält, den wir in diesem Abschnitt geschrieben haben, lassen Sie uns zum Terminal zurückkehren und das Skript ausführen:

~/desktop/py_scraper " python3 scraper.py
Kundenname:
Telefon:
E-Mail Adresse:
Klein
Mittel
Groß
Speck
Extra Käse
Zwiebel
Pilz
Gewünschte Lieferzeit:
Lieferanweisungen:
Bestellung abschicken

Schlussfolgerung

Der Aufbau eines Web Scrapers mit Python und cURL ist ein sehr nützliches Projekt und kann der Ausgangspunkt für eine größere Web Scraping App sein. Der empfohlene Ansatz zur Integration der beiden Technologien ist die Verwendung von PycURL. Sie können auch Ihre eigene Schnittstelle oder Funktion für die Interaktion mit cURL in Python schreiben. Das erfordert nur etwas mehr Zeit und Aufwand :).

Ich hoffe, dieser Artikel war eine gute Ressource, um Curl zu lernen, wie man es mit Python verwendet und einen einfachen Web Scraper baut. Außerdem lade ich Sie ein, den Code zu optimieren und ihn zu Ihrem eigenen zu machen, damit Sie ein weiteres Projekt zu Ihrem Portfolio hinzufügen können.

Nachrichten und Aktualisierungen

Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Vorschaubild
LeitfädenAmazon Scraping API - Startanleitung

Scrapen Sie Amazon effizient mit der kosteneffizienten Lösung von Web Scraping API. Greifen Sie auf Echtzeitdaten zu, von Produkten bis zu Verkäuferprofilen. Jetzt anmelden!

WebscrapingAPI
Autorenavatar
WebscrapingAPI
8 Minuten lesen
Vorschaubild
LeitfädenWie man Amazon-Produktdaten scrappt: Ein umfassender Leitfaden zu Best Practices & Tools

Entdecken Sie die Komplexität des Scrapens von Amazon-Produktdaten mit unserem ausführlichen Leitfaden. Von Best Practices und Tools wie der Amazon Scraper API bis hin zu rechtlichen Aspekten erfahren Sie, wie Sie Herausforderungen meistern, CAPTCHAs umgehen und effizient wertvolle Erkenntnisse gewinnen.

Suciu Dan
Autorenavatar
Suciu Dan
15 Minuten lesen
Vorschaubild
Wissenschaft des Web ScrapingScrapy vs. Selenium: Ein umfassender Leitfaden zur Auswahl des besten Web-Scraping-Tools

Erforschen Sie den detaillierten Vergleich zwischen Scrapy und Selenium für Web Scraping. Von der Datenerfassung in großem Maßstab bis hin zum Umgang mit dynamischen Inhalten - entdecken Sie die Vor- und Nachteile sowie die einzigartigen Funktionen der beiden Frameworks. Erfahren Sie, wie Sie das beste Framework für die Anforderungen und den Umfang Ihres Projekts auswählen können.

WebscrapingAPI
Autorenavatar
WebscrapingAPI
14 Minuten lesen