Skip to content

Commit 428b73e

Browse files
authored
Create download.py
1 parent 5e21989 commit 428b73e

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

moumoubaimifan/download/download.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# coding=utf-8
2+
import os
3+
from urllib import request
4+
5+
import requests
6+
import urllib3
7+
8+
import wget
9+
from tqdm import tqdm
10+
11+
url = 'https://cn.bing.com/th?id=OHR.DerwentIsle_EN-CN8738104578_400x240.jpg'
12+
13+
def requests_download():
14+
15+
content = requests.get(url).content
16+
17+
with open('pic_requests.jpg', 'wb') as file:
18+
file.write(content)
19+
20+
def urllib_download():
21+
request.urlretrieve(url, 'pic_urllib.jpg')
22+
23+
24+
def urllib3_download():
25+
# 创建一个连接池
26+
poolManager = urllib3.PoolManager()
27+
28+
resp = poolManager.request('GET', url)
29+
with open("pic_urllib3.jpg", "wb") as file:
30+
file.write(resp.data)
31+
32+
resp.release_conn()
33+
34+
35+
def wget_download():
36+
wget.download(url, out='pic_wget.jpg')
37+
38+
def steam_download():
39+
url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'
40+
41+
with requests.get(url, stream=True) as r:
42+
with open('vscode.exe', 'wb') as flie:
43+
# chunk_size 指定写入大小每次写入 1024 * 1024 bytes
44+
for chunk in r.iter_content(chunk_size=1024*1024):
45+
if chunk:
46+
flie.write(chunk)
47+
48+
def tqdm_download():
49+
url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'
50+
51+
resp = requests.get(url, stream=True)
52+
53+
# 获取文件大小
54+
file_size = int(resp.headers['content-length'])
55+
56+
with tqdm(total=file_size, unit='B', unit_scale=True, unit_divisor=1024, ascii=True, desc='vscode.exe') as bar:
57+
with requests.get(url, stream=True) as r:
58+
with open('vscode.exe', 'wb') as fp:
59+
for chunk in r.iter_content(chunk_size=512):
60+
if chunk:
61+
fp.write(chunk)
62+
bar.update(len(chunk))
63+
64+
def duan_download():
65+
url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'
66+
67+
r = requests.get(url, stream=True)
68+
69+
# 获取文件大小
70+
file_size = int(r.headers['content-length'])
71+
72+
file_name = 'vscode.exe'
73+
# 如果文件存在获取文件大小,否在从 0 开始下载,
74+
first_byte = 0
75+
if os.path.exists(file_name):
76+
first_byte = os.path.getsize(file_name)
77+
78+
# 判断是否已经下载完成
79+
if first_byte >= file_size:
80+
return
81+
82+
# Range 加入请求头
83+
header = {"Range": f"bytes={first_byte}-{file_size}"}
84+
85+
# 加了一个 initial 参数
86+
with tqdm(total=file_size, unit='B', initial=first_byte, unit_scale=True, unit_divisor=1024, ascii=True, desc=file_name) as bar:
87+
# 加 headers 参数
88+
with requests.get(url, headers = header, stream=True) as r:
89+
with open(file_name, 'ab') as fp:
90+
for chunk in r.iter_content(chunk_size=512):
91+
if chunk:
92+
fp.write(chunk)
93+
bar.update(len(chunk))
94+
95+
96+
if __name__ == '__main__':
97+
duan_download()

0 commit comments

Comments
 (0)