当前位置:   article > 正文

Python使用requests库下载文件详解_python requests下载文件

python requests下载文件

一、引言

在Python编程中,requests库是用于发送HTTP请求和处理HTTP响应的常用库。使用requests库,我们可以轻松地发送GET、POST等请求,并获取响应内容。在下载文件的过程中,requests库提供了一种简便的方法来获取远程服务器上的文件,并将其保存到本地。本文将详细介绍如何使用requests库进行文件下载,并解析其中的技术细节。

二、使用requests库下载文件的基本流程

使用requests库下载文件的基本流程如下:

1.导入requests库:首先,我们需要在Python脚本中导入requests库,以便使用其提供的函数和方法。
2.发送GET请求:使用requests库的get()函数发送GET请求,指定要下载的文件的URL。
3.检查响应状态码:在获取到响应后,我们需要检查响应的状态码,以确保请求成功。状态码200表示请求成功。
4.读取响应内容:如果响应成功,我们可以使用response对象的text属性来读取响应的内容。对于二进制文件,可以使用response对象的content属性来获取文件内容。
5.将文件保存到本地:最后,我们将文件内容写入本地文件,完成文件下载。
下面是一个简单的示例代码,演示如何使用requests库下载文件:

import requests  
  
url = 'http://example.com/file.txt'  # 要下载的文件的URL  
response = requests.get(url, stream=True)  # 发送GET请求,stream参数指定以流的方式下载文件  
  
if response.status_code == 200:  # 检查响应状态码  
    with open('file.txt', 'wb') as f:  # 打开本地文件进行写入操作  
        for chunk in response.iter_content(chunk_size=1024):  # 分块读取文件内容,每次读取1KB  
            if chunk:  # 检查是否有数据块可读  
                f.write(chunk)  # 将数据块写入本地文件  
                f.flush()  # 刷新缓冲区,确保数据写入磁盘  
    print('文件下载完成!')  
else:  
    print('下载失败,状态码:', response.status_code)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在上述代码中,我们使用了requests库的get()函数发送GET请求,并将stream参数设置为True,以便以流的方式下载文件。然后,我们检查响应的状态码,如果状态码为200,则表示请求成功。接下来,我们打开本地文件进行写入操作,并使用response对象的iter_content()方法分块读取文件内容。每次读取1KB的数据块,并将其写入本地文件。最后,我们刷新缓冲区并关闭文件句柄,确保数据写入磁盘。如果下载失败,我们将打印出状态码以供参考。

三、请求设置和响应处理

在使用requests库进行文件下载时,我们可以设置请求头部、跟随重定向、处理HTTP认证等。同时,我们也需要正确处理响应,包括获取响应状态码、响应头和响应体等信息。

1.请求头部设置
我们可以通过在get()函数或request()函数中传递headers参数来设置请求头部信息。例如,要设置User-Agent,可以传递一个包含User-Agent键值对的字典给headers参数。

2.跟随重定向
默认情况下,requests库会自动跟随HTTP重定向。如果需要禁用自动跟随重定向,可以将allow_redirects参数设置为False。

3.处理HTTP认证
如果需要HTTP认证,可以在get()函数或request()函数中传递auth参数,该参数接受一个包含用户名和密码的元组。

4.响应状态码检查
在获取到响应后,我们需要检查状态码以确保请求成功。可以使用response.status_code属性来获取状态码。常见的状态码包括200(成功)、404(未找到)等。

5.响应头处理
响应头包含服务器返回的HTTP头部信息。可以通过response.headers属性来获取响应头信息。

6.响应体处理
响应体包含服务器返回的HTTP正文内容。可以通过response.text属性(用于文本内容)或response.content属性(用于二进制内容)来获取响应体信息。

python
import requests  
  
url = 'http://example.com/file.txt'  
headers = {'User-Agent': 'Mozilla/5.0'}  # 设置请求头部信息  
auth = ('username', 'password')  # 设置HTTP认证信息  
response = requests.get(url, headers=headers, auth=auth, stream=True)  # 发送GET请求,stream参数指定以流的方式下载文件  
  
if response.status_code == 200:  # 检查响应状态码  
    with open('file.txt', 'wb') as f:  # 打开本地文件进行写入操作  
        for chunk in response.iter_content(chunk_size=1024):  # 分块读取文件内容,每次读取1KB  
            if chunk:  # 检查是否有数据块可读  
                f.write(chunk)  # 将数据块写入本地文件  
                f.flush()  # 刷新缓冲区,确保数据写入磁盘  
    print('文件下载完成!')  
else:  
    print('下载失败,状态码:', response.status_code)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

四、异常处理

在使用requests库进行文件下载时,我们还需要注意异常处理,以确保程序能够稳定运行。常见的异常包括网络连接问题、HTTP请求错误、文件写入错误等。

1.网络连接问题
如果下载文件时出现网络连接问题,我们可以捕获requests库的RequestException异常并进行相应处理。例如,可以尝试重新连接服务器或提供错误提示信息给用户。

2.HTTP请求错误
如果服务器返回的HTTP状态码表示请求错误,例如404(未找到)或500(服务器内部错误),我们可以捕获requests库的HTTPError异常并进行相应处理。例如,可以提供错误提示信息给用户或记录错误信息以供后续分析。

3.文件写入错误
在将文件内容写入本地文件时,如果出现写入错误,我们可以捕获Python内置的文件异常并进行相应处理。例如,可以尝试重新写入文件或提供错误提示信息给用户。

示例代码:

 
import requests  
  
url = 'http://example.com/file.txt'  
headers = {'User-Agent': 'Mozilla/5.0'}  # 设置请求头部信息  
auth = ('username', 'password')  # 设置HTTP认证信息  
  
try:  
    response = requests.get(url, headers=headers, auth=auth, stream=True)  # 发送GET请求,stream参数指定以流的方式下载文件  
    if response.status_code == 200:  # 检查响应状态码  
        with open('file.txt', 'wb') as f:  # 打开本地文件进行写入操作  
            for chunk in response.iter_content(chunk_size=1024):  # 分块读取文件内容,每次读取1KB  
                if chunk:  # 检查是否有数据块可读  
                    f.write(chunk)  # 将数据块写入本地文件  
                    f.flush()  # 刷新缓冲区,确保数据写入磁盘  
        print('文件下载完成!')  
    else:  
        print('下载失败,状态码:', response.status_code)  
except requests.exceptions.RequestException as e:  # 处理网络连接问题和其他HTTP请求错误  
    print('请求错误:', str(e))  
except FileNotFoundError as e:  # 处理文件写入错误  
    print('文件写入错误:', str(e))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
'
运行
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/1010903
推荐阅读
相关标签
  

闽ICP备14008679号