写在前面
在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,这时就需要用到保持会话的功能
1、requests.session简单例子
参考源:https://www.cnblogs.com/qican/p/11153824.html
requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies
代码
import requests
s = requests.Session()
s.get('https://httpbin.org/get')
requests.Session().get()和requests.get(),除了前者能传递cookie参数以外,其他的一致
2、模拟百度登录
首先我们打开百度,查看登录后百度账号的cookies值,经过观察发现是由”BAIDUID“和"BDUSS"记录登录状态
在网页里面登录后,复制”BAIDUID“和"BDUSS"这两个参数的值
# coding:utf-8
import requests
# 保持登录状态
s = requests.session()
url = 'https://www.baidu.com/'
# 请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
}
r = s.post(url,headers=headers)
# 查看的cookies值
cooks = {
"BDUSS":"xxxxxxx",
"BAIDUID":"XXXXXXXX"
}
# 添加登录所携带的cookies
c = requests.cookies.RequestsCookieJar()
c.set("BDUSS",cooks["BDUSS"])
c.set("BAIDUID",cooks["BAIDUID"])
s.cookies.update(c)
# 判断是否登录成功
r2 = s.get(url,headers=headers)
if '换肤' in r2.text:
print('登录成功')
else:
print("登录失败")
### 运行结果:登录成功
这里为什么要if ‘换肤’在r2里,因为登录前页面代码里是没有这个词的,登录后才有
登录前:
登陆后: