|
|
没有做错误处理的!!!
- import requests
- import re
- import urllib.parse
- class FileInfo():
- def __init__(self, headers):
- self.headers = headers
- @property
- def name(self):
- rs = re.search(r'filename="(.*?)"', str(self.headers))
- if rs:
- return urllib.parse.unquote(rs.groups()[0])
- else:
- return None
- @property
- def size(self):
- rs = self.headers.get('Content-Length', None)
- return int(rs) if rs else rs
- class Down():
- def __init__(self, url):
- self.url = url
-
- def view_bar(self, num, total):
- rate = num/total
- rate_num = int(rate * 100)
- number = int(50*rate)
- r = '\r[%s%s] %d%%' % ("#"*number, " "*(50-number), rate_num, )
- print("{}".format(r), end="\r")
- def Run(self):
- r = requests.get(self.url, stream=True)
- file = FileInfo(r.headers)
- print("fileName: ", file.name)
- print("fileSize: ", file.size)
- downloadedSize = 0
- with open(file.name, "wb") as f:
- for chunk in r.iter_content(chunk_size=1024):
- if chunk:
- f.write(chunk)
- downloadedSize += 1024
- self.view_bar(downloadedSize, file.size)
- r.close()
-
- if __name__ == "__main__":
- url = input("Download Url >>> ")
- d = Down(url)
- d.Run()
复制代码 |
|