网页抓取解密(技能点界面概况(一)(2)_静态网页)
优采云 发布时间: 2022-01-24 23:18网页抓取解密(技能点界面概况(一)(2)_静态网页)
技能点界面概览静态网页
网易云还是有一些页面的通用URL会随着页面的变化而变化,你只需要抓取网页进行分析。
动态网页
但是随着前后端分离的普及,数据分离的好处是显而易见的。越来越多的数据使用 ajax 渲染。而网易云的评论更是如此。前后端分离刚刚火爆,当时很多网站并没有太多的借口来保护自己。这使许多 网站 很容易获得结果。到目前为止,这样的借口还有很多。这种网站爬行就是傻瓜式爬行。
但是,随着以往技术的发展,接口变得越来越难。拿网易云的评论来说:它的参数很混乱。这串数字是什么?很多人看到这样的数据就会选择放弃。所以让我为你解开它。页面解析 step1:查找参数
可以看到,它有两个参数,一个是params,一个是encSecKey,而且都是加密的,我们要分析它的来源。F12开源并搜索encSckey。
'在这个js里面找encSecKey的时候,发现就在这里。用断点调试后,发现这是最后一个参数的结果。step2:分析js函数
这个js有4w多行。如何在4w多行js中找到有用的信息,然后在这里理清思路?
这需要你的抽象和逆向思考。来吧,让我们开始分析。
var bYc7V = window.asrsea(JSON.stringify(i3x), bkY2x(["流泪", "强"]), bkY2x(VM8E.md), bkY2x(["爱心", "女孩", "惊恐", "大笑"]));
e3x.data = k4o.cz4D({
params: bYc7V.encText,
encSecKey: bYc7V.encSecKey
})
复制代码
以上代码为源码。我们先搞清楚window.asrsea是什么,不管这个JSON.stringify(i3x)的参数是什么。不远处你会发现:
这就是d函数是所有数据和方法的来源。d、e、f、g这四个参数就是我们刚才说的被忽略的参数。从这个函数是分析:encText通过b()函数传递了两次,encSecKey是通过c()函数执行的参数。注意i参数的来源是a(16)。网上看看这些函数。
function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
复制代码
可以发现a(16)是一个随机生成的数,所以我们不用关心。目前b是AES的cbc模式加密。那我们就很清楚规则了由这个encText生成,两次AES的cbc加密,偏移量固定为60708,两个key不一样,而函数c是RSA加密的三个参数,整个算法的大致过程,差不多有点熟悉了。
暂时停在这里,先不分析函数,我们在分析分析数据。
step3:分析参数
回到 var bYc7V = window.asrsea(JSON.stringify(i3x), bkY2x(["tear", "strong"]), bkY2x(VM8E.md), bkY2x(["love", "girl", "horrified" ", "笑"])) 这个函数。直觉上,我们可以感觉到,有些数据肯定和我们的核心参数无关,最多是时间戳。
找到 bky2x 源,
没有必要再次寻找它。你寻找这样的功能。你可以复制到vscode来追踪源头找到源头。分析,这里就不繁琐的介绍了。直接打断分析!看看他是怎么做的。其实多抓几次就会发现最后三个参数是固定的(非交互数据)。但是,我最想要的是第一个参数,你心中的那个参数,长这样,所以和预想的差不多,只有第一个参数和我们的参数有关。offset为page*20,R_SO_4_+songid为当前歌曲的id。其实这个时候你的 i 和 encSecKey 是可以一起保存的。因为上面分析说这个i是随机生成的,而encSecKey和我们的核心参数无关,而是和i有关,所以我们需要记录一组。
你现在是不是很兴奋,因为你真的很想浮出水面。
第四步:验证
这一步也是很重要的部分,因为你会在它的js中找到。
网易会有所作为吗?下载原版js进行测试。找到了哈哈,结果是一样的。那么你就不需要仔细改变那个加密算法的代码了。
架构图是
step5:转换成python代码
AES 的 cbc 模式的代码需要在 Python 中克隆。要达到加密的效果,测试一下。结果发现和nice一致
写爬虫
让我们开始编写爬虫。首先用邮递员测试这些参数。
没问题,写一个爬虫。根据你最喜欢的兄弟。输入id生成你喜欢的词云!对每个人来说都是一个辉煌的时刻!源码github地址求Star。