標籤:

python視頻下載,增加下載進度

在線看片的時候想把片下載下來,用chrome找到視頻的地址,requests.get可以直接獲得視頻,發現不夠直觀,加了簡單的下載進度。

參照

python中如何使用requests模塊下載文件並獲取進度提示? - zhihu.com/question/4113

requests.get函數里有一個參數stream,默認False,此時會下載請求鏈接的全部內容。當stream設置未True時候,將只會下載headers的內容,網頁body content的內容還沒有下載下來,只有需要用到body content裡面的內容時候才會進行下載。使用stream=True時候要注意需要自行關閉response,類似文件讀寫。可以採用close的方法。

# stream為true時候,需要手動關閉response,使用with的closing方法將response操作完成後關閉 with closing(requests.get(url, headers=headers,stream=True)) as response: chunk_size = 1024 # 單次請求最大值,可以加大一點 content_size = int(response.headers[content-length]) # 內容體總大小 # 初始化類對象 progress = ProgressBar(file_name, total=content_size, chunk_size=chunk_size, run_status="正在下載", fin_status="下載完成") with open(file_name, "wb") as file: # 利用response.iter_content控制單次下載的內容大小,每次下載chunk_size的數量 for data in response.iter_content(chunk_size=chunk_size): file.write(data) # 用於輸出進度 progress.refresh(count=len(data))

以下ProgressBar類

class ProgressBar(object): def __init__(self,title,count,run_status,fin_status,chunk_size,total,unit=KB,sep=/): self.info = "【%s】%s %.2f %s %s %.2f %s" self.title = title self.total = total self.count = count self.chunk_size = chunk_size self.status = run_status self.fin_status = fin_status self.unit = unit self.seq = sep def get_info(self): # 【名稱】狀態 進度 單位 分割線 總數 單位 _info = self.info % (self.title, self.status, self.count / self.chunk_size, self.unit, self.seq, self.total / self.chunk_size, self.unit) return _info def refresh(self, count=1): # 列印進度信息,會有很多行 # count記錄了下載的量 self.count += count if self.count >= self.total: self.status = self.fin_status print(self.get_info())

代碼地址

lyg4795/filmdownloadgithub.com圖標
推薦閱讀:

想要用 python 做爬蟲, 是使用 scrapy框架還是用 requests, bs4 等庫?
selenium爬蟲被檢測到 該如何破?
用Python給頭像加上聖誕帽
由淺入深寫代理(3) -socks5 代理

TAG:requests | Python |