1.前言
很久没写博客了。某天在b站上面看到的使用python的多线程文件IO操作机制,突发奇想来实现下
人们总有这样的困扰,使用有名的工具下载大文件的时候,总会限速(比如某度云),使用迅雷下载BT文件的时候又不得不被广告困扰。使用IDM这种无限制下载软件的时候 ,又会弹出各种注册弹窗的问题。故笔者这里使用python的多线程文件IO下载,百行代码左右实现一个快速下载工具。
2.环境
win10
python3.6
Pycharm2017
3.效果
使用python实现的类IDM下载器,具有不限制网速(取决于网速带宽),以及多线程下载的特点。
4.实现步骤
4.1 导包
实现这个功能主要用到的是python中的Request库,以及线程处理库,基于python对文件IO操作的友好性,使用较少的代码实现了上述下载的功能。
import os
import time
import sys
from requests import get,head
from concurrent.futures import ThreadPoolExecutor,wait
如果运行出错。可能需要安装相关包
4.2 初始化
新定义一个下载类,对其进行初始化,声明下载链接,线程数以及另存为的文件名
def __init__(self, url, nums, file):
self.url = url # url链接
self.num = nums # 线程数
self.name = file # 文件名字
self.getSize = 0 # 大小
self.info = {
'main': {
'progress': 0,# 主线程状态
'speed': ''# 下载速度
},
'sub': {
'progress': [0 for i in range(nums)], # 子线程状态
'stat': [1 for i in range(nums)] # 下载状态
}
}
r = head(self.url)
# 状态码显示302则迭代寻找文件
while r.status_code == 302:
self.url = r.headers['Location']
print("此url已重定向至{}".format(self.url))
r = head(self.url)
self.size = in