激情的开头,大意的结局,Python反爬加更,好友求助米哈游的API,给他安排上 Y24
📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
⛳️ 实战场景
本篇博客属于加更系列,源自 78 技术人社群(点击博客下卡片你也可以加入)
本次的需求是一个站点,地址如下所示,群友提供的地址。
bbs.mihoyo.com/dby/article/21147956
打开页面一看,果然~
在按照群友提供的 API 寻找对应的请求逻辑,下述是群友提供的地址。
bbs-api.Python脱敏处理.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1
它的代码截图如下所示。
在请求头中基本参数具备的情况下,依旧得到了 403 状态码,可以猜测请求头中大概率有加密逻辑,这不巧了么,撞上门的案例。
⛳️ 反爬分析
打开开发者工具之后,直接被无限 debugger 阻挡了。
先禁止这行代码的运行,在行号位置选择下图所示按钮。
找到群友提供的接口,查看其请求头,判断校验参数。
请求网址: bbs-api.脱敏处理.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1
请求方法: GET
除了 cookie 外,下图框选的几个参数有很大的嫌疑。
这里看数据的格式,可以盲猜是时间戳和 md5 加密。
使用 PostMan 模拟一下请求,结果直接访问到数据了,尴尬了,难道跟加密参数无关?
编写代码如下所示:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
"Origin": 'https://bbs.mihoyo.com/',
"User-Agent": "https://bbs.mihoyo.com/"
}
r = requests.get('https://bbs-api.mihoyo.com/post/wapi/getPostFull?gids=5&post_id=21147956&read=1', headers=headers,
timeout=3)
print(r.text)
结果返回的依旧是 403 ,禁止访问。
这种情况有可能是我们缺少某些请求头参数,继续补齐即可。
多次尝试之后,发现 Cookie 中有个参数竟然是 acw_tc
,每次刷新的时候会发生变化,是不是这个原因导致的我们无法访问数据呢?
使用下述代码一下:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
"Origin": 'https://bbs.mihoyo.com/',
"User-Agent": "https://bbs.mihoyo.com/",
"Host": "bbs-api.mihoyo.com"
}
s = requests.Session()
params = {
"gids": 5,
"post_id": 21147956,
"read": 1
}
with s.get('https://bbs-api.mihoyo.com/post/wapi/getPostFull', params=params, headers=headers) as r:
print(r)
还是无法请求到数据,从开发者工具中发现 acw_tc
是一个 httponly
形式的 Cookie。
但是该格式的参数,只是为了防止 XSS 跨域攻击的,也就是防止 JS 获取 cookie,原则上从 Python 代码中发起是不会有限制的。
难道还有其它参数加密了,但是 PostMan 是可以正常请求的,此时我陷入了迷茫~
但是当我复盘代码的时候,我发现犯了一个错误 🤡🤡🤡🤡,我竟然没有写 referer。
修改代码之后,数据成功的获取到了。
📣📣📣📣📣📣
右下角有个大拇指,点赞的漂亮加倍
- 点赞
- 收藏
- 关注作者
评论(0)