上代码分析
import logging
import time
import requests
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s')
logger = logging.getLogger(__name__)
def down():
start_time = time.time()
url = 'http://preview.ewang.com/movie/videos/854x48067369f5dbb3849c2b444658990fc3eb8.mp4'
resp = requests.get(url,stream=True, verify=False)
# 对链接发起请求,获取返回的头信息,包含链接对应的文件大小
headers = resp.headers
# print(heasers)
# 获取返回的头信息中文件大小,当前单位为B,转化为MB
c_length = headers['Content-Length']
all_size = int(c_length) / 1024 / 1024
all_size = ("%.2f" % all_size)
# print(c_length)
# 下载尺寸初始为0
down_size = 0
# 文件名
file_name = '1.mp4'
with open(file_name, 'wb') as f:
for chunk in resp.iter_content(5555):
if chunk:
try:
f.write(chunk)
# 目前文件大小
now_size = down_size / 1024 / 1024
now_size = ("%.2f" % now_size)
# 每次写入,文件增加
down_size += len(chunk)
# 下载速度,这是总速度,注意初始时间的位置和文件置零的位置,都在循环外
down_speed = down_size / 1024 / (time.time() - start_time)
down_speed = ("%.2f" % down_speed)
# 单行打印
print("\r", file_name, ' 下载中',
' {} KB/s - {} MB, 共 {} MB'.format(down_speed, now_size, all_size), end="", flush=True)
except:
logging.info('下载异常')
print("\r", file_name, ' 下载结束', end="", flush=True)
logging.info('下载启动')
down()
关于日志logging的使用配置:
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s')
里面format了六个参数,asctime,格式化的标准时间,name,是root,权限之类的吧,levelname,等级,这里是info,常见的有debug,warning,error等,filename,是当前执行的python文件名,lineno,行数,message,信息。
如上代码:
时间,权限,等级是INFO ,执行的是log.py文件,在47行,打印的message是下载启动。
这个代码还动态的显示了下载速度,感兴趣可以试一下。