Herunterladen von Bildern mit dem Anforderungsmodul in Python
In dem Bemühen, ein Bild aus dem Web mithilfe des Anforderungsmoduls herunterzuladen und zu speichern, hat ein Entwickler stößt auf Schwierigkeiten. Der bereitgestellte Code funktioniert zunächst, aber der geänderte Code mithilfe von Anfragen führt zu einem Fehler.
Der Fehler entsteht durch die Verwendung eines falschen Attributs aus der Anfrageantwort. Um das Bild mithilfe von Anfragen erfolgreich abzurufen, gibt es zwei Optionen:
Verwendung des Dateiobjekts „response.raw“
Die Nutzung des Attributs „response.raw“ gibt die Rohdaten des zurück Antwort. Die Dekodierung komprimierter Antworten (z. B. mit GZIP oder Deflate) erfolgt nicht automatisch. Um die Dekomprimierung zu erzwingen, setzen Sie das Attribut decode_content auf True. Anschließend verwenden Sie Shutil.copyfileobj(), um die Daten in ein Dateiobjekt zu streamen.
import requests import shutil r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f)
Iterieren über die Antwort
Ein alternativer Ansatz besteht darin, über die Antwort zu iterieren , was die Datendekomprimierung gewährleistet.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r: f.write(chunk)
Das Anpassen der Blockgröße ist mit Response.iter_content() möglich. Methode.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r.iter_content(1024): f.write(chunk)
Denken Sie daran, die Zieldatei im Binärmodus zu öffnen, um die Übersetzung von Zeilenumbrüchen zu verhindern, und setzen Sie stream=True, um speicherintensive vollständige Downloads zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie lade ich Bilder mit dem Anforderungsmodul von Python effizient herunter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!