首頁 >後端開發 >Python教學 >如何使用Python的'requests”模組正確下載映像?

如何使用Python的'requests”模組正確下載映像?

Susan Sarandon
Susan Sarandon原創
2024-12-11 18:06:17690瀏覽

How to Properly Download Images Using Python's `requests` Module?

使用Python 的requests 模組下載映像

嘗試使用Python 的requests 模組從網路下載映像時,與使用urllib2 的urlopen 相比,您可能會遇到程式碼問題方法。本文解決了這些挑戰並提供了解決方案。

原始程式碼供參考

img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
    f.write(img.read())

新程式碼供參考

r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
    img = r.raw.read()
    with open(path, 'w') as f:
        f.write(img)

問題

問題使用requests 時會出現此問題,因為包含問題

問題使用requests 時會出現此問題,因為包含圖像資料的回應中的屬性與urlopen中的屬性不同urllib2.

解決方案

    要從請求回應中檢索影像數據,有兩個選項:
  1. 使用response.raw文件對象:
此方法需要將decode_content設定為True,然後將資料串流傳輸到檔案物件:
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)        
  1. 迭代回應:
此方法確保請求在迭代期間解碼資料:
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)

透過在請求呼叫中設定stream=True,可以防止一次將整個映像下載到記憶體中。該文件應以二進位模式開啟以避免錯誤。

以上是如何使用Python的'requests”模組正確下載映像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn