Python實(shí)現(xiàn)批量下載文件的示例代碼
前言
下載文件是我們在日常工作中常常要做的一件事情。當(dāng)我們需要從互聯(lián)網(wǎng)上批量下載大量文件時(shí),手動一個(gè)一個(gè)去下載顯然不夠高效。為了解決這個(gè)問題,我們可以使用Python編寫一個(gè)批量下載文件的腳本,讓它自動幫我們下載文件。同時(shí),為了避免下載過程中被網(wǎng)站禁止訪問,我們也可以運(yùn)用代理ip。
在本文中,我將會分為以下幾個(gè)部分來介紹如何使用Python進(jìn)行批量下載:
- 準(zhǔn)備工作
- 批量下載文件
- 添加代理ip
- 處理異常
在本文中,我將使用requests庫來進(jìn)行文件下載和代理設(shè)置。我們將會介紹如何通過requests庫來下載文件、如何設(shè)置代理ip來繞過網(wǎng)站的訪問限制,以及如何處理下載過程中可能會出現(xiàn)的異常。
1. 準(zhǔn)備工作
在進(jìn)行批量下載之前,我們需要先確定要下載的文件的URL列表??梢詫⑦@些URL存儲在一個(gè)文本文件中,每行一個(gè)URL,例如:
http://example.com/file1.zip http://example.com/file2.zip http://example.com/file3.zip
我們可以使用Python的open函數(shù)讀取這個(gè)文本文件并獲取URL列表:
with open('urls.txt', 'r') as f: urls = f.read().splitlines()
這里我們使用了read函數(shù)將整個(gè)文本文件內(nèi)容讀入內(nèi)存,然后使用splitlines函數(shù)將每一行的URL轉(zhuǎn)換成一個(gè)列表。
2. 批量下載文件
批量下載文件的代碼主要分為兩個(gè)部分,一個(gè)是從遠(yuǎn)程服務(wù)器下載文件,另一個(gè)是將文件保存到本地。
我們可以使用Python的requests庫來下載文件,并且可以通過設(shè)置stream=True參數(shù)來實(shí)現(xiàn)分塊下載,有利于下載大文件時(shí)減少內(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()
這個(gè)函數(shù)接收兩個(gè)參數(shù),一個(gè)是遠(yuǎn)程服務(wù)器上的文件URL,另一個(gè)是本地文件路徑。內(nèi)部使用requests.get函數(shù)來下載文件,將響應(yīng)對象以二進(jìn)制流的方式寫入本地文件中。
3. 添加代理ip
有些網(wǎng)站可能會對同一IP地址下載次數(shù)進(jìn)行限制,導(dǎo)致我們無法下載。為了繞過這個(gè)限制,我們可以使用代理IP。
代理IP是一種通過轉(zhuǎn)發(fā)來實(shí)現(xiàn)客戶端與服務(wù)端間請求、響應(yīng)的中間服務(wù)器。我們可以使用代理服務(wù)器來隱藏客戶端的真實(shí)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: # 下載文件
這里我們定義了一個(gè)字典類型的proxies,其中key為協(xié)議類型,value為代理IP地址。然后在requests.get函數(shù)中設(shè)置proxies參數(shù)即可。
4. 處理異常
在實(shí)際使用中,我們可能會遇到諸如文件不存在、網(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語句將異常信息輸出到控制臺。這樣,即使下載文件失敗,程序也不會因此停止運(yù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}') with open('urls.txt', 'r') as f: urls = f.read().splitlines() for url in urls: filename = url.split('/')[-1] download_file(url, filename)
這是一個(gè)基本的批量下載代碼,可以從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)
這個(gè)代碼與前面的批量下載代碼類似,只是在下載文件時(shí)設(shè)置了proxies參數(shù)。
總結(jié)
使用Python編寫批量下載代碼,可以提高工作效率。本文介紹了如何使用requests庫來下載文件,如何設(shè)置代理IP來繞過某些網(wǎng)站的下載限制,并且展示了如何處理下載過程中可能會出現(xiàn)的異常。
到此這篇關(guān)于Python實(shí)現(xiàn)批量下載文件的示例代碼的文章就介紹到這了,更多相關(guān)python批量下載文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決python問題 Traceback (most recent call&n
這篇文章主要介紹了解決python問題 Traceback (most recent call last),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12PyCharm2021最新激活碼+激活碼補(bǔ)丁(親測最新版PyCharm2021.3激活成功)
這篇文章主要介紹了PyCharm2021最新激活碼+激活碼補(bǔ)丁,親測最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09Python 實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例(靜態(tài)圖片,gif皆可)
這篇文章主要介紹了Python 實(shí)現(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í)俗,于是自己開機(jī)立馬寫了一個(gè)對聯(lián)生成器,文中給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有參考價(jià)值2021-09-09Python基礎(chǔ)教程之錯(cuò)誤和異常的處理方法
程序在運(yùn)行時(shí),如果python解釋器遇到一個(gè)錯(cuò)誤,會停止程序的執(zhí)行,并且提示一些錯(cuò)誤信息,這就是異常,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之錯(cuò)誤和異常的處理方法,需要的朋友可以參考下2022-05-05一行代碼python實(shí)現(xiàn)文件共享服務(wù)器
這篇文章主要介紹了一行代碼python實(shí)現(xiàn)文件共享服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04