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

Python?requests下載文件的幾種常用方法(附代碼)

 更新時間:2025年03月05日 10:56:32   作者:microhex  
這篇文章主要介紹了五種下載方式的實現(xiàn)方法,包括基礎下載、大文件分塊下載、帶有斷點續(xù)傳的下載、帶有超時和重試的下載以及完整的下載器實現(xiàn),文中給出了詳細的代碼示例,需要的朋友可以參考下

1. 基礎下載:

import requests

def download_file(url, save_path):
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        with open(save_path, 'wb') as f:
            f.write(response.content)
        return True
    return False

# 使用示例
url = "https://example.com/file.pdf"
download_file(url, "file.pdf")


2. 大文件分塊下載:

import requests
from tqdm import tqdm

def download_large_file(url, save_path):
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        file_size = int(response.headers.get('content-length', 0))
        
        # 顯示進度條
        progress = tqdm(response.iter_content(chunk_size=8192), 
                       total=file_size,
                       unit='B', 
                       unit_scale=True)
        
        with open(save_path, 'wb') as f:
            for data in progress:
                f.write(data)
        return True
    return False

3. 帶有斷點續(xù)傳的下載:

import requests
import os

def resume_download(url, save_path):
    # 獲取已下載文件大小
    initial_pos = os.path.getsize(save_path) if os.path.exists(save_path) else 0
    
    # 設置 Header
    headers = {'Range': f'bytes={initial_pos}-'}
    
    response = requests.get(url, stream=True, headers=headers)
    
    # 追加模式打開文件
    mode = 'ab' if initial_pos > 0 else 'wb'
    with open(save_path, mode) as f:
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)

4. 帶有超時和重試的下載:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import time

def download_with_retry(url, save_path, max_retries=3, timeout=30):
    session = requests.Session()
    
    # 設置重試策略
    retries = Retry(total=max_retries,
                   backoff_factor=1,
                   status_forcelist=[500, 502, 503, 504])
    
    session.mount('http://', HTTPAdapter(max_retries=retries))
    session.mount('https://', HTTPAdapter(max_retries=retries))
    
    try:
        response = session.get(url, stream=True, timeout=timeout)
        with open(save_path, 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                if chunk:
                    f.write(chunk)
        return True
    except Exception as e:
        print(f"Download failed: {str(e)}")
        return False


5. 完整的下載器實現(xiàn):

import requests
from tqdm import tqdm
import os
from pathlib import Path
import hashlib

class FileDownloader:
    def __init__(self, chunk_size=8192):
        self.chunk_size = chunk_size
        self.session = requests.Session()
        
    def get_file_size(self, url):
        response = self.session.head(url)
        return int(response.headers.get('content-length', 0))
    
    def get_file_hash(self, file_path):
        sha256_hash = hashlib.sha256()
        with open(file_path, "rb") as f:
            for byte_block in iter(lambda: f.read(4096), b""):
                sha256_hash.update(byte_block)
        return sha256_hash.hexdigest()
    
    def download(self, url, save_path, verify_hash=None):
        save_path = Path(save_path)
        
        # 創(chuàng)建目錄
        save_path.parent.mkdir(parents=True, exist_ok=True)
        
        # 獲取文件大小
        file_size = self.get_file_size(url)
        
        # 設置進度條
        progress = tqdm(total=file_size,
                       unit='B',
                       unit_scale=True,
                       desc=save_path.name)
        
        try:
            response = self.session.get(url, stream=True)
            with save_path.open('wb') as f:
                for chunk in response.iter_content(chunk_size=self.chunk_size):
                    if chunk:
                        f.write(chunk)
                        progress.update(len(chunk))
            
            progress.close()
            
            # 驗證文件完整性
            if verify_hash:
                downloaded_hash = self.get_file_hash(save_path)
                if downloaded_hash != verify_hash:
                    raise ValueError("File hash verification failed")
                    
            return True
            
        except Exception as e:
            progress.close()
            print(f"Download failed: {str(e)}")
            if save_path.exists():
                save_path.unlink()
            return False
            
    def download_multiple(self, url_list, save_dir):
        results = []
        for url in url_list:
            filename = url.split('/')[-1]
            save_path = Path(save_dir) / filename
            success = self.download(url, save_path)
            results.append({
                'url': url,
                'success': success,
                'save_path': str(save_path)
            })
        return results

# 使用示例
downloader = FileDownloader()

# 單文件下載
url = "https://example.com/file.pdf"
downloader.download(url, "downloads/file.pdf")

# 多文件下載
urls = [
    "https://example.com/file1.pdf",
    "https://example.com/file2.pdf"
]
results = downloader.download_multiple(urls, "downloads")

總結 

到此這篇關于Python requests下載文件的幾種常用方法的文章就介紹到這了,更多相關Python requests下載文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python 文本單詞提取和詞頻統(tǒng)計的實例

    python 文本單詞提取和詞頻統(tǒng)計的實例

    今天小編就為大家分享一篇python 文本單詞提取和詞頻統(tǒng)計的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python使用selenium模擬瀏覽器進入好友QQ空間留言功能

    python使用selenium模擬瀏覽器進入好友QQ空間留言功能

    這篇文章主要介紹了python使用selenium模擬瀏覽器進入好友QQ空間留言,在本文實現(xiàn)過程中需要注意的是留言框和發(fā)表按鈕在不同的frame,發(fā)表在外面的一層,具體實現(xiàn)過程跟隨小編一起看看吧
    2022-04-04
  • python基于opencv 實現(xiàn)圖像時鐘

    python基于opencv 實現(xiàn)圖像時鐘

    這篇文章主要介紹了python基于opencv 實現(xiàn)圖像時鐘的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python框架flask知識總結

    python框架flask知識總結

    今天帶大家復習python框架的相關知識,文中對flask作了非常詳細的介紹,對正在學習python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python數(shù)據可視化之用Matplotlib繪制常用圖形

    Python數(shù)據可視化之用Matplotlib繪制常用圖形

    Matplotlib能夠繪制折線圖、散點圖、柱狀圖、直方圖、餅圖. 我們需要知道不同的統(tǒng)計圖的意義,以此來決定選擇哪種統(tǒng)計圖來呈現(xiàn)我們的數(shù)據,今天就帶大家詳細了解如何繪制這些常用圖形,需要的朋友可以參考下
    2021-06-06
  • python遞歸打印某個目錄的內容(實例講解)

    python遞歸打印某個目錄的內容(實例講解)

    下面小編就為大家?guī)硪黄猵ython遞歸打印某個目錄的內容(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python?中賦值,深拷貝,淺拷貝的區(qū)別

    python?中賦值,深拷貝,淺拷貝的區(qū)別

    這篇文章主要介紹了python?中賦值,深拷貝,淺拷貝的區(qū)別,下文利用實例對三者進行詳細的解析,具有一的的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-03-03
  • python 錯誤處理 assert詳解

    python 錯誤處理 assert詳解

    這篇文章主要介紹了python 錯誤處理 assert詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python3如何使用range函數(shù)替代xrange函數(shù)

    Python3如何使用range函數(shù)替代xrange函數(shù)

    這篇文章主要介紹了Python3如何使用range函數(shù)替代xrange函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 在Python中操作文件之truncate()方法的使用教程

    在Python中操作文件之truncate()方法的使用教程

    這篇文章主要介紹了在Python中操作文件之truncate()方法的使用教程,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05

最新評論