Python requests模块使用
(一)、requests模块介绍
Requests 使用的是 urllib3,是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作
Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,不用这些 API 的原因懂的都懂。它需要巨大的工作量,甚至包括各种方法覆盖,来完成最简单的任务。
Request 优点
- 支持HTTP连接保持和连接池
- 支持使用cookie保持会话
- 支持文件上传
- 支持自动响应内容的编码
- 支持国际化的URL和POST数据自动编码
- 支持自动实现持久连接keep-alive。
(二)、requests模块使用
一、安装导入模块
安装requests模块:
pip install requests
导入模块:
import requests
二、HTTP请求类型
# 1 GET请求
requests.get(“https://www.baidu.com”)
# 2 POST请求
requests.post(“https://www.baidu.com”)
# 3 PUT请求
requests.put(“https://www.baidu.com”)
# 4 DELETE请求
requests.delete(“https://www.baidu.com”)
# 5 HEAD请求
requests.head(“https://www.baidu.com”)
# 6 OPTIONS请求
requests.options(“https://www.baidu.com”)
三、HTTP请求参数
以get为例:
url = "https://www.baidu.com" # 访问网页的URL
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0',
'content-type': 'application/json'} # 请求头内容,以键值对形式
params = {'key':'value'} # 字典传递参数,如果值为None的键不会被添加到url中
data = {'key':'value'} # post使用,如果传递的data是string而不是dict,需要先调用dumps方法格式化一下,例 data = json.dumps(data)
cookies = {'key':'value'} # 必要时可以提前添加
timeout = 5 # 设置秒数(5s)超时,仅对于连接有效
proxies = {'http':'ip1', 'https':'ip2' } # 设置访问代理ip
r = requests.get(url=url, headers=headers, params=params, cookies=cookies, timeout=timeout, proxies=proxies)
四、响应内容
r.encoding #获取当前的编码
r.encoding = 'utf-8' #设置编码
r.status_code #响应状态码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.requests.headers #返回发送到服务器的头信息
r.cookies #返回cookie
r.history #返回重定向信息,当然可以在请求是加上allow_redirects = false 阻止重定向
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
#*特殊方法*#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常
五、以上汇总使用
# HTTP请求类型
# get类型
r = requests.get(”https://www.baidu.com”)
# post类型
r = requests.post(“https://www.baidu.com”)
# put类型
r = requests.put(“https://www.baidu.com”)
# delete类型
r = requests.delete(“https://www.baidu.com”)
# head类型
r = requests.head(“https://www.baidu.com”)
# options类型
r = requests.options(“https://www.baidu.com”)
# 获取响应内容
print(r.content) #以字节的方式去显示,中文显示为字符
print(r.text) #以文本的方式去显示
#URL传递参数
params= {'num1': '1234', 'str1': '一二三四'}
r = requests.get(“https://www.baidu.com”, params=params)
print(r.url) #示例为https://www.baidu.com?num1=1234&str1=一二三四
#获取/修改网页编码
r = requests.get('https://www.baidu.com')
print (r.encoding)
#json处理
r = requests.get('https://www.baidu.com')
print(r.json()) # 需要先import json
# 定制请求头
url = 'https://www.baidu.com'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'}
r = requests.post(url, headers=headers)
print (r.request.headers)
#复杂post请求
url = 'https://www.baidu.com'
data = {'key': 'value'}
r = requests.post(url, data=json.dumps(data)) #如果传递的data是string而不是dict,需要先调用dumps方法格式化一下
# post多部分编码文件
url = 'https://www.baidu.com'
files = {'file': open('upFile.xls', 'rb')}
r = requests.post(url, files=files)
# 响应状态码
r = requests.get('https://www.baidu.com')
print(r.status_code)
# 响应头
r = requests.get('https://www.baidu.com')
print (r.headers)
print (r.headers['Content-Type'])
print (r.headers.get('content-type')) #访问响应头部分内容的两种方式
# Cookies
url = 'https://www.baidu.com'
r = requests.get(url)
r.cookies['cookie_key'] #读取cookies
url = 'https://www.baidu.com'
cookies = dict(cookies_key='value')
r = requests.get(url, cookies=cookies) #发送cookies
#设置超时时间
r = requests.get('https://www.baidu.com', timeout=5)
#设置访问代理
proxies = {
"http": "http://192.168.172.1:6666",
"https": "http://192.168.172.1:6666",
}
r = requests.get('https://www.baidu.com', proxies=proxies)
#如果代理需要用户名和密码,则需要这样:
proxies = {
"http": "http://user:pass@192.168.172.1:6666/",
}
(四)、requests模块应用
参考(以后再整理):
https://www.cnblogs.com/lanyinhao/p/9634742.html
https://www.cnblogs.com/tangdongchu/p/4229049.html#t4
参考网址
其他网站:
https://www.cnblogs.com/lanyinhao/p/9634742.html
https://www.cnblogs.com/tangdongchu/p/4229049.html#t0
https://www.cnblogs.com/wupeiqi/articles/6283017.html自学专用:
https://cn.python-requests.org/zh_CN/latest/user/quickstart.html#id4
https://2.python-requests.org/en/master/
https://docs.python-requests.org/en/latest/user/quickstart/