Bilder mit Anfragen herunterladen
Das Herunterladen von Bildern aus dem Web mit dem Anfragemodul von Python kann eine unkomplizierte Aufgabe sein. Beim Wechsel von urllib2 zu Anfragen ist es jedoch wichtig, die Unterschiede in den Attributen zu verstehen, die zum Abrufen der Bilddaten verwendet werden.
Zunächst las der Code, der urllib2 verwendet, das Bild mit img.read(), während das gewünschte Ansatz mit Anfragen hat img = r.raw.read(). Dies ist falsch, da r.raw ein Dateiobjekt und nicht die tatsächlichen Bilddaten ist.
Um dieses Problem zu beheben, gibt es zwei praktikable Lösungen:
Verwenden das Response.raw-Dateiobjekt:
Setzen Sie decode_content auf True, um die Dekomprimierung komprimierter Antworten zu erzwingen. Dadurch können Sie die Daten mithilfe von Shutil.copyfileobj() in ein Dateiobjekt streamen.
import requests import shutil r = requests.get(url, 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:
Diese Methode stellt die Datendekomprimierung sicher.
r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r: f.write(chunk)
Alternativ können Sie eine benutzerdefinierte Blockgröße mit angeben Response.iter_content().
r = requests.get(url, 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 ('wb') zu öffnen, um zu verhindern, dass Zeilenumbrüche übersetzt werden. Legen Sie außerdem stream=True fest, um zu verhindern, dass das gesamte Bild in den Speicher heruntergeladen wird.
Das obige ist der detaillierte Inhalt vonWie lade ich Bilder mithilfe der Requests-Bibliothek von Python effizient herunter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!