Finden Sie heraus, wie Sie cURL in Python verwenden können
Andrei Ogiolan am 12. Dezember 2022
Was ist cURL?
Um das Ziel dieses Artikels zu erreichen, nämlich zu lernen, wie man cURL in Python verwendet, müssen wir zunächst cURL vorstellen. Client URL (cURL) ist, kurz gesagt, eine einfach zu bedienende Befehlszeile, die für Entwickler entwickelt wurde, um Daten von einem Server abzurufen.
Wie benutzt man cURL?
Wie ich bereits oben erwähnt habe, ist die Verwendung von cURL ziemlich einfach und kann Informationen mit nur einem einzeiligen Befehl extrahieren. Zunächst müssen Sie ein Terminal öffnen und curl gefolgt von einem Link zu einer Website eingeben:
$ curl 'https://www.webscrapingapi.com/'
Herzlichen Glückwunsch, Sie haben Ihre erste Anfrage mit cURL gestellt. Dieser einfache Befehl fordert Informationen vom Server an, genau wie ein herkömmlicher Browser, und gibt den HTML-Code der Seite zurück. Nicht jede Website gibt HTML zurück, es gibt Endpunkte, die Daten als JSON-Objekt zurücksenden. Nehmen Sie dieses Beispiel:
$ curl 'https://jsonplaceholder.typicode.com/todos/1'
Geben Sie diesen Befehl in Ihr Terminal ein und Sie sollten diese Antwort erhalten:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
Die meisten APIs geben Ihnen entweder HTML oder JSON zurück, wenn Sie cURL-Befehle gegen sie ausführen. Nun, das ist nicht alles, was cURL für uns tun kann. In Wirklichkeit ist es ein sehr anspruchsvolles Werkzeug. Wenn Sie mehr über cURL erfahren möchten, empfehle ich Ihnen dringend, einen Blick in die cURL-Dokumentation zu werfen, um die Parameter besser zu verstehen. Alternativ können Sie auch den folgenden Befehl ausführen:
$ curl --help
Dies zeigt Ihnen einige Optionen, die Sie für cURL einstellen können:
Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail silently (no output at all) on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".
Wie Sie wahrscheinlich sehen können, sind das noch nicht einmal alle Optionen, die Sie für cURL einstellen können, es ist ein in Kategorien unterteiltes Menü. Sie haben wahrscheinlich erraten, dass, um alle Optionen, die Sie ausführen möchten, zu erhalten:
$ curl --help all
Wie benutzt man cURL in Python?
Für diesen Schritt gibt es 2 Voraussetzungen. Die erste ist ziemlich offensichtlich: Sie sollten Python auf Ihrem Rechner installieren. Sie können dies tun, indem Sie auf die offizielle Python-Website gehen und die richtige Version für Ihr Betriebssystem installieren. Achten Sie darauf, dass es sich um eine neue Version handelt, da ältere Versionen wahrscheinlich kein pip enthalten, das für die meisten Pakete, die wir verwenden wollen, erforderlich ist. Führen Sie anschließend den folgenden Befehl aus:
$ pip --version
Nach erfolgreicher Installation sollten Sie die installierte Version von pip zurückbekommen.
Andernfalls werden Sie eher diese Meldung erhalten:
"pip" wird nicht als externer oder interner Befehl betrachtet. Eine Batch-Datei ist ein Programm zum Ausführen.
Es ist sehr wichtig, dass Sie pip installiert haben, um fortzufahren, da Sie es für die Installation von Paketen benötigen.
Die zweite Voraussetzung ist, dass Sie mit der Syntax von Python vertraut sind oder zumindest Anfängererfahrung mit einer anderen Programmiersprache haben.
Warum cURL in Python verwenden?
Sie fragen sich wahrscheinlich: reicht es nicht aus, cURL von der Kommandozeile aus zu benutzen? Das ist richtig, aber in der realen Welt wollen wir die Daten, die wir vom Server zurückerhalten, irgendwie verarbeiten, und dafür brauchen wir eine Programmiersprache... Das ist der Moment, in dem Python ins Spiel kommt.
Warum Python verwenden?
Python ist eine Programmiersprache auf hohem Niveau, die für viele Zwecke verwendet wird und dank ihrer einfachen Syntax und Einfachheit auch für Anfänger leicht zu erlernen ist. Darüber hinaus gibt es eine riesige Community, die bereit ist, Ihnen zu helfen. Falls Sie also auf Probleme stoßen, sollten Sie nicht zögern, eine Frage zu stellen. Ein großartiger Ort, an dem Sie eine Frage stellen können, ist StackOverflow und es wird sich sicher jemand bei Ihnen melden.
Wie man cURL in Python integriert
Genau wie zuvor ist auch cURL in Python sehr einfach. Erinnern Sie sich daran, dass wir einen einzeiligen Befehl geschrieben haben, um die Daten vom Server abzurufen. Der Unterschied ist, dass Sie jetzt 2 Zeilen Code für diesen einfachen Aufruf schreiben müssen, zum Beispiel:
import os
os.system(f'curl "https://www.webscrapingapi.com/product/"')
Jetzt sehen wir den wahren Vorteil der Verwendung einer Programmiersprache. Wir können eine Funktion erstellen, die eine benutzerdefinierte URL annimmt und den Befehl curl gegen sie ausführt:
import os
def cURL(url):
return os.system(f'curl "{url}"')
cURL('https://www.webscrapingapi.com/blog/')
Sie können https://www.webscrapingapi.com/blog/ durch jede andere Website ersetzen, von der Sie Daten abrufen möchten. Herzlichen Glückwunsch, jetzt haben Sie ein Skript erstellt, das eine URL aufruft, den cURL-Befehl ausführt und das Ergebnis in der Konsole anzeigt. Sie können Python direkt in Ihrem Terminal ausführen, aber für eine bessere Programmiererfahrung empfehle ich Ihnen dringend, eine integrierte Entwicklungsumgebung zu verwenden. Es gibt viele Möglichkeiten, aber für Python empfehle ich PyCharm, das Sie hier herunterladen können
Wie ich bereits oben erwähnt habe, ist cURL keineswegs darauf beschränkt, sondern kann neben dem Senden von GET-Anfragen eine Vielzahl von Dingen tun. Es kann auch Dateien herunterladen oder POST-, PUT- oder DELETE-Anfragen senden. Hier ist ein Beispiel für eine Python-Funktion, die eine POST-Anfrage an https://httpbin.org/post sendet:
import os
def cURL(method,url,data):
return os.system(f'curl -X "{method}" --url "{url}" --data {data} ')
data = '{"foo":"bar"}'
cURL('POST', 'https://httpbin.org/post', data)
Wie Sie wahrscheinlich gesehen haben, wird der Befehl ein wenig anders, wenn Sie eine POST-Anfrage senden. Bei der vorherigen Anfrage mussten Sie die Parameter -X und -data nicht verwenden, da die Standardmethode von cURL GET ist. Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie von der httpbin-API eine Antwort erhalten, die Ihre Anfrage, die IP-Adresse, die Parameter und den von Ihnen übermittelten Textkörper enthält, was in etwa so aussehen würde.
{
"args": {},
"data": "",
"files": {},
"form": {
"{foo:bar}": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "9",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/X.XX.X",
"X-Amzn-Trace-Id": "Root=X-XXXXX-XXXXXX"
},
"json": null,
"origin": "0.0.0.0",
"url": "https://httpbin.org/post"
}
Zu diesem Zeitpunkt haben Sie bereits ein einfaches Tool erstellt, das GET-, POST-, PUT-, PATCH-, DELETE- usw. Anfragen senden kann, um Daten von einer API abzurufen. Wir können jetzt einfach die URL, die Methode und den Body direkt in unserem Python-Skript festlegen, anstatt sie manuell einzugeben. Dies ist jedoch nur ein kleiner Vorteil, den wir durch die Verwendung von cURL in Python haben. Der Hauptvorteil besteht darin, dass wir die Daten jetzt so verarbeiten können, wie wir es wollen, auch wenn die API uns keine Möglichkeit gibt, sie so zu erhalten, wie wir es wollen. Nehmen wir zum Beispiel an, dass wir eine Liste aller Benutzer erhalten, diese aber in zwei Gruppen aufteilen und die Benutzer der zweiten Gruppe abrufen möchten.
Dank Python können wir das tun, indem wir die Antwort in einer Variablen namens users speichern, die wir mit der Methode json.loads() in ein Array von JSON-Objekten umwandeln können, über die Sie hier weitere Informationen finden. Danach können wir durch das Benutzer-Array iterieren und nur die Benutzer in der zweiten Hälfte der Liste oder mit ihren ID-Nummern größer als die Mitte der Liste anzeigen. Zum besseren Verständnis wird das Ganze folgendermaßen in Code übersetzt:
import subprocess
import json
def cURL(url):
return subprocess.check_output(['curl',url])
users = json.loads(cURL('https://jsonplaceholder.typicode.com/users'))
for user in users:
if(user['id'] > len(users) / 2): print(user)
Sie haben wahrscheinlich bemerkt, dass wir anstelle von os nun die Bibliotheken subprocess und json verwenden. Wir verwenden die subprocess-Bibliothek, weil wir in der Lage sein wollen, die Ausgabe des Befehls zu speichern, im Gegensatz zum os-Modul, das den Befehl nur ausführt, ohne ihn zu speichern. Der Code ist eine einfache get-Anfrage an eine API, die uns eine Liste von Benutzern in Form von JSON-Objekten zurückgibt. Die Ausgabe sollte sein:
{'id': 6, 'name': 'Mrs. Dennis Schulist', 'username': 'Leopoldo_Corkery', 'email': 'Karley_Dach@jasper.info', 'address': {'street': 'Norberto Crossing', 'suite': 'Apt. 950', 'city': 'South Christy', 'zipcode': '23505-1337', 'geo': {'lat': '-71.4197', 'lng': '71.7478'}}, 'phone': '1-477-935-8478 x6430', 'website': 'ola.org', 'company': {'name': 'Considine-Lockman', 'catchPhrase': 'Synchronised bottom-line interface', 'bs': 'e-enable innovative applications'}}
{'id': 7, 'name': 'Kurtis Weissnat', 'username': 'Elwyn.Skiles', 'email': 'Telly.Hoeger@billy.biz', 'address': {'street': 'Rex Trail', 'suite': 'Suite 280', 'city': 'Howemouth', 'zipcode': '58804-1099', 'geo': {'lat': '24.8918', 'lng': '21.8984'}}, 'phone': '210.067.6132', 'website': 'elvis.io', 'company': {'name': 'Johns Group', 'catchPhrase': 'Configurable multimedia task-force', 'bs': 'generate enterprise e-tailers'}}
{'id': 8, 'name': 'Nicholas Runolfsdottir V', 'username': 'Maxime_Nienow', 'email': 'Sherwood@rosamond.me', 'address': {'street': 'Ellsworth Summit', 'suite': 'Suite 729', 'city': 'Aliyaview', 'zipcode': '45169', 'geo': {'lat': '-14.3990', 'lng': '-120.7677'}}, 'phone': '586.493.6943 x140', 'website': 'jacynthe.com', 'company': {'name': 'Abernathy Group', 'catchPhrase': 'Implemented secondary concept', 'bs': 'e-enable extensible e-tailers'}}
{'id': 9, 'name': 'Glenna Reichert', 'username': 'Delphine', 'email': 'Chaim_McDermott@dana.io', 'address': {'street': 'Dayna Park', 'suite': 'Suite 449', 'city': 'Bartholomebury', 'zipcode': '76495-3109', 'geo': {'lat': '24.6463', 'lng': '-168.8889'}}, 'phone': '(775)976-6794 x41206', 'website': 'conrad.com', 'company': {'name': 'Yost and Sons', 'catchPhrase': 'Switchable contextually-based project', 'bs': 'aggregate real-time technologies'}}
{'id': 10, 'name': 'Clementina DuBuque', 'username': 'Moriah.Stanton', 'email': 'Rey.Padberg@karina.biz', 'address': {'street': 'Kattie Turnpike', 'suite': 'Suite 198', 'city': 'Lebsackbury', 'zipcode': '31428-2261', 'geo': {'lat': '-38.2386', 'lng': '57.2232'}}, 'phone': '024-648-3804', 'website': 'ambrose.net', 'company': {'name': 'Hoeger LLC', 'catchPhrase': 'Centralized empowering task-force', 'bs': 'target end-to-end models'}}
Dies ist nur eine der Anwendungsmöglichkeiten von cURL in Python. Wir sind nicht mehr davon abhängig, dass die API Daten in der von uns gewünschten Weise zurücksendet. Wir können sie auf viele verschiedene Arten verarbeiten, z. B. anzeigen, ob eine Person in einer Antwortliste enthalten ist, die auf ihrem Namen, ihrer E-Mail, ihrer Telefonnummer oder einer anderen eindeutigen Eigenschaft einer Person basiert.
Nehmen wir zum Beispiel an, dass wir prüfen möchten, ob ein Name mit einem bestimmten Namen in einer Liste vorhanden ist oder nicht. Dazu können wir eine Funktion erstellen, die die in ein JSON-Array konvertierte Antwort entgegennimmt, das von Python geparst werden kann.
import subprocess
import json
def cURL(url):
return subprocess.check_output(['curl',url])
users = json.loads(cURL('https://jsonplaceholder.typicode.com/users'))
def check_if_user_exists(users,name):
for user in users:
if(user['name'] == name): print(f'An user called {name} exists in the list and has the id of {user["id"]}')
check_if_user_exists(users,'Clementina DuBuque')
Dieser Codeblock gibt dann diese Ausgabe zurück:
Ein Benutzer namens Clementina DuBuque existiert in der Liste und hat die ID 10
Herzlichen Glückwunsch! Sie haben ein Skript erstellt, das Daten von einem Server abruft, sie speichert und anschließend analysiert. Die Vorteile der Verwendung von Python hören hier nicht auf. Python hat sogar eine spezielle Schnittstelle für die Verwendung von cURL, die PycURL genannt wird und die wir jetzt besprechen werden.
Was ist PycURL?
Wie wir bereits erwähnt haben, ist PycURL kurz gesagt ein Python-Tool, das uns hilft, cURL natürlicher zu nutzen. Ein großer Vorteil ist, dass PycURL stark optimiert ist und Gleichzeitigkeit unterstützt, was bedeutet, dass es sehr schnell ist (schneller als die beliebte Python-Request-Bibliothek). Andererseits ist die Verwendung von PycURL nicht so einfach, wie wir es bisher gesehen haben, da es sich um ein Tool für fortgeschrittene Entwickler handelt. Sie sollten sich davon jedoch nicht einschüchtern lassen, denn am Ende werden Sie ein tieferes Verständnis von Netzwerken erlangen und mit Python besser zurechtkommen.
Wie wird es installiert?
Wie jedes andere Paket können Sie es mit pip installieren:
$ pip install pycurl
Aus Sicherheitsgründen möchten Sie diesmal auch certifi installieren, wenn Sie pycurl verwenden. Certifi ist ein Tool, das SSL-Zertifikate validiert und gleichzeitig die Identität des TLS-Hosts überprüft. Sie können es auf die gleiche Weise installieren:
$ pip install certifi
Sie können nun die erfolgreiche Installation testen, indem Sie das folgende Skript ausführen:
import certifi
print(certifi.where())
Die Ausgabe sollte der Ort sein, an dem das Paket installiert wurde:
/usr/local/lib/python3.10/site-packages/certifi/cacert.pem
Wie benutzt man pycURL?
Der Unterschied zu dem, was wir vorher gemacht haben, ist, dass wir jetzt nur noch Code schreiben und nicht mehr direkt Befehle ausführen. Kurz gesagt, wir erstellen eine Instanz der Klasse pycurl.Curl(), holen die Daten ab und schreiben sie in einen Puffer, den wir später dekodieren werden, um die empfangenen Daten lesen zu können:
import pycurl
import certifi
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://docs.webscrapingapi.com/')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Sie haben es erraten, genau wie in unseren vorherigen Beispielen, wird hier der HTML-Inhalt der WebScrapingAPI-Webseite abgerufen und in der Befehlszeile ausgegeben.
Eine POST-Anfrage ist nicht viel anders, außer dass Sie Ihrer Instanz der Klasse pycurl.Curl() mitteilen müssen, dass Sie eine Post-Methode verwenden werden, und den Body und die Kopfzeilen festlegen müssen, falls dies der Fall ist, und zwar so:
import pycurl
import certifi
import json
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://httpbin.org/post')
c.setopt(pycurl.HTTPHEADER, [ 'Content-Type: application/json' , 'Accept: application/json'])
data = json.dumps({"foo": "bar"})
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1'))
Und wir sollten genau wie zuvor eine Antwort zurückbekommen, die Ihre Anfrage, IP-Adresse, Parameter und den Text enthält:
{
"args": {},
"data": "",
"files": {},
"form": {
"{foo:bar}": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "9",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/X.XX.X",
"X-Amzn-Trace-Id": "Root=X-XXXXX-XXXXXX"
},
"json": null,
"origin": "0.0.0.0",
"url": "https://httpbin.org/post"
}
Wie ich bereits erwähnt habe, gibt es nur einige grundlegende Dinge, die pycURL für uns tun kann. pycURL ist ein sehr komplexes und ausgeklügeltes Werkzeug, über das wir viele Artikel schreiben können. Wenn Sie mehr darüber erfahren möchten, empfehle ich Ihnen, die Dokumentation zu lesen.
Zusammenfassung
Zusammenfassend lässt sich sagen, dass die Verwendung von cURL in Python sehr effektiv ist, viel Zeit spart und darüber hinaus ein Ausgangspunkt für einige interessante Projekte in Bereichen wie Datenanalyse oder Web-Scraping sein kann. cURL und Python sollte man sich erst einmal aneignen, um dann mit pycURL fortzufahren. Ich hoffe, Sie haben diese Ressource als nützlich empfunden, um zu lernen, wie man cURL in Python verwendet, und Sie werden damit herumspielen und einige Skripte erstellen.
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

Lernen Sie, wie Sie mit Scrapy und Splash dynamische JavaScript-gerenderte Websites scrapen können. Von der Installation über das Schreiben eines Spiders bis hin zum Umgang mit Seitenumbrüchen und der Verwaltung von Splash-Antworten bietet dieser umfassende Leitfaden Schritt-für-Schritt-Anleitungen für Anfänger und Experten gleichermaßen.


Erforschen Sie die transformative Kraft des Web Scraping im Finanzsektor. Von Produktdaten bis zur Stimmungsanalyse bietet dieser Leitfaden Einblicke in die verschiedenen Arten von Webdaten, die für Investitionsentscheidungen zur Verfügung stehen.


Starten Sie mit WebScrapingAPI, der ultimativen Web-Scraping-Lösung! Sammeln Sie Echtzeitdaten, umgehen Sie Anti-Bot-Systeme und genießen Sie professionellen Support.
