def
download_hook
(count, block_size, total_size)
:
""" 接口是写死的 """
global
prev_reported_download_percent
percent = int(count*block_size*
100
/total_size)
if
prev_reported_download_percent != percent:
if
percent %
5
==
0
:
sys.stdout.write(
'%s%%'
% percent)
sys.stdout.flush()
else
:
sys.stdout.write(
'.'
)
sys.stdout.flush()
prev_reported_download_percent = percent
def
maybe_download
(filename, force=False)
:
""" force 表示是否强制下载 """
if
force
or
not
os.path.exists(filename):
print(
'Attempting to download'
)
filename, _ = urlretrieve(url+filename, filename, reporthook=download_hook)
print(
'\nDownload completed!'
)
return
filename
比如对于
http://ufldl.stanford.edu/housenumbers/
网站下的
train.tar.gz
/
test.tar.gz
两文件,客户端的调用方式为:
url = 'http://ufldl.stanford.edu/housenumbers/'
train_filename = maybe_download('train.tar.gz')
test_filename = maybe_download('test.tar.gz')
一、
断点
续
传
原理
所谓
断点
续
传
,也就是要从
文件
已经
下载
的地方开始继
续
下载
。在以前版本的 HTTP 协议是不支持
断点
的,HTTP/1.1 开始就支持了。一般
断点
下载
时才用到 Range 和 Content-Range 实体头。
不使用
断点
续
传
get /down.zip http/1.1
accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
accept-langu
本文实例讲述了php实现的支持
断点
续
传
的
文件
下载
类及其用法,是非常实用的技巧。分享给大家供大家参考。具体方法如下:
通常来说,php支持
断点
续
传
,主要依靠HTTP协议中 header HTTP_RANGE实现。
HTTP
断点
续
传
原理:
Http头 Range、Content-Range()
HTTP头中一般
断点
下载
时才用到Range和Content-Range实体头,
Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300)
Content-Range用于响应头
请求
下载
整个
文件
:
GET /test.rar HTTP/1.1
Connection
问题: 我们使用urllib.urlretrieve(url,filename)时经常遇到
下载
到一半时,出现urllib.ContentTooShortError错误。这是因为
文件
下载
不完全导致的错误。
解决: 我们可以使用捕捉错误解决这个问题,例如:
urllib.urlretrieve(url,filename)
except urllib.Cont
如果遇到网络中断的情况大发生
第二次 wget -c http://…会衔接上第一次的继
续
执行.
第一次可以直接wget
下载
,然后之后想接着
下载
就wget -c就好啦。换言之,首次-c不-c无所谓哒
本文实例讲述了
Python
使用wget实现
下载
网络
文件
功能。分享给大家供大家参考,具体如下:
wget是一个从网络上自动
下载
文件
的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。
ubuntu 安装wget
pip install wget
从网络或本地硬盘
下载
文件
(并解压)
# -*- coding: utf-8 -*-
import wget, tarfile
import os
# 网络地址
DATA_URL = 'http://www.robots.ox.ac.uk/~ankush/data.tar.gz'
# 本地硬盘
文件
# DATA_URL = '/
urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据
下载
到本地。
urlretrieve(url, filename=None, reporthook=None, data=None)
参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时
文件
保存数据。)参数reporthook是一个回调函数,当连接上服务器、以
1.
python
下载
大
文件
(支持
断点
续
传
)
网上的很多爬取图片的程序,基本使用scrapy框架中的img管道进行加速
下载
,但是当要
下载
的
文件
太大的时候,scrapy框架中的
文件
下载
管道也无能为力的时候,也确实听让人无奈,于是我写下了如下代码,其功能如下:
1.读取本地 ./english.txt
文件
中的
下载
链接
2.for循环调用 download 函数分别
下载
各个
下载
链接
3.保存到本地(支持
断点
续
传
)
以下就是全部的代码,如果大家用得到就可以点赞支持一下。
# -*- coding:utf-8 -
file_size = os.path.getsize(file_path)
# 添加Range头,指定
下载
的起始位置
req.headers['Range'] = 'bytes={}-'.format(file_size)
except FileNotFoundError:
file_size = 0
# 发送请求
response = urllib.request.urlopen(req)
# 获取
文件
的总大小
total_size = int(response.headers['Content-Length']) + file_size
with open(file_path, 'ab') as file:
while True:
# 读取数据
data = response.read(1024)
if not data:
break
# 写入
文件
file.write(data)
# 打印
下载
进度
downloaded_size = file.tell()
progress = downloaded_size / total_size * 100
print('Downloaded {:.2f}%'.format(progress))
print('Download completed!')
# 调用函数进行
断点
续
传
resume_download('http://example.com/file.zip', 'file.zip')
在这个例子中,我们首先检查本地
文件
是否存在,如果存在则获取
文件
大小,然后通过添加`Range`头将请求的起始位置设置为
文件
大小。接下来,我们发送请求并读取数据,将数据写入
文件
中。在每次写入数据后,我们计算
下载
进度并打印出来。
请注意,这个示例代码可能需要根据实际情况进行适当的修改。另外,如果需要处理网络异常、
文件
校验等情况,可能需要进行更复杂的处理。
Crystal_szp:
C++基础::变量模板(variable template)
Ghostower:
C++基础::变量模板(variable template)
Ghostower:
二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
hhA0:
新技能 get —— Python 断点续传下载文件
m0_73224423: