一、效果图

二、进度条代码

  1. __author__ = 'Yang'
  2.  
  3. import os
  4. import time
  5. from threading import Thread
  6.  
  7. '''下载进度条'''
  8. class Down_progress(object):
  9.  
  10. def __init__(self, total, init_size, dst):
  11. # 文件总大小
  12. self.total = total
  13. # 下载大小
  14. self.init_size = init_size
  15. # 文件保存路径
  16. self.dst = dst
  17.  
  18. def start(self):
  19. def start():
  20. start_time = time.time()
  21. print('[文件大小]:%.2f MB' % ((self.total - self.init_size) / 1024 / 1024))
  22.  
  23. while self.init_size < self.total:
  24. speed_str = ''
  25. if os.path.exists(self.dst):
  26. # 计算下载率
  27. start = self.init_size
  28. time.sleep(1)
  29. down_speed = (self.init_size - start) / 1024
  30. if down_speed > 1024:
  31. speed_str = '%.2f MB/s' % (down_speed / 1024)
  32. else:
  33. speed_str = '%.2f kb/s' % down_speed
  34. print('\r' + '[下载进度]:[%s]%.2f%%,下载速度:%s' % ('#' * int(self.init_size * 50 / self.total), float(self.init_size / self.total * 100), speed_str), end = '')
  35.  
  36. # 计算下载时间
  37. offset_time = time.time() - start_time
  38. if offset_time > 60:
  39. offset_time = '%.2f 分钟' % (offset_time / 60)
  40. else:
  41. offset_time = '%.2f 秒' % offset_time
  42. print('\n' + '下载完成,耗时:%s' % offset_time)
  43.  
  44. th = Thread(target = start)
  45. th.start()
  46.  
  47. ''' 更新下载大小'''
  48. def update(self, size):
  49. self.init_size += size

三、断点下载例子

  1. import requests, re, os
  2. from threading import Thread
  3. from down_progress import *
  4.  
  5. host = "http://www.8080s.net"
  6. url = "http://www.8080s.net/movie/32088"
  7. headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'}
  8.  
  9. ''' 断点下载'''
  10. def down(url, dst):
  11. try:
  12. response = requests.get(url, stream=True, verify=False)
  13. file_size = int(response.headers['content-length'])
  14. if os.path.exists(dst):
  15. first_size = os.path.getsize(dst)
  16. else:
  17. first_size = 0
  18. if file_size <= first_size:
  19. return
  20. headers['Range'] = "bytes=%d-" % (first_size, )
  21. print("开始下载:"+url)
  22. res = requests.get(url, stream=True, headers=headers, verify=False)
  23. with open(dst, "ab") as f:
  24. dp = Down_progress(file_size, first_size, dst)
  25. dp.start()
  26. chunk_size = 1024
  27. for chunk in res.iter_content(chunk_size = chunk_size):
  28. if chunk:
  29. f.write(chunk)
  30. dp.update(chunk_size)
  31. except Exception as e:
  32. print(e)
  33.  
  34. if __name__ == '__main__':
  35. res = requests.get(url)
  36. content = res.text
  37. a = re.findall(r"<a[^>]*\s+href=[\'\"]?([^\'\"]*)[\'\"]?[^>]*\s+>.*<\/", content)
  38. down(a[0], './%s' % os.path.basename(a[0]))

  

  

python 之实现断点下载与下载进度条的更多相关文章

  1. android AsyncTask异步下载并更新进度条

    AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...

  2. VC下载文件显示进度条

    VC下载文件显示进度条 逗比汪星人2009-09-18上传   by Koma http://blog.csd.net/wangningyu http://download.csdn.net/deta ...

  3. 【转】C#中使用aria2c进行下载并显示进度条

    [转自] C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园https://www.cnblogs.com/littlehb/p/5782714.html 正则表达式的生成网站: ...

  4. 利用Python计算π的值,并显示进度条

    利用Python计算π的值,并显示进度条  第一步:下载tqdm 第二步;编写代码 from math import * from tqdm import tqdm from time import ...

  5. VC下载文件 + 显示进度条

    在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...

  6. idhttp post 上传或下载时显示进度条

    通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...

  7. webclient下载文件 带进度条

    private void button1_Click(object sender, EventArgs e) { doDownload(textBox1.Text.Trim()); } private ...

  8. Android开发(24)---安卓中实现多线程下载(带进度条和百分比)

    当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...

  9. idhttp post 上传或下载时显示进度条(对接idhttp1.OnWork事件)

    通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...

  10. C# .net实现下载,带进度条

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

随机推荐

  1. 2019 新华网java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.新华网等公司offer,岗位是Java后端开发,最终选择去了新华网. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  2. Matlab组合模式

    组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.组合模式的目的是让客户端不再区分操作的是组合对象(Compos ...

  3. Oracle队列实现

    Oracle队列实现 -- 核心技术点:for update 创建测试表 create table t ( id       number primary key, processed_flag va ...

  4. Implement CGLIB in ABAP

    What is cglib?A Byte Code Generation Library which is high level API to generate and transform Java ...

  5. vue-cli 移动端项目如何在手机上调试预览

    这里分享下如何在webpack工具构建下的vue项目,在手机端调试和预览,言归正传. 1.电脑和手机连接到同一个WIFI a.台式电脑和手机同时链接一个路由器,使用同一个wifi: b.笔记本也可以直 ...

  6. 基于GDI显示png图像

    intro 先前基于GDI已经能够显示BITMAP图像:windows下控制台程序实现窗口显示 ,其中BMP图像是使用LoadImage()这一Win32 API函数来做的.考虑到LoadImage( ...

  7. Kubernetes集群开启Firewall

    关于端口的官方说明:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ k8s ...

  8. JAVA-JNI调用使用

    准备工作: 1.打开eclipse,新建c++项目,编写c++ jni接口如下图: 2.编译运行生成dll文件,导入到java项目,在java中创建调用使用,如下图: C文件定义: 头文件 /* DO ...

  9. php数字字母字符串比较

    <?php$a="12a";if($a==12){echo "good";}?>这种情况能输出good,字母在后时只比较前两位,认为是相等:字母在前 ...

  10. 《Coderxiaoban团队》团队作业5:项目需求分析改进与系统设计

    实验八 <Coderxiaoban团队>团队作业5:项目需求分析改进与系统设计 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 团队作业5:项目需求分析改进与 ...