前言
网站必须是登录状态才能查看网站信息,是最常见的反爬手段,下面我分享一下request模拟登录状态进行请求
目录
模拟登录的原理
直接复制网站Cookie模拟登录状态
通过登录接口信息破解出Cookie模拟登录状态
模拟登录的原理
网站是使用Cookie和session记录网站的登录状态的
常见有三种情况
情况一
直接把用户信息放到Cookie里面,明文暴露用户信息,不安全,一般很少网站使用
情况二
网站通过session对用户信息进行键值对的方式进行存储,sesionID和用户信息,cookie存储的是sessionID,后台通过cookie存储的sessionID来对用户信息进行寻找
情况三
分布式情况下,后台把用户信息存储到Redis里面了,原理和情况二一样
其他情况加入反爬加密,需要自己解密了
总结: 无论他是使用那种情况开发登录功能,一般登录状态的信息在请求头cookie或者Authorization里面
所以我们在request请求的时候拿到网站Cookie或者Authorization就可以保证网站的登录状态了,也就模拟了用户登录
直接复制网站Cookie模拟登录状态
这种适合自己临时使用,因为Cookie会变,这样获取肯定不能长时间使用
找到你需要请求的接口,找到Cookie的字符串
import requests#添加请求头用户代理,模拟真人行为
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
}cookies = '在网页上面获取的cookie字符串'#处理Cookie字符串可以放到request里面使用
cookies = {item.split('=')[0]: item.split('=')[1] for item in cookies.split("; ")}
cookies = requests.utils.cookiejar_from_dict(cookies)url = "请求网址"response = requests.get(url, headers=headers, cookies=cookies)#得到网页源代码
print(response.text)
通过登录接口信息破解出Cookie模拟登录状态
这种就是先使用这个网站的登录接口进行登录,看返回的信息里面一般是有生成Cookie信息的原材料
如果网站没有反爬机制,就直接把Cookie信息给你了,下面我展示一下没有反爬机制的代码逻辑
import requests#给请求头加入用户代理,模拟真人环境
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
}#我以登录接口是post请求为例
loginUrl = "网站的登录请求路径"#请求体
loginData = {"key1": "value1","key2": "value2","key3": "value3"
}#调用请求接口
loginResponse = requests.post(loginUrl, data=loginData, headers=headers)#此时可以拿到登录接口返回的cookie数据
#放入Cookie模拟登录状态,调用目标请求网站网址
url = "目标网站的网址"
res = requests.get(url, headers=headers,cookies=loginResponse.cookies)
#获取到目标请求网页的源代码
print(res.text)
其实大多数网站是有反爬机制的,所以上面这种情况适用的网站很少
如果有反爬机制,他会把返回的Cookie信息进行加密处理什么的,那么就需要自己自行探索了
拿到Cookie信息,后面就和《直接复制网站Cookie模拟登录状态》步骤一样了
如果很复杂,解密不了,可以操控浏览器来进行对Cookie的获取,如果有需要的同志可以看我的文章
selenium基础知识 和 模拟登录selenium版本-CSDN博客