python 之实现断点下载与下载进度条
一、效果图

二、进度条代码
__author__ = 'Yang' import os
import time
from threading import Thread '''下载进度条'''
class Down_progress(object): def __init__(self, total, init_size, dst):
# 文件总大小
self.total = total
# 下载大小
self.init_size = init_size
# 文件保存路径
self.dst = dst def start(self):
def start():
start_time = time.time()
print('[文件大小]:%.2f MB' % ((self.total - self.init_size) / 1024 / 1024)) while self.init_size < self.total:
speed_str = ''
if os.path.exists(self.dst):
# 计算下载率
start = self.init_size
time.sleep(1)
down_speed = (self.init_size - start) / 1024
if down_speed > 1024:
speed_str = '%.2f MB/s' % (down_speed / 1024)
else:
speed_str = '%.2f kb/s' % down_speed
print('\r' + '[下载进度]:[%s]%.2f%%,下载速度:%s' % ('#' * int(self.init_size * 50 / self.total), float(self.init_size / self.total * 100), speed_str), end = '') # 计算下载时间
offset_time = time.time() - start_time
if offset_time > 60:
offset_time = '%.2f 分钟' % (offset_time / 60)
else:
offset_time = '%.2f 秒' % offset_time
print('\n' + '下载完成,耗时:%s' % offset_time) th = Thread(target = start)
th.start() ''' 更新下载大小'''
def update(self, size):
self.init_size += size
三、断点下载例子
import requests, re, os
from threading import Thread
from down_progress import * host = "http://www.8080s.net"
url = "http://www.8080s.net/movie/32088"
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'} ''' 断点下载'''
def down(url, dst):
try:
response = requests.get(url, stream=True, verify=False)
file_size = int(response.headers['content-length'])
if os.path.exists(dst):
first_size = os.path.getsize(dst)
else:
first_size = 0
if file_size <= first_size:
return
headers['Range'] = "bytes=%d-" % (first_size, )
print("开始下载:"+url)
res = requests.get(url, stream=True, headers=headers, verify=False)
with open(dst, "ab") as f:
dp = Down_progress(file_size, first_size, dst)
dp.start()
chunk_size = 1024
for chunk in res.iter_content(chunk_size = chunk_size):
if chunk:
f.write(chunk)
dp.update(chunk_size)
except Exception as e:
print(e) if __name__ == '__main__':
res = requests.get(url)
content = res.text
a = re.findall(r"<a[^>]*\s+href=[\'\"]?([^\'\"]*)[\'\"]?[^>]*\s+>.*<\/", content)
down(a[0], './%s' % os.path.basename(a[0]))
python 之实现断点下载与下载进度条的更多相关文章
- android AsyncTask异步下载并更新进度条
AsyncTask异步下载并更新进度条 //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...
- VC下载文件显示进度条
VC下载文件显示进度条 逗比汪星人2009-09-18上传 by Koma http://blog.csd.net/wangningyu http://download.csdn.net/deta ...
- 【转】C#中使用aria2c进行下载并显示进度条
[转自] C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园https://www.cnblogs.com/littlehb/p/5782714.html 正则表达式的生成网站: ...
- 利用Python计算π的值,并显示进度条
利用Python计算π的值,并显示进度条 第一步:下载tqdm 第二步;编写代码 from math import * from tqdm import tqdm from time import ...
- VC下载文件 + 显示进度条
在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...
- idhttp post 上传或下载时显示进度条
通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...
- webclient下载文件 带进度条
private void button1_Click(object sender, EventArgs e) { doDownload(textBox1.Text.Trim()); } private ...
- Android开发(24)---安卓中实现多线程下载(带进度条和百分比)
当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...
- idhttp post 上传或下载时显示进度条(对接idhttp1.OnWork事件)
通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...
- C# .net实现下载,带进度条
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
随机推荐
- 2019 映客直播java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.映客直播等公司offer,岗位是Java后端开发,最终选择去了映客直播. 面试了很多家公司,感觉大部分公司考察的点 ...
- git安装用法和常用命令
目录 git 下载 安装 git 工作中常用命令 Git常用命令汇总以及其它相关操作 或者 常出错误: 常用修改: 题外话(相关概念) git 下载 安装 1.下载Git,官网地址:https://g ...
- Stack布局中定位的方式
//……省略无关代码…… child: new Column( children: <Widget>[ new SizedBox(height: 20.0), new Stack( ali ...
- python day 15: IO多路复用,socketserver源码培析,
目录 python day 15 1. IO多路复用 2. socketserver源码分析 python day 15 2019/10/20 学习资料来自老男孩教育 1. IO多路复用 ''' I/ ...
- Java 之 Maven 常用命令
一.Maven 常用命令 在 cmd 中可以通过一系列的 maven 命令对我们的 maven 工程进行编译.测试.运行.打包.安装和部署. 1.compile 命令 compile 是 maven ...
- sql server快捷键添加
工具--选项--键盘 sp_table_column_info p_helpindex sp_sql
- MySQL DataType--浮点数(Floating-Point Types)学习
浮点数(Floating-Point Types) MySQL支持两种浮点数类型来表示近似值:1.FLOAT,单精度浮点数,使用4字节存储,存储数据范围3.402823466E+38 - -1.175 ...
- Flask入门很轻松(三)—— 模板
Jinja2模板引擎 转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959471.html Flask内置的模板语言,它的设计思想来源于 Dja ...
- 云计算与大数据实验:Hbase shell操作成绩表
[实验目的] 1)了解hbase服务 2)学会hbase shell命令操作成绩表 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件存储系统,利用Ha ...
- OpenResty(Nginx + Lua)常用操作
平滑重启: /usr/servers/nginx/sbin/nginx -s reload 重启前测试配置是否成功 /usr/servers/nginx/sbin/nginx -t 平滑升级如果服 ...