用 Python 下載檔案

Siddharth Swami 2023年1月30日
  1. 在 Python 中使用 requests 模組下載檔案
  2. 在 Python 中使用 urllib 模組下載檔案
  3. 在 Python 中使用 pycurl 模組下載檔案
用 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()

相關文章 - Python HTTP