Python 调整网络代理下载示例


在日常工作中,我们经常需要利用代理从网络上下载国外文件,例如数据集、模型文件等。但是,直接使用Python的requests库下载大文件时,可能因网络中断导致下载失败且无法实时了解下载进度。因此,本文将介绍如何使用Python编写一个简单的文件下载函数,能够实时显示下载进度,提高下载效率和可视化程度。

应用场景

该代码适用于从网络下载国外文件的场景,特别是当下载文件较大时,通过实时显示下载进度,可以让用户清晰地了解下载的过程,提高用户体验。(支持从断点处重连下载,防止因网络波动导致的下载中断。)

使用方法

首先,将需要下载的文件的URL和本地保存的文件路径传入download_file函数中即可开始下载。在下载过程中,会使用tqdm库实时显示下载进度条,用户可以清晰地了解下载的进度。

步骤一:确定代理IP地址及端口

  • 在Python代码的开头加入以下代码,替换proxy_ip_address和port为你实际使用的代理IP地址和端口号:
import os
os.environ['HTTP_PROXY'] = 'http://proxy_ip_address:port'
os.environ['HTTPS_PROXY'] = 'http://proxy_ip_address:port'
  • 其中,proxy_ip_address和port分别为代理服务器的IP地址和端口号。
    • 你可以在你的梯子设置中找到这些信息,通常在设置>网络和Internet>代理>手动设置代理中查看。

  • 举例:
import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:4683'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:4683'

步骤二:确定资源链接与下载位置

  • download_file(url, filename)
    • url: 需要下载的文件的URL。
    • filename: 文件保存的本地路径。
  • 对应信息填充位置:

完整代码

import requests
from tqdm import tqdm
import os

os.environ['HTTP_PROXY'] = 'http://127.0.0.1:xxxx'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:xxxx'


def download_file(url, filename):
    """
    从指定的URL下载文件,并显示下载进度条。

    :param url: 文件的URL地址
    :param filename: 下载文件保存的路径和文件名
    """
    # 检查文件是否存在,如果存在则获取文件大小
    if os.path.exists(filename):
        file_size = os.path.getsize(filename)
    else:
        file_size = 0

    # 发送HTTP请求,设置Range头部以支持断点续传
    headers = {'Range': 'bytes=%d-' % file_size}
    response = requests.get(url, stream=True, headers=headers)

    # 获取文件总大小
    total_size = int(response.headers.get('content-length', 0)) + file_size

    # 使用tqdm显示下载进度条
    progress_bar = tqdm(total=total_size, initial=file_size, unit='B', unit_scale=True, desc=filename)

    # 以二进制方式写入文件
    with open(filename, 'ab') as file:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                file.write(chunk)
                progress_bar.update(len(chunk))

    # 关闭进度条
    progress_bar.close()


def main():
    # 下载文件示例
    url = 'https://'

    filename = r'D:'
    download_file(url, filename)


if __name__ == '__main__':
    main()

代码优势

  1. 实时显示下载进度,用户体验好。
  2. 支持断点续传,当文件已经存在时,会自动判断文件大小并设置Range头部,从上次下载的地方继续下载,避免重新下载整个文件。
  3. 代码简洁易懂,容易修改和扩展。

注意事项

  1. 在使用该代码前,请确保已安装requeststqdm库,可以通过pip install requests tqdm进行安装。
  2. 如果下载过程中出现网络异常或下载速度过慢,可以考虑更换下载源或使用代理。
  3. 注意文件保存路径的设置,确保有足够的磁盘空间和权限。

术语解释

术语/函数解释/用途
VPN虚拟专用网络,用于通过公共网络建立安全连接的技术。在此场景中,用于访问国外资源。
requestsPython中用于发送HTTP请求的库,支持多种HTTP方法和认证方式。
tqdmPython中用于在终端中实时显示进度条的库,可用于任何可迭代对象的迭代过程。
os.environPython中用于管理环境变量的模块,可用于设置代理IP地址和端口号。
requests.get()发送HTTP GET请求的方法,用于从指定的URL获取数据。
response.iter_content()返回一个迭代器,用于逐块读取HTTP响应体的内容。
open()Python中用于打开文件的内置函数,支持多种文件操作模式。

如果这对您有所帮助,希望点赞支持一下作者! 😊

点击查看原文

file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值