一、urlretrieve()簡介
Python中,我們可以使用urlretrieve()函數將文件從一個URL地址下載到本地計算機。urllib庫中的urlretrieve()函數能夠接收兩個參數,第一個參數為文件的URL地址,第二個參數為本地保存地址。這個函數可以很方便地完成文件下載的操作。
二、使用urlretrieve()下載文件
首先,我們需要導入Python的urllib庫,以便調用其urlretrieve()函數。然後,為了方便起見,我們定義了一個字元串變數url,其中存儲了文件的URL地址。在調用urlretrieve()函數時,我們將這個URL地址賦值為第一個參數。其次,我們還需要定義一個字元串變數file_name,其中存儲了文件下載保存在本地計算機的文件名(請注意,該文件名需要包含文件的擴展名)。在調用urlretrieve()函數時,我們將這個文件名賦值為第二個參數。接著,我們只需要調用urlretrieve()函數就可以開始文件下載。
import urllib.request
url = "http://www.website.com/file.pdf"
file_name = "downloaded_file.pdf"
urllib.request.urlretrieve(url, file_name)
三、向urlretrieve()函數中添加下載回調函數(callback函數)
有時候,我們需要下載非常大的文件,例如視頻、音樂或其他大型文件。在這種情況下,下載可能需要一定的時間,這可能會導致用戶感到失去聯接的不安全感,還會導致長時間佔用系統資源,導致程序運行變慢或甚至崩潰。一個比較好的解決辦法是為urlretrieve()函數添加一個下載回調函數(callback函數)。下載回調函數可以在下載的過程中,向用戶提供下載進度的信息,包括已經下載的文件大小以及總文件大小等。
在下面的代碼中,我們自定義了一個回調函數report_hook,這個函數可以在下載文件的過程中,向用戶提供下載進度的信息。這個函數需要接收三個參數:block_count、block_size和total_size。其中,block_count代表已經下載的塊數,block_size代表每一塊的大小,total_size代表下載文件的總大小。
import urllib.request
def report_hook(block_count, block_size, total_size):
downloaded_size = block_count * block_size
percent = 100 * downloaded_size / total_size
print("已經下載了:%.2f%%" % percent)
url = "http://www.website.com/file.mp4"
file_name = "downloaded_file.mp4"
urllib.request.urlretrieve(url, file_name, report_hook)
四、使用URL opener下載文件並添加HTTP頭信息
如果您想下載localhost或受密碼保護的文件,那麼您需要重寫URL opener並添加必要的HTTP頭信息,這就意味著你需要通過使用OpenerDirector類中包含的更多功能來實現這一點。
import urllib.request
url = "http://www.localhost.com/file.mp4"
header_info = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome / 45.0.2454.101 Safari / 537.36", "Referer":"http://www...com"}
req = urllib.request.Request(url, headers=header_info)
response = urllib.request.urlopen(req)
data = response.read()
with open("downloaded_file.mp4", "wb") as file:
file.write(data)
原創文章,作者:BGQWJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333215.html