Python高手必备:用`requests`库轻松下载文件,实战案例解析!
如何使用Python的requests
库下载文件
在Python中,requests
库是一个非常流行的HTTP库,用于发送HTTP请求。它不仅可以用于发送GET和POST请求,还可以用于下载文件。下面是一个详细的步骤指南,说明如何使用requests
库下载文件,并提供一个实际案例。
1. 安装requests
库
首先,你需要确保已经安装了requests
库。如果没有安装,可以使用以下命令进行安装:
pip install requests
2. 下载文件的基本步骤
使用requests
库下载文件的基本步骤如下:
- 发送HTTP GET请求到文件的URL。
- 将响应内容写入本地文件。
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功能,如重定向和认证,使得下载过程更加灵活和强大。
希望这个指南对你有所帮助!