网页抓取解密(技能点界面概况(一)(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。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线