Python實現(xiàn)批量下載文件的示例代碼
前言
下載文件是我們在日常工作中常常要做的一件事情。當我們需要從互聯(lián)網(wǎng)上批量下載大量文件時,手動一個一個去下載顯然不夠高效。為了解決這個問題,我們可以使用Python編寫一個批量下載文件的腳本,讓它自動幫我們下載文件。同時,為了避免下載過程中被網(wǎng)站禁止訪問,我們也可以運用代理ip。
在本文中,我將會分為以下幾個部分來介紹如何使用Python進行批量下載:
- 準備工作
- 批量下載文件
- 添加代理ip
- 處理異常
在本文中,我將使用requests庫來進行文件下載和代理設置。我們將會介紹如何通過requests庫來下載文件、如何設置代理ip來繞過網(wǎng)站的訪問限制,以及如何處理下載過程中可能會出現(xiàn)的異常。
1. 準備工作
在進行批量下載之前,我們需要先確定要下載的文件的URL列表??梢詫⑦@些URL存儲在一個文本文件中,每行一個URL,例如:
http://example.com/file1.zip http://example.com/file2.zip http://example.com/file3.zip
我們可以使用Python的open函數(shù)讀取這個文本文件并獲取URL列表:
with open('urls.txt', 'r') as f: urls = f.read().splitlines()
這里我們使用了read函數(shù)將整個文本文件內容讀入內存,然后使用splitlines函數(shù)將每一行的URL轉換成一個列表。
2. 批量下載文件
批量下載文件的代碼主要分為兩個部分,一個是從遠程服務器下載文件,另一個是將文件保存到本地。
我們可以使用Python的requests庫來下載文件,并且可以通過設置stream=True參數(shù)來實現(xiàn)分塊下載,有利于下載大文件時減少內存占用。
import requests def download_file(url, output_path): with requests.get(url, stream=True) as r: r.raise_for_status() with open(output_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): if chunk: f.write(chunk) f.flush()
這個函數(shù)接收兩個參數(shù),一個是遠程服務器上的文件URL,另一個是本地文件路徑。內部使用requests.get函數(shù)來下載文件,將響應對象以二進制流的方式寫入本地文件中。
3. 添加代理ip
有些網(wǎng)站可能會對同一IP地址下載次數(shù)進行限制,導致我們無法下載。為了繞過這個限制,我們可以使用代理IP。
代理IP是一種通過轉發(fā)來實現(xiàn)客戶端與服務端間請求、響應的中間服務器。我們可以使用代理服務器來隱藏客戶端的真實IP地址,從而繞過某些網(wǎng)站的下載限制。
下面的代碼演示了如何設置代理IP:
import requests proxies = { 'http': 'http://127.0.0.1:8080', 'https': 'https://127.0.0.1:8080' } with requests.get(url, proxies=proxies) as r: # 下載文件
這里我們定義了一個字典類型的proxies,其中key為協(xié)議類型,value為代理IP地址。然后在requests.get函數(shù)中設置proxies參數(shù)即可。
4. 處理異常
在實際使用中,我們可能會遇到諸如文件不存在、網(wǎng)絡異常等問題,需要對這些異常進行處理,防止程序崩潰。
import requests def download_file(url, output_path): try: with requests.get(url, stream=True) as r: r.raise_for_status() with open(output_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): if chunk: f.write(chunk) f.flush() except requests.exceptions.RequestException as e: print(f'Error downloading {url}: {e}')
在代碼中,我們使用try/except語句來捕獲requests庫可能拋出的異常,并使用print語句將異常信息輸出到控制臺。這樣,即使下載文件失敗,程序也不會因此停止運行。
完整代碼
import requests def download_file(url, output_path): try: with requests.get(url, stream=True) as r: r.raise_for_status() with open(output_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): if chunk: f.write(chunk) f.flush() except requests.exceptions.RequestException as e: print(f'Error downloading {url}: {e}') with open('urls.txt', 'r') as f: urls = f.read().splitlines() for url in urls: filename = url.split('/')[-1] download_file(url, filename)
這是一個基本的批量下載代碼,可以從urls.txt文件中讀取文件URL列表,并自動下載到當前目錄中。
如果你需要使用代理ip下載文件,可以使用以下代碼:
import requests proxies = { 'http': 'http://127.0.0.1:8080', 'https': 'https://127.0.0.1:8080' } def download_file(url, output_path): try: with requests.get(url, proxies=proxies, stream=True) as r: r.raise_for_status() with open(output_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): if chunk: f.write(chunk) f.flush() except requests.exceptions.RequestException as e: print(f'Error downloading {url}: {e}') with open('urls.txt', 'r') as f: urls = f.read().splitlines() for url in urls: filename = url.split('/')[-1] download_file(url, filename)
這個代碼與前面的批量下載代碼類似,只是在下載文件時設置了proxies參數(shù)。
總結
使用Python編寫批量下載代碼,可以提高工作效率。本文介紹了如何使用requests庫來下載文件,如何設置代理IP來繞過某些網(wǎng)站的下載限制,并且展示了如何處理下載過程中可能會出現(xiàn)的異常。
到此這篇關于Python實現(xiàn)批量下載文件的示例代碼的文章就介紹到這了,更多相關python批量下載文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決python問題 Traceback (most recent call&n
這篇文章主要介紹了解決python問題 Traceback (most recent call last),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12PyCharm2021最新激活碼+激活碼補丁(親測最新版PyCharm2021.3激活成功)
這篇文章主要介紹了PyCharm2021最新激活碼+激活碼補丁,親測最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09Python 實現(xiàn)圖片轉字符畫的示例(靜態(tài)圖片,gif皆可)
這篇文章主要介紹了Python 實現(xiàn)圖片轉字符畫的示例,幫助大家更好的利用python進行圖片處理,感興趣的朋友可以了解下2020-11-11詳解Python的Flask框架中生成SECRET_KEY密鑰的方法
密鑰值的生成功能十分重要,幾乎也是各大Web開發(fā)框架的標配,Flask當然也不例外,這里我們就來詳解Python的Flask框架中生成SECRET_KEY密鑰的方法2016-06-06中秋節(jié)老家要貼對聯(lián)之python無線對聯(lián)生成器
適逢中秋老家居然有在中秋貼對聯(lián)的習俗,于是自己開機立馬寫了一個對聯(lián)生成器,文中給大家介紹的非常詳細,對大家的學習或工作具有參考價值2021-09-09