前言

网站必须是登录状态才能查看网站信息,是最常见的反爬手段,下面我分享一下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博客

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐