python——requests

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 requests

response = 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验证、超时等。
  • 在数据采集和爬虫中非常实用,尤其适合初学者快速上手。

你可能感兴趣的:(python相关,python,数据分析,开发语言)