admin管理员组文章数量:1606473
1.python下载大文件(支持断点续传)
网上的很多爬取图片的程序,基本使用scrapy框架中的img管道进行加速下载,但是当要下载的文件太大的时候,scrapy框架中的文件下载管道也无能为力的时候,也确实听让人无奈,于是我写下了如下代码,其功能如下:
1.读取本地 ./english.txt 文件中的下载链接
2.for循环调用 download 函数分别下载各个下载链接
3.保存到本地(支持断点续传)
以下就是全部的代码,如果大家用得到就可以点赞支持一下。
# -*- coding:utf-8 -*-
'''
@项目名称:保密
@作者:kingback
@文件名称:Continue_big_files_download.py
@IDE:PyCharm
@文件创建时间:2021-04-16 14:45:20
@月份:4月
'''
import sys
import requests
import os
# 屏蔽warning信息
requests.packages.urllib3.disable_warnings()
def download(url):
name = url.split('/')[-1]
print("当前正在下载文件:",name)
dir = "你的文件存储路径" #此处的路径需要改成自己的路径
filename=dir+name
# 第一次请求是为了得到文件总大小
r1 = requests.get(url, stream=True, verify=False)
total_size = int(r1.headers['Content-Length'])
# 这重要了,先看看本地文件下载了多少
if os.path.exists(filename):
temp_size = os.path.getsize(filename) # 本地已经下载的文件大小
else:
temp_size = 0
'''
是否续传?
'''
if(temp_size==total_size):
print("该文件已经下载过了!")
else:
# 显示一下已经下载了多少
print("续传文件大小:%s,文件总大小:%s" % (temp_size, total_size))
# 核心部分,这个是请求下载时,从本地文件已经下载过的后面下载
headers = {'Range': 'bytes=%d-' % temp_size}
# 重新请求网址,加入新的请求头的
r = requests.get(url, stream=True, verify=False, headers=headers)
# 下面写入文件也要注意,看到"ab"了吗?
# "ab"表示追加形式写入文件
with open(filename, "ab") as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
temp_size += len(chunk)
f.write(chunk)
f.flush()
###这是下载实现进度显示####
done = int(50 * temp_size / total_size)
sys.stdout.write(" 《-----------下载进度:")
sys.stdout.write("\r[%s%s] %d%%" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size))
sys.stdout.flush()
print() # 避免上面\r 回车符
if __name__ == '__main__':
txt_path = "./english.txt" #此处填写你的下载链接所在的txt路径
# 读取所有url
with open(txt_path, "r") as f:
data = f.read()
datas = data.split("\n") #转成list,便于读取
# 去重,去掉list列表中重复的内容
datas = list(set(datas))
#初始化输出,告诉使用者需要下载多少文件
print("\n","*"*30,"总共需要下载文件:%s个"%len(datas),"*"*30,"\n")
# 开始下载文件
for file in datas:
download(file)
2.使用截图
使用很方便哦~
版权声明:本文标题:python如何批量下载大文件(支持断点续传) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728501036a1161172.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论