Python urllib urlretrieve函數解析 利用urllib.request.urlretrieve函數下載文件 覺得有用的話,歡迎一起討論相互學習~ "Follow Me" 參考文獻 "Urlretrieve函數解析" urllib.request.urlretrieve函數解析 ...
Python urllib urlretrieve函數解析
利用urllib.request.urlretrieve函數下載文件
覺得有用的話,歡迎一起討論相互學習~Follow Me
參考文獻
Urlretrieve函數解析
urllib.request.urlretrieve函數解析
urlretrieve(url, filename=None, reporthook=None, data=None)
參數 finename 指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。)
參數 reporthook 是一個回調函數,當連接上伺服器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。
參數 data 指 post 到伺服器的數據,該方法返回一個包含兩個元素的(filename, headers)元組,filename 表示保存到本地的路徑,header 表示伺服器的響應頭。
- 下麵通過例子來演示一下這個方法的使用,這個例子將一張圖片抓取到本地,保存在此文件夾中,同時顯示下載的進度。
from six.moves import urllib
def Schedule(a, b, c):
"""
a:已經下載的數據塊
b:數據塊的大小
c:遠程文件的大小
"""
per = 100.0*float(a*b)/float(c)
if per > 100:
per = 100
print("a", a)
print("b", b)
print("c", c)
print('{:.2f}%'.format(per))
url = 'https://avatars1.githubusercontent.com/u/14261323?s=400&u=150449ce27748c3b23b5175f8c8342c918ae6aa8&v=4'
local = 'mylogo.png'
filename, _ = urllib.request.urlretrieve(url, local, Schedule)
# ('mylogo.png', <http.client.HTTPMessage object at 0x000001FD6491D6D8>)
print(filename)
# mylogo.png
# a 0
# b 8192
# c 38225
# 0.00%
# a 1
# b 8192
# c 38225
# 21.43%
# a 2
# b 8192
# c 38225
# 42.86%
# a 3
# b 8192
# c 38225
# 64.29%
# a 4
# b 8192
# c 38225
# 85.72%
# a 5
# b 8192
# c 38225
# 100.00%