1.下載小檔案
如果是小檔案,比如說普通圖片,完全可以一次請求加載到記憶體,即最普通的get請求
很多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:623406465
import requests
req = requests.get("http://www.test.com/xxxxx/test.jpg")
with open(r"c:\test.jpg", "wb") as f:
f.write(req.content)
2.下載大檔案
如果是大檔案,一次性加載可能會導致記憶體爆滿,所以可以采取分塊讀寫的方法,每次只讀寫一小塊就可以了
import requests
req = requests.get("http://www.test.com/xxxxx/test.jpg", stream=True)
with open(r"c:\test.jpg", "wb") as f:
for chunk in req.iter_content(chunk_size=1024): # 每次加載1024位元組
f.write(chunk)
上面用到的是iter_content()方法讀取檔案塊,還有一個iter_lines()方法,功能與前者差不多,不過原始碼注釋的最后一行寫著“This method is not reentrant safe”
3.下載改進
我們可以把稍微改進一下,實作斷點續傳功能,這樣在下載大檔案被中斷的時候可以繼續下載,為了方便使用,我們可以把代碼封裝成一個類
import sys
import requests
import os
class Downloader(object):
def __init__(self, url, file_path):
self.url = url
self.file_path = file_path
def start(self):
res_length = requests.get(self.url, stream=True)
total_size = int(res_length.headers['Content-Length'])
print(res_length.headers)
print(res_length)
if os.path.exists(self.file_path):
temp_size = os.path.getsize(self.file_path)
print("當前:%d 位元組, 總:%d 位元組, 已下載:%2.2f%% " % (temp_size, total_size, 100 * temp_size / total_size))
else:
temp_size = 0
print("總:%d 位元組,開始下載..." % (total_size,))
headers = {'Range': 'bytes=%d-' % temp_size,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"}
res_left = requests.get(self.url, stream=True, headers=headers)
with open(self.file_path, "ab") as f:
for chunk in res_left.iter_content(chunk_size=1024):
temp_size += len(chunk)
f.write(chunk)
f.flush()
done = int(50 * temp_size / total_size)
sys.stdout.write("\r[%s%s] %d%%" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size))
sys.stdout.flush()
if __name__ == '__main__':
url = "https://vd2.bdstatic.com/mda-imt4u2h7u35k/xxxxxxx"
path = "C:/test.mp4"
downloader = Downloader(url, path)
downloader.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180714.html
標籤:其他
上一篇:華為技術官又曝神作,兩份堪稱‘千古絕唱’作業系統筆記現已瘋傳
下一篇:re模塊
