de
English
Español
中國人
Tiếng Việt
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Beim Web Scraping geht es darum, Daten von Websites für Analyse, Forschung oder Automatisierung zu extrahieren. In diesem cURL-Python-Tutorial lernen Sie anhand von praktischen Beispielen, wie Sie mit PycURL Webanfragen durchführen können. Wir zeigen auch, wie man eine typische curl-Anfrage in Python konvertiert und vergleichen sie mit Bibliotheken wie Requests, HTTPX und AIOHTTP.
Das Verständnis dieses Konzepts ist für die Python-Integration von entscheidender Bedeutung, also lassen Sie uns mit den Grundlagen beginnen. Sie können Python cURL-Befehle direkt im Terminal verwenden, um Aufgaben wie GET- und POST-Anfragen auszuführen.
Beispiel für cURL-Befehle:
# GET request
curl -X GET "https://httpbin.org/get"
# POST request
curl -X POST "https://httpbin.org/post"
Um cURL zu verwenden, installieren Sie die Python-Bibliothek PycURL.
Installieren:
pip install pycurl
Die Verwendung von curl in Python bietet detaillierte Kontrolle über HTTP-Anfragen. Im Folgenden wird anhand eines Beispiels gezeigt, wie eine GET-Anfrage mit PycURL gestellt wird:
import pycurl
import certifi
from io import BytesIO
# Erstellen eines BytesIO-Objekts zur Aufnahme der Antwortdaten
buffer = BytesIO()
# Ein cURL-Objekt initialisieren
c = pycurl.Curl()
# Legen Sie die URL für die HTTP-GET-Anfrage fest
c.setopt(c.URL, 'https://httpbin.org/get')
# Einstellen des Puffers zur Erfassung der Ausgabedaten
c.setopt(c.WRITEDATA, buffer)
# Legen Sie den Pfad zur CA-Bundle-Datei für die SSL/TLS-Verifizierung fest
c.setopt(c.CAINFO, certifi.where())
# Ausführen der HTTP-Anfrage
c.perform()
# Das Schließen des cURL-Objekts hilft, die verbrauchten Ressourcen freizugeben
c.close()
# Abrufen des Inhalts der Antwort aus dem Puffer
body = buffer.getvalue()
# Dekodieren und Drucken des Antwortkörpers
print(body.decode('iso-8859-1'))
Das Senden von Daten mit POST - Curl an Python-Anfragen - ist üblich. Mit der Bibliothek verwenden Sie die Option POSTFIELDS. Hier ist ein Beispiel für eine POST-Anfrage mit PycURL:
import pycurl
import certifi
from io import BytesIO
# Erstellen eines BytesIO-Objekts zur Aufnahme der Antwortdaten
buffer = BytesIO()
# Ein cURL-Objekt initialisieren
c = pycurl.Curl()
# Legen Sie die URL für die HTTP-POST-Anforderung fest
c.setopt(c.URL, 'https://httpbin.org/post')
# Einstellen der zu verbuchenden Daten
post_data = 'param1="pycurl"m2=article'
c.setopt(c.POSTFIELDS, post_data)
# Einstellen des Puffers zur Erfassung der Ausgabedaten
c.setopt(c.WRITEDATA, buffer)
# Legen Sie den Pfad zur CA-Bundle-Datei für die SSL/TLS-Verifizierung fest
c.setopt(c.CAINFO, certifi.where())
# Ausführen der HTTP-Anfrage
c.perform()
# Schließen Sie das cURL-Objekt, um Systemressourcen freizugeben
c.close()
# Abrufen des Inhalts der Antwort aus dem Puffer
body = buffer.getvalue()
# Dekodieren und Drucken des Antwortkörpers
print(body.decode('iso-8859-1'))
Benutzerdefinierte Kopfzeilen oder Authentifizierung sind bei HTTP-Anfragen oft erforderlich. Umgang mit benutzerdefinierten Headern: HTTP-Anfragen erfordern oft Authentifizierungs-Token oder benutzerdefinierte Header. Der Umgang mit benutzerdefinierten Headern kann effizient erfolgen, wenn Sie wissen, wie man Python curl json parse Techniken verwendet:
import pycurl
import certifi
from io import BytesIO
# Erstellen eines BytesIO-Objekts zur Aufnahme der Antwortdaten
buffer = BytesIO()
# Ein cURL-Objekt initialisieren
c = pycurl.Curl()
# Legen Sie die URL für die HTTP-GET-Anfrage fest
c.setopt(c.URL, 'https://httpbin.org/get')
# Benutzerdefinierte HTTP-Header festlegen
c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json'])
# Einstellen des Puffers zur Erfassung der Ausgabedaten
c.setopt(c.WRITEDATA, buffer)
# Legen Sie den Pfad zur CA-Bundle-Datei für die SSL/TLS-Verifizierung fest
c.setopt(c.CAINFO, certifi.where())
# Ausführen der HTTP-Anfrage
c.perform()
# Wenn Sie fertig sind, schließen Sie das cURL-Handle, um alles aufzuräumen
c.close()
# Abrufen des Inhalts der Antwort aus dem Puffer
body = buffer.getvalue()
# Dekodieren und Drucken des Antwortkörpers
print(body.decode('iso-8859-1'))
Umgang mit XML-Antworten Bei der Arbeit mit XML-Parsing und dem Umgang mit verschiedenen APIs ist der Umgang mit XML-Antworten unerlässlich. Im Folgenden finden Sie ein Beispiel für die Verarbeitung von XML-Antworten mit PycURL:
# Erforderliche Bibliotheken importieren
import pycurl # Eine Bibliothek zum Senden von HTTP-Anfragen
import certifi # Bibliothek zur Überprüfung von SSL-Zertifikaten
from io import BytesIO # Bibliothek zur Behandlung von Byte-Streams
import xml.etree.ElementTree as ET # Bibliothek zum Parsen von XML
# Erstellen eines Puffers zur Aufnahme der Antwortdaten
buffer = BytesIO()
# Initialisieren eines cURL-Objekts
c = pycurl.Curl()
# Legen Sie die URL für die HTTP-GET-Anfrage fest
c.setopt(c.URL, 'https://www.google.com/sitemap.xml')
# Einstellen des Puffers zur Erfassung der Ausgabedaten
c.setopt(c.WRITEDATA, buffer)
# Legen Sie den Pfad zur CA-Bundle-Datei für die SSL/TLS-Verifizierung fest
c.setopt(c.CAINFO, certifi.where())
# Ausführen der HTTP-Anfrage
c.perform()
# Schließen Sie das cURL-Objekt, um Systemressourcen freizugeben
c.close()
# Abrufen des Inhalts der Antwort aus dem Puffer
body = buffer.getvalue()
# Parsen des XML-Inhalts als ElementTree-Objekt
root = ET.fromstring(body.decode('utf-8'))
# Tag und Attribute des Wurzelelements des XML-Baums ausgeben
print(root.tag, root.attrib)
Die Behandlung von Fehlern bei HTTP-Anfragen ist ein wichtiger Aspekt bei der Arbeit mit externen Integrationen. Hier ist ein Beispiel für die Fehlerbehandlung mit PyCURL:
import pycurl # Importieren Sie die pycurl-Bibliothek
import certifi # Importieren Sie die Zertifizierungsbibliothek
from io import BytesIO # Importieren von BytesIO für die Verarbeitung von Byte-Streams
# Ein Curl-Objekt initialisieren
c = pycurl.Curl()
buffer = BytesIO()
# Legen Sie die URL für die HTTP-Anfrage fest
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# Ausführen der HTTP-Anfrage
c.perform()
except pycurl.error as e:
# Wenn während der Anfrage ein Fehler auftritt, fangen Sie die pycurl.error-Ausnahme ab
errno, errstr = e.args # Abrufen der Fehlernummer und der Fehlermeldung
print(f'Error: {errstr} (errno {errno})') # Druckt die Fehlermeldung und die Fehlernummer
finally:
# Schließen Sie das cURL-Objekt, um Systemressourcen freizugeben
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # Dekodieren und Drucken des Antwortkörpers
Der korrigierte Code passt die URL an https://example.com an, wodurch das Protokollproblem behoben wird. Danach wiederholt der Autor die gleichen Schritte der Konfiguration der Anfrage, ihrer Ausführung und der Fehlerbehandlung wie im ersten Ausschnitt. Nach erfolgreicher Ausführung wird der Antwortkörper erneut dekodiert und ausgedruckt. Dies unterstreicht, wie wichtig es ist, URLs korrekt zu konstruieren, einen korrekten Anfragefluss aufrechtzuerhalten und vor allem eine robuste Fehlerbehandlung zu implementieren, wenn HTTP-Anfragen mit PycURL gestellt werden.
import pycurl # Importieren Sie die pycurl-Bibliothek
import certifi # Importieren Sie die Zertifizierungsbibliothek
from io import BytesIO # Importieren von BytesIO für die Verarbeitung von Byte-Streams
# Reinitialisieren Sie das Curl-Objekt
c = pycurl.Curl()
buffer = BytesIO()
# Korrigieren Sie die URL zur Verwendung von HTTPS
c.setopt(c.URL, 'https://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# Ausführen der korrigierten HTTP-Anfrage
c.perform()
except pycurl.error as e:
# Wenn während der Anfrage ein Fehler auftritt, fangen Sie die pycurl.error-Ausnahme ab
errno, errstr = e.args # Abrufen der Fehlernummer und der Fehlermeldung
print(f'Error: {errstr} (errno {errno})') # Druckt die Fehlermeldung und die Fehlernummer
finally:
# Schließen Sie das cURL-Objekt, um Systemressourcen freizugeben
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # Dekodieren und Drucken des Antwortkörpers
Bei der Arbeit mit Python-Konvertierungen von cURL-Anfragen ist es nützlich zu wissen, dass cURL viele erweiterte Optionen zur Steuerung des HTTP-Verhaltens bietet, z. B. die Behandlung von Cookies und Timeouts. Nachfolgend ein Beispiel, das die erweiterten Optionen zur Ausführung von curl-Befehlen in Python zeigt.
import pycurl # Importieren Sie die pycurl-Bibliothek
import certifi # Importieren Sie die certifi-Bibliothek für die SSL-Zertifikatsprüfung
from io import BytesIO # Importieren von BytesIO für die Verarbeitung von Byte-Streams
# Erstellen eines Puffers zur Aufnahme der Antwortdaten
buffer = BytesIO()
# Ein Curl-Objekt initialisieren
c = pycurl.Curl()
# Legen Sie die URL für die HTTP-Anfrage fest
c.setopt(c.URL, 'http://httpbin.org/cookies')
# Aktivieren Sie Cookies, indem Sie ein bestimmtes Schlüssel-Wert-Paar festlegen
c.setopt(c.COOKIE, 'cookies_key=cookie_value')
# Setzen Sie eine Zeitüberschreitung von 30 Sekunden für die Anfrage
c.setopt(c.TIMEOUT, 30)
# Einstellen des Puffers zur Erfassung der Ausgabedaten
c.setopt(c.WRITEDATA, buffer)
# Legen Sie den Pfad zur CA-Bundle-Datei für die SSL/TLS-Verifizierung fest
c.setopt(c.CAINFO, certifi.where())
# Ausführen der HTTP-Anfrage
c.perform()
# Schließen Sie das cURL-Objekt, um Systemressourcen freizugeben
c.close()
# Abrufen des Inhalts der Antwort aus dem Puffer
body = buffer.getvalue()
# Dekodierung des Antwortkörpers mit UTF-8-Kodierung und Ausdruck
print(body.decode('utf-8'))
Vier Bibliotheken sind bei der Arbeit mit HTTP-Anfragen in Python sehr beliebt: PyCurl, Requests, HTTPX und AIOHTTP. Jede hat ihre Stärken und Schwächen. Hier ist ein Vergleich, der Ihnen hilft, das richtige Tool für Ihre Bedürfnisse zu wählen:
| Merkmal | PycURL | Requests | HTTPX | AIOHTTP |
|---|---|---|---|---|
| Benutzerfreundlichkeit | Mäßig | Sehr leicht | Einfach | Mäßig |
| Leistung | Hoch | Mäßig | Hoch | Hoch |
| Asynchrone Unterstützung | Nein | Nein | Ja | Ja |
| Streaming | Ja | Begrenzt | Ja | Ja |
| Unterstützung des Protokolls | Umfangreich (unterstützt viele Protokolle) | HTTP/HTTPS | HTTP/HTTPS, HTTP/2, WebSockets | HTTP/HTTPS, WebSockets |
Fortgeschrittene Benutzer werden die benutzerdefinierten Steuerelemente schätzen, die mit HTTP-Befehlen angeboten werden; sie werden feststellen, dass PycURL die Erwartungen an die Leistung übertrifft. Andererseits sind Requests und HTTPX besser für einfachere, intuitivere Szenarien geeignet. AIOHTTP zeichnet sich durch die Handhabung asynchroner Aufgaben aus und bietet effektive Werkzeuge für die Verwaltung asynchroner Anfragen.
Wie Sie sehen, kann sich Ihre Wahl je nach Umfang des Projekts ändern - Flexibilität oder Geschwindigkeit. In fortgeschrittenen Kontexten ist PycURL die bevorzugte, wenn nicht die einzige Wahl.
Wenn Sie bei HTTP-Anfragen Wert auf Leistung und Kontrolle auf niedriger Ebene legen, ist PycURL eine gute Wahl. Das Erlernen der Verwendung von cURL in Python ist vielleicht nicht der anfängerfreundlichste Weg, aber es erschließt leistungsstarke Funktionen, die abstraktere Bibliotheken oft verbergen. Von Web Scraping und XML-Verarbeitung bis hin zur Verwaltung von benutzerdefinierten Headern und Cookies - PycURL erledigt alles mit Präzision. Für einfachere Aufgaben, asynchrone Arbeitsabläufe oder eine einfache Bedienung sind Bibliotheken wie Requests, HTTPX und AIOHTTP jedoch möglicherweise besser geeignet.
Bemerkungen: 0