urllib库使用繁琐,比如处理网页验证和Cookies时,需要编写Opener和Handler来处理。为了更加方便的实现这些操作,就有了更为强大的requests库。
request库的安装
requests属于第三方库,Python不内置,因此需要我们手动安装。
1、相关链接
-
GitHub:https://github.com/psf/requests
-
PyPI:https://pypi.org/project/requests/
-
官方文档:https://docs.python-requests.org/en/latest/
-
中文文档:https://docs.python-requests.org/zh_CN/latest/user/quickstart.html
2、通过pip安装
无论是Windows、Linux还是Mac,都可以通过pip这个包管理工具来安装requests。在命令行界面运行如下命令,即可完成requests库的安装:
pip3 install requests
除了通过pip安装,还可以通过wheel或源码安装,这里不进行叙述。
3、验证安装
在命令行可通过导入import库来测试requests是否安装成功。
导入库成功,说明requests安装成功。
基本用法
下面案例使用requests库中的get( )方法发送了一个get请求。
#导入requests库
import requests
#发送一个get请求并得到响应
r = requests.get('https://www.baidu.com')
#查看响应对象的类型
print(type(r))
#查看响应状态码
print(r.status_code)
#查看响应内容的类型
print(type(r.text))
#查看响应的内容
print(r.text)
#查看cookies
print(r.cookies)
这里调用了get( )方法实现urlopen( )相同的操作,结果返回一个响应对象,然后分别输出响应对象类型、状态码、响应体内容的类型、 响应体的内容、Cookies。通过运行结果可以得知:响应对象的类型是requests.models.Response,响应体内容的类型是str,Cookies 的类型是RequestCookieJar。如果要发送其他类型的请求直接调用其对应的方法即可:
r = requests.post('https://www.baidu.com')
r = requests.put('https://www.baidu.com')
r = requests.delete('https://www.baidu.com')
r = requests.head('https://www.baidu.com')
r = requests.options('https://www.baidu.com')
GET请求
构建一个GET请求,请求http://httpbin.org/get(该网站会判断如果客户端发起的是GET请求的话,它返回相应的信息)
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
1)如果要添加请求参数,比如添加两个请求参数,其中name值是germey,age值是20。虽然可以写成如下形式:
r = requests.get('http://httpbin.org/get?name=germey&age=20')
但较好的写法是下面这种写法:
import requests
data = {
'name':'germey',
'age':22
}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)
通过运行结果可以看出,请求的URL最终被构造成了“http://httpbin.org/getname=germey&age=20”。
2)网页的返回内容的类型是str类型的,如果它符合JSON格式,则可以使用json( )方法将其转换为字典类型,以方便解析。
import requests
r = requests.get('http://httpbin.org/get')
#str类型
print(type(r.text))
#返回响应内容的字典形式
print(r.json())
#dict类型
print(type(r.json()))
但需要注意,如果返回的内容不是JSON格式,调用json( )方法便会出现错误,抛出json.decoder.JSONDecodeError异常。
POST请求
1)发送POST请求。
import requests
r = requests.post('http://httpbin.org/post')
print(r.text)
2)发送带有请求参数的POST请求。
import requests
data = {
"name":"germey",
"age":"22"
}
r = requests.post('http://httpbin.org/post',data=data)
print(r.text)
在POST请求方法中,form部分就是请求参数。
设置请求头
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
'my-test':'Hello'
}
r = requests.get('http://httpbin.org/get',headers=headers)
print(r.text)
响应
1)发送请求后,返回一个响应,它具有很多属性,通过它的属性来获取状态码、响应头、Cookies、响应内容等。如下:
import requests
r =