python 学习之 request 库的基本使用
Python 学习之 requests 库的基本使用
requests 是一个功能强大且简洁的 Python 库,主要用于发送 HTTP 请求。它支持多种 HTTP 方法(如 GET、POST、PUT、DELETE 等),并提供了简单易用的接口来处理请求和响应,广泛应用于 Web 数据抓取、API 调用、自动化测试等领域。
本文将详细介绍 requests 库的基本使用方法,通过代码示例和图解帮助你更好地理解和掌握该库。
一、安装 requests 库
在开始使用 requests 库之前,首先需要安装它。可以使用 pip 安装:
pip install requests安装完成后,你就可以在 Python 中导入并使用该库了。
二、发送 HTTP 请求
requests 库支持多种 HTTP 请求方法,包括 GET、POST、PUT、DELETE 等。我们首先来看一下最常用的 GET 和 POST 请求的使用方法。
1. GET 请求
GET 请求通常用于从服务器获取数据。我们可以通过 requests.get() 方法发送一个 GET 请求,并获取服务器的响应。
示例:发送 GET 请求
import requests
# 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 输出响应状态码
print(f"Status Code: {response.status_code}")
# 输出响应内容
print(f"Response Text: {response.text}")
# 输出响应的 JSON 数据
print(f"JSON Data: {response.json()}")说明:
requests.get():发送GET请求。response.status_code:获取响应的状态码(例如 200 表示请求成功)。response.text:获取响应的文本内容。response.json():如果响应数据为 JSON 格式,可以使用.json()方法将其转换为 Python 字典。
2. POST 请求
POST 请求通常用于向服务器提交数据。例如,提交表单数据或上传文件。我们可以通过 requests.post() 方法发送一个 POST 请求。
示例:发送 POST 请求
import requests
# 发送 POST 请求,传递表单数据
data = {
'title': 'foo',
'body': 'bar',
'userId': 1
}
response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)
# 输出响应状态码
print(f"Status Code: {response.status_code}")
# 输出响应的 JSON 数据
print(f"Response JSON: {response.json()}")说明:
requests.post():发送POST请求。data:可以通过data参数发送表单数据(字典形式)。response.json():获取响应的 JSON 数据。
三、传递参数
在发送请求时,常常需要携带一些查询参数(如 GET 请求的查询字符串)或表单数据(如 POST 请求)。requests 库提供了方便的方法来处理这些参数。
1. GET 请求中的查询参数
在 GET 请求中,可以通过 params 参数来传递查询字符串。
示例:传递查询参数
import requests
# 发送 GET 请求,传递查询参数
params = {
'userId': 1
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
# 输出响应的 JSON 数据
print(response.json())说明:
params:将查询参数以字典的形式传递,requests会自动将其转化为查询字符串并附加到 URL 后面。
2. POST 请求中的表单数据
POST 请求中的表单数据可以通过 data 参数传递。
示例:传递表单数据
import requests
# 发送 POST 请求,传递表单数据
data = {
'username': 'john',
'password': '1234'
}
response = requests.post('https://httpbin.org/post', data=data)
# 输出响应的 JSON 数据
print(response.json())说明:
data:以字典的形式传递表单数据,requests会将其编码为application/x-www-form-urlencoded格式。
四、处理请求头
有时我们需要在请求中设置自定义请求头(如 User-Agent、Authorization 等)。可以通过 headers 参数来传递请求头。
示例:设置请求头
import requests
# 设置自定义请求头
headers = {
'User-Agent': 'my-app',
'Authorization': 'Bearer <your_token>'
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
# 输出响应状态码
print(response.status_code)说明:
headers:将请求头信息以字典形式传递给requests.get()或requests.post()方法。
五、处理响应
HTTP 响应包括状态码、响应体、响应头等信息。requests 库提供了多种方法来访问这些信息。
1. 获取状态码
可以使用 response.status_code 获取 HTTP 响应的状态码。
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(f"Status Code: {response.status_code}")2. 获取响应体
可以通过 response.text 获取响应的内容,返回的是字符串类型。
print(f"Response Text: {response.text}")3. 获取 JSON 数据
如果响应内容是 JSON 格式,可以通过 response.json() 将其解析为 Python 字典。
data = response.json()
print(f"Response JSON: {data}")4. 获取响应头
可以通过 response.headers 获取响应头,返回的是一个字典。
print(f"Response Headers: {response.headers}")六、常见问题
1. 设置请求超时
为了避免请求卡住太长时间,可以设置请求超时时间。通过 timeout 参数来设置。
示例:设置请求超时
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts', timeout=3)
print(response.text)
except requests.exceptions.Timeout:
print("The request timed out.")说明:
timeout:设置请求的最大等待时间(秒)。如果请求超过该时间,将引发Timeout异常。
2. 处理异常
requests 库在发送请求时可能会遇到各种网络异常,如连接错误、超时错误等。我们可以使用 try-except 来捕获这些异常。
示例:处理异常
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts')
response.raise_for_status() # 如果响应状态码不是 200,会抛出 HTTPError 异常
except requests.exceptions.HTTPError as err:
print(f"HTTP Error: {err}")
except requests.exceptions.RequestException as err:
print(f"Error: {err}")说明:
response.raise_for_status():如果响应状态码不是 2xx,将抛出HTTPError异常。
七、总结
requests 是一个非常简洁且功能强大的 Python 库,用于发送 HTTP 请求和处理响应。本文详细介绍了 GET 和 POST 请求的基本用法,并展示了如何传递参数、设置请求头、处理响应和常见的异常情况。
掌握了 requests 库后,你就可以轻松地进行 Web 数据抓取、调用 API、自动化测试等工作。希望通过本文的学习,你能更好地理解和使用 requests 库。
评论已关闭