使用請求下載映像
使用 Python 的 requests 模組從網路下載映像可能是一項簡單的任務。然而,當從 urllib2 切換到 requests 時,了解用於檢索影像資料的屬性的差異至關重要。
最初,使用 urllib2 的程式碼使用 img.read() 讀取影像,而所需的影像要求方法有 img = r.raw.read()。這是錯誤的,因為 r.raw 是一個文件對象,而不是實際的圖像資料。
要解決此問題,有兩種可行的解決方案:
使用Response.raw 檔案物件:
將decode_content 設定為True 以強制解壓縮壓縮回應。這允許您使用 Shutil.copyfileobj() 將資料串流傳輸到檔案物件。
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)
迭代回應:
此方法可確保資料解壓縮。
r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: for chunk in r: f.write(chunk)
或者,您可以指定使用 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)
請記住以二進位模式('wb')開啟目標檔案以防止換行符被翻譯。另外,設定stream=True可以防止整個影像被下載到記憶體中。
以上是如何使用Python的Requests庫有效率地下載圖片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!