美文网首页
python断点续传

python断点续传

作者: 是东东 | 来源:发表于2023-04-06 10:39 被阅读0次

通过设置headers['range'] 字段来告诉程序从哪里开始下载,即断点续传
下载块 除以 文件总大小 即为 下载百分百
下载块 除以 时间差值 即为 当前网速

# coding: utf-8
import re
import requests
from pathlib import Path
from time import time, perf_counter


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://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cglbh1rc77ubb5oatm5g&line=0&file_id=224c240378ae47d49b60edd91ca34ee0&sign=8ead581c35b9dc73cefb878d07a2ab61&is_play_url=1&source=PackSourceEnum_FEED&aid=6383'
    # filename = url.rpartition('/')[-1]
    filename = "test.mp4"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36', }
    download_file_from_url(url, filename, headers)

未解决:下载进度没有将已经下载好的没有计算在内

相关文章

  • Android-单线程断点续传

    断点续传的原理 看上一篇Android-断点续传 下面的例子是下载的断点续传,断点续传很简单就两点:1.网络请求的...

  • Python爬虫 断点续传

    from multiprocessingimport Pool from country_url_getimpor...

  • Python | Python实现ftp文件批量下载(包含目录)

    本代码实现了以下功能: 下载进度显示(同一行打印) 断点续传 递归下载整个目录文件 参考:Python3 Prin...

  • ios 后台下载,断点续传总结

    断点续传 demo 断点续传的原理是在HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头的Ran...

  • Okhttp多线程断点续传

    目录 1、断点续传相关定义2、多线程下载实现方案 1、断点续传相关定义 1.1、断点续传: 记录上次下载的位置,下...

  • NSURLSession实现断点下载

    断点续传概述 断点续传就是从文件上次中断的地方开始重新下载或上传数据,而不是从文件开头。(本文的断点续传仅涉及下载...

  • 多线程断点

    Android多线程断点续传下载 原理 其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下...

  • IOS 断点续传原理浅析(第一篇)

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • iOS-16 断点续传 下载

    断点续传概述: 断点续传就是从文件上次中断的地方开始重新下载或上传数据,当下载大文件的时候,如果没有实现断点续传功...

  • android 中断点续传

    android 中断点续传 单线程断点续传 所谓的断点续传就是在下载一个文件时,文件没有完全下载,中途暂停,那么再...

网友评论

      本文标题:python断点续传

      本文链接:https://www.haomeiwen.com/subject/qjfuddtx.html