Python requests
库
一、什么是requests
库?
Python的requests
库是一个用于发送HTTP请求的第三方库。它简单易用,封装了许多底层操作,能够帮助开发者更轻松地与Web服务进行通信。requests
库支持发送各种HTTP请求,比如GET、POST、PUT、DELETE等。
requests
库的特点
- 简单易用:与Python的标准库
urllib
相比,requests
更易于使用。 - 功能强大:支持HTTP方法、Cookies、会话、SSL验证等功能。
- 自动处理编码:可以自动检测和处理编码问题。
- 丰富的扩展性:支持自定义头信息、参数和认证方式。
安装requests
库
在使用requests
之前,需要确保已安装该库。可以使用以下命令安装:
pip install requests
二、HTTP请求的基本概念
在了解requests
库的API之前,首先需要了解一些基本的HTTP概念,这有助于理解如何与Web服务交互。
- HTTP方法:常用的有GET、POST、PUT、DELETE等,分别对应不同的操作。比如GET用于获取资源,POST用于提交数据。
- URL:统一资源定位符(Uniform Resource Locator),是访问资源的地址。
- 请求头(Headers):发送请求时可以包含的元数据,如用户代理、内容类型等。
- 请求体(Body):主要用于POST、PUT等请求,包含要发送的数据。
- 响应(Response):服务器返回的内容,包括状态码、响应头、响应体等。
三、requests
库的基本API
1. 发送GET请求
GET请求通常用于从服务器获取数据。它将参数附加在URL的查询字符串中。
语法:
import requestsresponse = requests.get(url, params=None, headers=None)
参数说明:
url
: 请求的URL地址。params
: (可选)字典或元组,附加在URL后的查询参数。headers
: (可选)字典,包含发送的请求头信息。
示例:
response = requests.get('https://jsonplaceholder.typicode.com/posts', params={'userId': 1})
print(response.status_code) # 打印状态码
print(response.json()) # 以JSON格式输出响应内容
使用场景:
- 获取网页内容或API返回的数据。
- 在数据采集和爬虫中,通过GET请求获取目标网页的HTML。
2. 发送POST请求
POST请求用于向服务器提交数据,比如提交表单或者上传文件。
语法:
response = requests.post(url, data=None, json=None, headers=None)
参数说明:
url
: 请求的URL地址。data
: (可选)字典或元组,表单数据将作为请求体发送。json
: (可选)字典或列表,JSON数据将作为请求体发送。headers
: (可选)字典,包含发送的请求头信息。
示例:
payload = {'username': 'test', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=payload)
print(response.json()) # 以JSON格式输出响应内容
使用场景:
- 提交数据给服务器,比如登录表单、评论、上传文件等。
- 爬虫中模拟表单提交,获取特定用户的数据。
3. 发送其他请求 (PUT, DELETE, HEAD)
除了GET和POST请求,requests
库还支持其他HTTP方法。
PUT请求:
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', data={'title': 'new title'})
print(response.status_code)
用于更新资源,通常与GET、POST结合使用。
DELETE请求:
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)
用于删除资源。
HEAD请求:
response = requests.head('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)
类似GET,但只请求响应头而不下载响应体,通常用于检查链接是否可用。
四、处理响应
使用requests
库发送请求后,会得到一个响应对象,可以从中提取有用的信息。
1. 获取响应状态码
状态码用于指示请求的结果,常见的有200(成功)、404(未找到)、500(服务器错误)等。
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # 输出状态码
2. 获取响应内容
响应的内容可以是HTML、JSON等格式,可以根据需要进行处理。
print(response.text) # 以文本形式输出内容
print(response.json()) # 以JSON格式输出内容
3. 获取响应头
print(response.headers) # 输出响应头
五、高级功能
1. 会话处理 (Session)
requests
库提供了会话(Session)对象,可以跨请求保存某些参数,如Cookies。适用于需要连续多次请求并保持状态的场景。
示例:
session = requests.Session()
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get('https://httpbin.org/cookies')
print(response.json()) # 会返回已设置的cookie
2. SSL证书验证
默认情况下,requests
会验证SSL证书,可以通过参数verify
关闭此功能。
response = requests.get('https://expired.badssl.com/', verify=False)
print(response.status_code)
3. 超时设置
可以使用timeout
参数设置请求的超时时间,避免长时间等待。
response = requests.get('https://httpbin.org/delay/3', timeout=2) # 设置2秒超时
六、数据采集与爬虫应用中的使用
在数据采集和简单爬虫开发中,requests
库是获取网页内容的利器。
1. 获取网页HTML
可以通过GET请求获取网页的HTML内容,然后使用解析库如BeautifulSoup
提取信息。
response = requests.get('https://example.com')
html_content = response.text
2. 模拟表单提交
很多网站的数据交互是通过POST请求进行的,requests
库可以帮助我们模拟表单提交。
payload = {'username': 'user', 'password': 'pass'}
response = requests.post('https://example.com/login', data=payload)
3. 处理Cookies
有些网站使用Cookies保存会话信息,requests
库可以方便地管理和发送Cookies。
session = requests.Session()
session.get('https://example.com/login')
response = session.get('https://example.com/profile')
4. 处理分页数据
在抓取多个页面的数据时,常需要处理分页,可以通过循环发送GET请求来实现。
for i in range(1, 6): # 假设有5页数据response = requests.get(f'https://example.com/data?page={i}')print(response.json())
七、总结
requests
库简化了HTTP请求的发送和处理。- 支持多种HTTP方法及高级功能,如会话、SSL验证、超时等。
- 在数据采集和爬虫中非常实用,尤其适合初学者快速上手。