Python是一種強大的編程語言,它可以被用來處理各種各樣的任務。其中之一就是處理大文件。在這篇文章中,我們將介紹如何使用Python來抓取大文件。
首先,要了解Python的一些基礎知識。Python提供了很多模塊來簡化各種任務。我們將使用兩個模塊:requests和os。requests是一個HTTP庫,它允許我們發(fā)送HTTP請求和接收HTTP響應。os模塊則允許我們執(zhí)行各種與操作系統(tǒng)相關的任務。
import requests import os def download_file(url, directory): filename = url.split("/")[-1] filepath = os.path.join(directory, filename) # Check if file already exists if os.path.exists(filepath): print("File already exists") return filepath # Make request to server with requests.get(url, stream=True) as r: r.raise_for_status() total_size = int(r.headers.get("content-length", 0)) # Display progress bar with open(filepath, "wb") as f: downloaded_size = 0 for chunk in r.iter_content(chunk_size=1024): if chunk: f.write(chunk) downloaded_size += len(chunk) progress = downloaded_size / total_size * 100 print(f"Downloading {filename}: {progress:.2f}%", end="\r") print("\nFile downloaded") return filepath url = "https://example.com/large_file.zip" directory = "/path/to/save/downloaded/file" download_file(url, directory)
在上面的代碼中,我們定義了一個函數(shù)download_file(url, directory),它接受兩個參數(shù):要下載的文件的URL和下載目錄。首先,我們使用os模塊構建文件路徑。如果文件已經(jīng)存在,我們直接返回該文件的路徑。否則,我們發(fā)送HTTP GET請求到服務器,并在本地創(chuàng)建一個空文件。然后,我們使用iter_content()方法從響應中逐塊獲取數(shù)據(jù),并將其寫入本地文件。在寫入文件時,我們打印下載進度,使用戶可以監(jiān)視下載進度。最后,我們返回下載文件的路徑。
這段代碼使用了requests模塊中的stream參數(shù),在下載大文件時非常有用。如果沒有這個參數(shù),requests會一次性將整個文件讀入內存,這可能導致內存不足。當stream=True時,requests會使用流式傳輸,每次只獲取一小部分數(shù)據(jù)。
使用Python下載大文件是件輕而易舉的事情。通過使用requests和os模塊,我們可以編寫出簡單而可靠的代碼,可用于處理各種類型的文件。