requests如何友好地請求下載大檔案?requests實現分段下載、斷點續傳
前言
requests.get()請求一個視訊連線連結,如果視訊太大怎麼辦?
requests.get()下載到一半暫停了,想要接著下載怎麼辦?
requests如何友好地請求下載大檔案?
當我們用requests.get()
請求某個連結時,如果是大檔案,比如下載1GB大小的視訊,那該怎麼辦呢?
在get()方法裡面加一個引數stream=True
,即:requests.get(url,stream=True)
加 和 不加stream引數的區別:
不加stream引數:
get請求會把所有的資料請求下來,一個視訊1個G的話,會把1G的視訊下載到記憶體裡面,然後再進一步操作。
加stream引數:
get請求會先建立連線,而不會把content內容或text內容下載到記憶體裡,等開始對content操作的時候,get請求這個時候才開始下載資料。
通常還可以這樣分一段一段寫入:
import requests
url = ''
r = requests.get(url,stream=True)
with open('filename', 'wb') as fp:
for item in r.iter_content(10240):
# 10240表示每次會寫入10240個位元組,即10KB
fp.write(item)
這樣就可以友好地下載大檔案了,對於下載較大的視訊尤其管用。
requests實現斷點續傳
在requests.get()的請求頭headers加上Range欄位就可以實現斷點續傳了。
語法格式如下:
headers = {'Range': 'bytes=%d-%d'%(start,end)}
在%d-%d的位置傳入起始位元組數 和 終止位元組數。
例如:
# 從第0個位元組下載到第500個位元組(包括第500個位元組)
headers = {'Range': 'bytes=0-500'}
# 從第501個位元組下載到最後一個位元組
headers = {'Range': 'bytes=501-'}
嘗試用斷點續傳的方式下載一個圖片試試:
找一個圖片連結,該圖片大小為185KB,即185*1024個位元組
先下載前面100KB:
import requests
headers = {'Range': 'bytes=0-%d'%(100*1024)}
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606242360113&di=6f1e59e7ad5cae73389a44f65c466242&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201505%2F03%2F20150503152411_JsYLR.jpeg'
r = requests.get(url,headers=headers)
with open('night.jpg', 'wb') as fp:
fp.write(r.content)
看看只下載了100KB的這張圖片:
接著下載剩下的內容
headers = {'Range': 'bytes=%d-'%(100*1024+1)}
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1606242360113&di=6f1e59e7ad5cae73389a44f65c466242&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201505%2F03%2F20150503152411_JsYLR.jpeg'
r = requests.get(url,headers=headers)
with open('night.jpg', 'ab') as fp: # 注意用 'ab'模式開啟檔案
fp.write(r.content)
完整圖片:
會不會覺得斷點續傳也就那樣?
總結
- 友好地下載大檔案:
requests.get(stream=True)
- 斷點續傳:在請求頭headers上加入
{'Range': 'bytes=%d-%d'}
欄位
相關文章
- Android下載檔案(一)下載進度&斷點續傳Android斷點
- 使用curl斷點續傳下載檔案斷點
- 如何使用post請求下載檔案
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- ajax請求下載excel檔案Excel
- Android斷點續傳下載器JarvisDownloaderAndroid斷點JAR
- Linux如何實現斷點續傳檔案功能?Linux斷點
- JAVA實現大檔案分片上傳斷點續傳Java斷點
- Feign實現檔案上傳下載
- Node.js實現大檔案斷點續傳Node.js斷點
- Java實現檔案斷點續傳Java斷點
- C#如何使用HttpClient對大檔案進行斷點上傳和下載C#HTTPclient斷點
- Requests如何在Python爬蟲中實現get請求?Python爬蟲
- 使用 Requests 庫和 PHP 的下載PHP
- Android 中 Service+Notification 斷點續傳下載Android斷點
- SpringMVC實現檔案上傳&下載(2)SpringMVC
- 使用requests庫來傳送HTTP請求HTTP
- 圖解:HTTP 範圍請求,助力斷點續傳、多執行緒下載的核心原理圖解HTTP斷點執行緒
- 1. 大檔案上傳如何斷點續傳斷點
- 教你如何實現c#檔案上傳下載功能C#
- python requests get請求 如何獲取所有請求Python
- 前端實現檔案下載和拖拽上傳前端
- 『居善地』介面測試 — 5、使用Requests庫傳送POST請求
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- requests模組 - get 請求
- requests 模組 - post 請求
- 檔案上傳下載攻略,斷點續傳等等那些事兒,滿滿乾貨(react&node)斷點React
- 檔案上傳下載
- 點選按鈕,實現檔案下載,通過按鈕傳送url,spring後臺實現伺服器端檔案下載。Spring伺服器
- 精講RestTemplate第6篇-檔案上傳下載與大檔案流式下載REST
- React中使用fetch實現檔案上傳下載React
- vue實現Excel檔案的上傳與下載VueExcel
- JavaWeb之實現檔案上傳與下載工具JavaWeb
- JavaWeb之實現檔案上傳與下載元件JavaWeb元件
- JavaWeb之實現檔案上傳與下載示例JavaWeb
- 轉:檔案的斷點下載服務端斷點服務端
- 使用Servlet實現檔案下載Servlet