用 Python 下載檔案
Python 經常用於訪問 Internet 上的資源。我們可以使用不同的庫生成請求和連線。這些庫還可以幫助我們從 Web 下載或讀取 HTTP 檔案。
在本教程中,我們將使用 Python 從 Internet 下載檔案。
在 Python 中使用 requests
模組下載檔案
我們可以使用 requests
模組從網際網路上檢索資訊和閱讀網頁。
get()
方法有助於從要下載檔案的給定 URL 中檢索檔案的路徑。open()
方法建立一個我們希望儲存檔案的檔案物件,然後 write()
函式用於將檔案內容寫入所需的路徑。
我們使用這些函式來下載檔案,如下所示。
import requests as req
URL = "https://www.facebook.com/favicon.ico"
file = req.get(url, allow_redirects=True)
open("facebook.ico", "wb").write(file.content)
輸出:
1150
上面的程式碼從其 URL 下載 Facebook 的徽標檔案並將其儲存在工作目錄中。我們可以在 open() 函式中指定任何路徑,但我們必須以 wb
模式開啟它。這表明我們打算以二進位制模式寫入檔案。
上面的例子適用於下載較小的檔案,但對於大檔案效率不高。file.content
函式用於以單個字串的形式獲取檔案內容。由於我們在上面的例子中使用了一個小檔案,它工作正常。
如果我們必須下載一個大檔案,那麼我們應該使用 file.iter_content()
函式,我們將在其中指定塊大小。它以塊的形式下載資料。
我們在以下示例中使用此函式。
import requests
URL = "http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ch1-2.pdf"
file = requests.get(URL, stream=True)
with open("Python.pdf", "wb") as pdf:
for chunk in file.iter_content(chunk_size=1024):
if chunk:
pdf.write(chunk)
在 Python 中使用 urllib
模組下載檔案
我們還可以使用 Python 中的 urllib
庫從 Web 下載和讀取檔案。這是一個 URL 處理模組,具有不同的功能來執行給定的任務。
在這裡,我們還必須指定要下載的檔案的 URL。urllib.request.urlopen()
方法獲取檔案的路徑並向正在下載檔案的伺服器傳送請求。
要下載檔案,我們可以使用 urllib.request.urlretrieve()
函式。它將從給定地址下載資源並將其儲存在提供的目錄中。
我們在下面的例子中使用這種方法下載 Facebook 的圖示。
import urllib
urllib.request.urlretrieve("https://www.facebook.com/favicon.ico", "fb.ico")
輸出:
('fb.ico', <http.client.HTTPMessage at 0x2d2d317a088>)
上面的輸出表明檔案下載成功。
在 Python 中使用 pycurl
模組下載檔案
我們可以使用此模組的檔案處理從 Internet 下載檔案。首先,我們必須為我們希望下載所需檔案的位置建立一個檔案物件。然後,我們將使用 pycurl.Curl()
函式來建立一個物件並啟動 curl 會話。
setopt()
方法用於設定檔案的 URL 值。接下來,perform()
函式通過傳送 HTTP 請求從伺服器執行檔案傳輸過程。接下來,我們將使用檔案物件將檢索到的資料寫入檔案。最後,close()
方法關閉會話,我們將檔案下載到工作目錄中。
請參考下面的程式碼。
import pycurl
file_name = "fb.ico"
file_src = "https://www.facebook.com/favicon.ico"
with open(file_name, "wb") as f:
cl = pycurl.Curl()
cl.setopt(cl.URL, file_src)
cl.setopt(cl.WRITEDATA, f)
cl.perform()
cl.close()