第十篇 requests模块
1.安装requests
要安装requests,在终端中输入以下命令即可安装:
1 pip3 install requests
2.发送请求
使用requests发送请求首先需要导入requests模块,然后发送get请求到网站:
1 import requests 2 3 r = requests.get("http://www.baidu.com")
发送其他类型的请求:
1 import requests 2 3 r = requests.post("http://www.xxx.com", data={"key": "value"}) 4 r = requests.put("http://www.xxx.com/method", data={"key": "value"}) 5 r = requests.delete("http://www.xxx.com/delete") 6 r = requests.head("http://www.xxx.com/get") 7 r = requests.options("http://www.xxx.com/get")
3.传递URL参数
如果希望为URL的查询字符串传递数据,Python提供了支持,数据会以键/值对的形式置于URL中,跟在一个问号后面。
1 import requests 2 3 r = requests.get("http://www.baidu.com/s", params={"wd": "Python"}) 4 5 print(r.url) 6 7 -------输出结果--------- 8 http://www.baidu.com/s?wd=Python
4.状态码
从请求的响应中获取状态码,状态码会展示请求的状态。
如,状态码为200 OK表示请求成功,404 NOT FOUND表示找不到资源,可以通过response对象的.status_code查看返回的状态码:
1 In [1]: import requests 2 3 In [2]: r = requests.get("http://www.baidu.com") 4 5 In [3]: r.status_code 6 Out[3]: 200
4.获取响应内容
我们可以读取服务器响应的内容。
1 import requests 2 3 r = requests.get("http://www.baidu.com") 4 r.encoding = "utf-8" 5 print(r.text)
说明:r.text返回的是Unicode格式,通常需要转换为utf-8,不然的话,会是乱码,通过使用r.encoding='utf-8',可以避免乱码的问题。
5.获取二进制响应内容
1 import requests 2 3 r = requests.get("http://www.baidu.com") 4 print(r.content) 5 print(r.content.decode("utf-8"))
r.content获取二进制数据,可以用来下载视频,图片之类,如果想要看的话,可以使用r.content.decode()解码。
6.获取JSON格式内容
1 import requests 2 3 r = requests.get("http://www.xxx.com") 4 print(r.json())
使用r.json处理json数据。
7.定制请求头
当我们使用如下方式访问知乎时,是无法访问的,需要添加headers信息。
1 r = requests.get("https://www.zhihu.com") 2 r.encoding = "utf-8" 3 print(r.text.encode("gbk", "ignore").decode("gbk")) 4 5 ------输出结果------ 6 <html> 7 <head><title>400 Bad Request</title></head> 8 <body bgcolor="white"> 9 <center><h1>400 Bad Request</h1></center> 10 <hr><center>openresty</center> 11 </body> 12 </html>
想要访问就必须添加headers信息:
1 import requests 2 3 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"} 4 r = requests.get("https://www.zhihu.com", headers=headers) 5 6 r.encoding = "utf-8" 7 print(r.text.encode("gbk", "ignore").decode("gbk"))
8.发送post请求
1 import requests 2 3 data = { 4 "name": "zhangsan", 5 "age": "28" 6 } 7 8 r = requests.post("http://httpbin.org/post", data=data) 9 10 print(r.text)
9.响应
1 # -*- coding:utf-8 -*- 2 import requests 3 4 r = requests.get("http://www.baidu.com") 5 # 输出请求页面的状态码 6 print(r.status_code) 7 # 输出请求页面的所有请求头信息 8 print(r.headers) 9 # 输出请求的cookies信息 10 print(r.cookies) 11 # 输出请求的地址 12 print(r.url) 13 # 打印请求的历史记录 14 print(r.history)