request下载进度显示,多线程爬取麦子学院视频

#encoding:utf8
import _thread
import time
import requests
from lxml import etree
import re
import sys
from contextlib import closing
# 为线程定义一个函数
class ProgressBar(object):

def __init__(self, title,
count=0.0,
run_status=None,
fin_status=None,
total=100.0,
unit='', sep='/',
chunk_size=1.0):
super(ProgressBar, self).__init__()
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 or ""
self.fin_status = fin_status or " " * len(self.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, status=None):
self.count += count
# if status is not None:
self.status = status or self.status
end_str = "\r"
if self.count >= self.total:
end_str = '\n'
self.status = status or self.fin_status

print(self.__get_info())
print(end=end_str)
#以上是进度条设置

def print_time(threadName='Thread-1', delay='http://newoss.maiziedu.com/qiniu/1shuozaiqianmiandehua.mp4'):
da = {'Referer': 'http://m.maiziedu.com/course/393-4373/',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'}
with closing(requests.get(delay, stream=True,headers=da)) as response:
chunk_size = 1024 # 单次请求最大值
content_size = int(response.headers['content-length']) # 内容体总大小
progress = ProgressBar(threadName, total=content_size,
unit="KB", chunk_size=chunk_size, run_status="正在下载", fin_status="下载完成")
with open('F:\\10\\bsbs\\mai\\'+threadName+'.mp4', "wb") as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)

progress.refresh(count=len(data))

print(threadName+'开始')

# yuan = requests.get(delay, headers=da).content
# op = open('F:\\10\\bsbs\\mai\\'+threadName+'.mp4', 'wb')
# op.write(yuan)
# op.close()


# 创建两个线程
# print_time()
try:
_thread.start_new_thread(print_time, ("Thread-1",'http://newoss.maiziedu.com/qiniu/1shuozaiqianmiandehua.mp4'))
_thread.start_new_thread(print_time, ("Thread-2",'http://newoss.maiziedu.com/qiniu/8lei.mp4'))
except:
print("Error: unable to start thread")


while 1:
pass

print("Main Finished")
原文地址:https://www.cnblogs.com/lianghongrui/p/6857106.html