Python高手必备:用`requests`库轻松下载文件,实战案例解析!

作者:admin 发表于:2025-03-03

如何使用Python的requests库下载文件

在Python中,requests库是一个非常流行的HTTP库,用于发送HTTP请求。它不仅可以用于发送GET和POST请求,还可以用于下载文件。下面是一个详细的步骤指南,说明如何使用requests库下载文件,并提供一个实际案例。

1. 安装requests

首先,你需要确保已经安装了requests库。如果没有安装,可以使用以下命令进行安装:

pip install requests

2. 下载文件的基本步骤

使用requests库下载文件的基本步骤如下:

  1. 发送HTTP GET请求到文件的URL。
  2. 将响应内容写入本地文件。

3. 下载文件的代码示例

以下是一个简单的Python脚本,演示如何使用requests库下载文件:

import requests

def download_file(url, local_filename):
    # 发送GET请求
    response = requests.get(url, stream=True)
    
    # 检查请求是否成功
    if response.status_code == 200:
        # 打开本地文件以写入二进制数据
        with open(local_filename, 'wb') as file:
            # 逐块写入文件
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
        print(f"文件已成功下载到 {local_filename}")
    else:
        print(f"下载失败,状态码: {response.status_code}")

# 示例URL和本地文件名
url = 'https://example.com/path/to/file.zip'
local_filename = 'downloaded_file.zip'

# 调用下载函数
download_file(url, local_filename)

4. 代码解释

  • requests.get(url, stream=True): 发送GET请求并设置stream=True,这样requests会立即开始下载文件,而不是等待整个响应内容加载完毕。

  • response.status_code: 检查HTTP状态码,确保请求成功(状态码200表示成功)。

  • response.iter_content(chunk_size=8192): 逐块读取响应内容。chunk_size参数指定了每次读取的字节数。

  • with open(local_filename, 'wb') as file: 以二进制写入模式打开本地文件。

  • file.write(chunk): 将每个块写入本地文件。

5. 处理大文件

对于大文件,使用流式下载(即stream=True)非常重要,因为它允许你在下载过程中逐步写入文件,而不是一次性加载整个文件到内存中。

6. 处理重定向和认证

如果文件URL需要重定向或认证,requests库可以自动处理这些情况。你只需要确保URL是正确的,并且如果有认证需求,可以在请求中添加auth参数。

7. 实际案例

假设你要从一个受保护的URL下载一个文件,并且需要使用基本认证。以下是一个示例:

import requests
from requests.auth import HTTPBasicAuth

def download_protected_file(url, local_filename, username, password):
    # 发送GET请求,并使用基本认证
    response = requests.get(url, stream=True, auth=HTTPBasicAuth(username, password))
    
    if response.status_code == 200:
        with open(local_filename, 'wb') as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
        print(f"文件已成功下载到 {local_filename}")
    else:
        print(f"下载失败,状态码: {response.status_code}")

# 示例URL和本地文件名
url = 'https://protected.example.com/path/to/file.zip'
local_filename = 'downloaded_file.zip'
username = 'your_username'
password = 'your_password'

# 调用下载函数
download_protected_file(url, local_filename, username, password)

8. 总结

使用requests库下载文件非常简单,只需几行代码即可完成。通过设置stream=True,你可以高效地处理大文件下载,并且requests库还支持各种HTTP功能,如重定向和认证,使得下载过程更加灵活和强大。

希望这个指南对你有所帮助!

分享:

扫一扫在手机阅读、分享本文