# coding: utf-8
import re
import requests
from pathlib import Path
from time import time, perf_counter
from fake_useragent import UserAgent
def download_file_from_url(dl_url, file_name, headers):
file_path = Path(__file__).parent.joinpath(file_name)
if file_path.exists():
dl_size = file_path.stat().st_size
else:
dl_size = 0
headers['Range'] = f'bytes={dl_size}-'
response = requests.get(dl_url, stream=True, headers=headers)
print('\n\n' + '*' * 30 + '下载信息' + '*' * 30)
total_size = int(response.headers['content-length'])
print(
f'\n\n文件名称:{file_name}\t\t已下载文件大小:{dl_size / 1024 / 1024:.2f}M\t\t文件总大小:{total_size/1024/1024:.2f}M\n\n')
start = perf_counter()
data_count = 0
count_tmp = 0
start_time = time()
with open(file_path, 'ab') as fp:
for chunk in response.iter_content(chunk_size=512):
data_count += len(chunk)
now_pross = (data_count / total_size) * 100
mid_time = time()
if mid_time - start_time > 0.1:
speed = (data_count - count_tmp) / 1024 / (mid_time - start_time)
start_time = mid_time
count_tmp = data_count
print(
f"\rDownloading.........{now_pross:.2f}%\t{data_count//1024}Kb/{total_size//1024}Kb\t当前下载速度:{speed:.2f}Kb/s", end='')
fp.write(chunk)
end = perf_counter()
diff = end - start
speed = total_size/1024/diff
print(
f'\n\n下载完成!耗时:{diff:.2f}秒, 平均下载速度:{speed:.2f}Kb/s!\n文件路径:{file_path}\n')
if __name__ == '__main__':
url = 'https://vscode.cdn.azure.cn/stable/a3db5be9b5c6ba46bb7555ec5d60178ecc2eaae4/VSCodeUserSetup-x64-1.32.3.exe'
filename = url.rpartition('/')[-1]
headers = {
'User-Agent': UserAgent().random, }
download_file_from_url(url, filename, headers)
用Python3写一个通用下载器,包含断点续传,实时网速功能。
猜你喜欢
转载自blog.csdn.net/qq523176585/article/details/87480010
今日推荐
周排行