Python實現(xiàn)批量下載文件的示例代碼
前言
下載文件是我們在日常工作中常常要做的一件事情。當(dāng)我們需要從互聯(lián)網(wǎng)上批量下載大量文件時,手動一個一個去下載顯然不夠高效。為了解決這個問題,我們可以使用Python編寫一個批量下載文件的腳本,讓它自動幫我們下載文件。同時,為了避免下載過程中被網(wǎng)站禁止訪問,我們也可以運用代理ip。
在本文中,我將會分為以下幾個部分來介紹如何使用Python進(jìn)行批量下載:
- 準(zhǔn)備工作
- 批量下載文件
- 添加代理ip
- 處理異常
在本文中,我將使用requests庫來進(jìn)行文件下載和代理設(shè)置。我們將會介紹如何通過requests庫來下載文件、如何設(shè)置代理ip來繞過網(wǎng)站的訪問限制,以及如何處理下載過程中可能會出現(xiàn)的異常。
1. 準(zhǔn)備工作
在進(jìn)行批量下載之前,我們需要先確定要下載的文件的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ù)將整個文本文件內(nèi)容讀入內(nèi)存,然后使用splitlines函數(shù)將每一行的URL轉(zhuǎn)換成一個列表。
2. 批量下載文件
批量下載文件的代碼主要分為兩個部分,一個是從遠(yuǎn)程服務(wù)器下載文件,另一個是將文件保存到本地。
我們可以使用Python的requests庫來下載文件,并且可以通過設(shè)置stream=True參數(shù)來實現(xiàn)分塊下載,有利于下載大文件時減少內(nèi)存占用。
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ù),一個是遠(yuǎn)程服務(wù)器上的文件URL,另一個是本地文件路徑。內(nèi)部使用requests.get函數(shù)來下載文件,將響應(yīng)對象以二進(jìn)制流的方式寫入本地文件中。
3. 添加代理ip
有些網(wǎng)站可能會對同一IP地址下載次數(shù)進(jìn)行限制,導(dǎo)致我們無法下載。為了繞過這個限制,我們可以使用代理IP。
代理IP是一種通過轉(zhuǎn)發(fā)來實現(xiàn)客戶端與服務(wù)端間請求、響應(yīng)的中間服務(wù)器。我們可以使用代理服務(wù)器來隱藏客戶端的真實IP地址,從而繞過某些網(wǎng)站的下載限制。
下面的代碼演示了如何設(shè)置代理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ù)中設(shè)置proxies參數(shù)即可。
4. 處理異常
在實際使用中,我們可能會遇到諸如文件不存在、網(wǎng)絡(luò)異常等問題,需要對這些異常進(jìn)行處理,防止程序崩潰。
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列表,并自動下載到當(dāng)前目錄中。
如果你需要使用代理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)
這個代碼與前面的批量下載代碼類似,只是在下載文件時設(shè)置了proxies參數(shù)。
總結(jié)
使用Python編寫批量下載代碼,可以提高工作效率。本文介紹了如何使用requests庫來下載文件,如何設(shè)置代理IP來繞過某些網(wǎng)站的下載限制,并且展示了如何處理下載過程中可能會出現(xiàn)的異常。
到此這篇關(guān)于Python實現(xiàn)批量下載文件的示例代碼的文章就介紹到這了,更多相關(guān)python批量下載文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決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)圖片轉(zhuǎn)字符畫的示例(靜態(tài)圖片,gif皆可)
這篇文章主要介紹了Python 實現(xiàn)圖片轉(zhuǎn)字符畫的示例,幫助大家更好的利用python進(jìn)行圖片處理,感興趣的朋友可以了解下2020-11-11詳解Python的Flask框架中生成SECRET_KEY密鑰的方法
密鑰值的生成功能十分重要,幾乎也是各大Web開發(fā)框架的標(biāo)配,Flask當(dāng)然也不例外,這里我們就來詳解Python的Flask框架中生成SECRET_KEY密鑰的方法2016-06-06中秋節(jié)老家要貼對聯(lián)之python無線對聯(lián)生成器
適逢中秋老家居然有在中秋貼對聯(lián)的習(xí)俗,于是自己開機立馬寫了一個對聯(lián)生成器,文中給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有參考價值2021-09-09