本帖最后由 潇洒的吸血鬼 于 2021-8-6 10:44 编辑
记一次爬取数据过程
目标网站
某磁力连接网站
目标
获取如图信息
遇到问题
-
数据是js加载的
-
数据是加密(?)的
图片1
那么目标就变成从接口获取数据然后进行解密操作了
解密数据
格式化代码
关键JS文件是压缩过的,无法进行调试。需要格式化后才可以进行调试
首先找到关键JS文件
点击代码左下角进行格式化
格式化后会生成一个新的JS文件,这个时候刷新页面,在新的JS里面打的断点就会起作用
开始调试
首先查找接口看是否可以获取线索
显然,基本没有什么多余的信息可以获取
那么换一种思路,从接口获取数据到渲染页面一定会有从接口返回数据中读取列表信息的过程
经过查看接口返回值,发现列表信息对应的Key为hits
所以搜索hits(注意搜索时选择不忽略大小写)
如图所示,从请求接口返回值中获取列表数据
只需要关注这一句
l.adapter.data.pushAll(a)
接下来搜索adapter.data
一共7个结果,经过查看除了调用clear()就是调用length。只有这里最可疑
接下来走了一些弯路,我先后去搜索了wt,We,Ue这几个函数,发现这些方法实现的逻辑是构造虚拟dom。渲染页面。没有我关注的解密数据过程
直到我发现这一行代码
原来如此,解密方法写在String的原型中,最后搜索到解密方法如下
String.prototype.decrypt = function() {
var e = this.valueOf();
if (0 < this.length) {
for (var t = [], n = 0; n < e.length; n++)
t[n] = 202033 ^ e.charCodeAt(n);
e = String.fromCharCode.apply(null, t)
}
return e
}
python版本
if __name__ == '__main__':
s = "誨曑嬲誨曑䑙菷"
t = ''
for c in s:
t += chr((202033 ^ ord(c)) % 65536)
print(t)
# 输出结果
# 龙珠(七龙珠)全集
结语
虽然如此,最后分析的结果并没有用上
成品开源项目
|