欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)批量下載文件的示例代碼

 更新時(shí)間:2023年11月03日 09:13:09   作者:卑微小文  
下載文件是我們在日常工作中常常要做的一件事情,當(dāng)我們需要從互聯(lián)網(wǎng)上批量下載大量文件時(shí),手動一個(gè)一個(gè)去下載顯然不夠高效,所以本文為大家介紹一下如何利用python批量下載文件吧

前言

下載文件是我們在日常工作中常常要做的一件事情。當(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)文章

最新評論