网页抓取解密(网易云技能点界面概况静态网页(一)_软件)

优采云 发布时间: 2021-10-13 17:38

  网页抓取解密(网易云技能点界面概况静态网页(一)_软件)

  技能点界面概览

  静态页面

  网易云仍然有一些网页,其网址通常会随着页面变化而变化。您只需要抓取网页进行分析。

  

  动态网页

  但是随着前后端分离的普及,数据分离的好处是显而易见的。越来越多的数据使用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

})

  上面这段代码是源码。我们先不管 JSON.stringify(i3x) 参数是什么,先弄清楚 window.asrsea 是什么。不远处你会发现:

  

  这就是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生成的规则就很清楚了us.Twice.AES cbc加密,offset是60708,两个key不同,函数c是RSA加密的三个参数,整体算法流程差不多有点明白了。

  暂时停在这里,不分析函数,我们在分析数据。

  step3:分析参数

  回到 var bYc7V = window.asrsea(JSON.stringify(i3x), bkY2x(["流泪", "强"]), bkY2x(VM8E.md), bkY2x(["爱心", "girl", "horrified ", "Laughing"])) 这个函数。直觉上我能感觉到有些数据肯定和我们的核心参数没有关系,顶多跟时间戳有关。

  找到bky2x的来源,

  

  再去寻找,其实是没有必要的。寻找这种功能。可以复制到vscode中查找根本原因。分析,这里不做繁琐的介绍。只是中断分析!看看他是如何执行的。

  

  实际上,通过多次捕获,您会发现最后三个参数是固定的(非交互式数据)。

  然而,我最想要的是第一个参数

  

  你想到的参数原来是这样的,所以和预期的差不多,只有第一个参数和我们的参数有关。offset是page*20,R_SO_4_+songid是当前歌曲的id。其实这时候你的i和encSecKey就可以一起保存了。因为上面分析说这个i是随机生成的,encSecKey和我们的核心参数无关,而是和i有关,所以我们需要记录一个组。用作 ESA 加密参数和 post 请求参数。

  你现在是不是很兴奋,因为我真的很想快点浮出水面。

  第4步:检查

  这一步也是很重要的一个环节,因为你会在它的js里面找到。

  

  网易会做些什么吗?下载原创js进行测试。找到了哈哈,结果是一致的。那么就不需要再次更改该加密算法的代码。

  架构图是

  

  step5:转换为python代码

  AES的cbc模式的代码需要用Python克隆。达到加密的效果,测试一下。发现同样的结果很好

  

  编写爬虫

  让我们开始编写一个爬虫。首先使用邮递员测试这些参数。

  

  没问题,写个爬虫。根据你喜欢的兄弟。输入id生成你的爱字云!每个人的美好时光!

  

  源码github地址索要Star。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线