关于国内某体育赛事网站的最新的视频直播流采集分析
前语:
**
本文仅用于交流学习,请勿用于非法用途及商业用途,否则后果自负!
**
本文涉及到的爬虫知识点:js逆向,js代码混淆,位运算
前文:
因为年初疫情大爆发,所以许多赛事都开启了延迟比赛模式,趁着赛事延期,不少体育赛事网站也进行了不同程度的网站迭代更新,其中就包括今日的主角,我们国内比较出名的某速(下面简称速速),随着各大赛事的陆续开始恢复赛程,速速也开启了自己的全新版本,不近赛事更加全面了,赛事直播视频画质更高清了,数量更是多了不少。
当然咯,伴随着全新的速速而来的也有全新的视频反爬机制。接下来,我们将通过一系列的讲解,来了解下,升级后的速速的视频直播地址怎么获取。
正文:
首先,少不了的观察法:通过F12以及一系列的点点可知:点击视频按钮可以触发一个请求https://web-gateway.leisu.com/v1/web/match/common/video_link?match_id=3470421&game_id=0&video_type=1&sport_id=1
,响应内容是一个携带了诸如UOaMHKzkZ9t5QEO6sr5BS9K49X5jLgqSi+eL/74fDbprwXO1SxWqpqGzjgmp/NLr25DO0/N4RaUBXotcgXPd4rYDnmFuw+7uwo2gfw11jA9MIhpOEK4jSB/AXDWrnmGAJergcjs6QZgBQv4aYTKhdyejsZgedp+5hpF/87Qy3RZrROc6E+UibUut0hgDIpl4/ZkEzh606cv8baYV0qm8cCeNVZ607aQShJoxV3DTT1c=
乱码型字符串的json数据,发送了该请求后不一会之后,就开始播放视频了。身为爬虫,直觉告诉我们,这就是携带了播放地址的加密数据了,那怎么破解出来呢,不急,且让我们慢慢的逆向回去
传入decryptBlock函数中进行指定数组元素的位置互换操作,在位置互换操作过程中,将位置互换过的数组数据传到_doCryptBlock中进行数组的位运算操作。这个时候就出现另外一个问题了
如图示:this[t[169]],u,v,p,d,e这些参数在哪里获取呢?为什么到这里,这些数据就会有了呢?其实u,v,p,d,e这些参数在我们进入这个页面时就已经完成初始化了,this[t[169]]则是在我们进行数组第一次序列化时就已经完成初始化了,而初始化的函数就在decryptBlock上面:
u,v,p,d,e的初始化函数:
this[t[169]]的初始化函数:
其中,this[t[169]]的初始化需要在u,v,p,d,e等参数初始化完成的基础上才能完成初始化,this[t[169]]即是上图中的c,当我们把这些参数初始化完成后,即可进行数组位运算操作了。把数组遍历完成后,获得的新的o数组,
即是完成了数组处理的可以解析出播放地址的数组,接下来就可以进入加密数组转解密字符串操作了。
- 加密数组转解密字符串
接下来,让我们回到2号编号处的代码处,从2代码块继承的函数stringify进入对应的代码函数stringify中,由图所示,r即是携带了处理后的数组的字典对象,stringify即是遍历数组,然后将每个数组进行新的位运算,运算完后将得到的数组转化为对应的ascii码对应的字符,最后再把这些转化后的字符连接起来就出现了我们最后需要的数据了。
既然已经把所有处理的核心js代码都找出来了,接下来就只需要把代码拷贝下来,或者模拟js生成参数即可。但需要注意的是,获取到的播放url需要在一定时间内进行使用,否则url会失效。
总结:
总的来说,速速新增加的反爬机制大致可以概括为:1,将加密过的乱码字符串数据str_a转成特定数组array_a,将数组array_a数据进行二次处理生成新的处理数组array_b,将array_b数组转化成真正的具有视频url的字典数据json_a,最后就可以从json_a中提取出诸如https://live.kfbdnkyy.com/live/sd-1-3466612.flv?auth_key=1603876148-0-0-4707a10dba288decc1dd5a5c314cef7f
的播放流地址了。这些处理流程比较难的是跳转函数比较多,然后还是用了js代码混淆,所以,理解函数不好理解,需要花费时间跟精力。当理解了处理流程之后,就简单很多了。同时,因为速速的反扒中,很多数据都是具有固定化的特性,所以当理解了之后,可以简化很多的流程。
finally
**
本文仅用于交流学习,请勿用于非法用途及商业用途,否则后果自负!
**
本人只是菜鸟一只,如果有说的不对的,欢迎大家指出,本人也没有啥python学习教程可以分享,就不留啥联系方式了,如果有小伙伴对上面的有疑问,可以留言,我看到会回的。
最后,谢谢大家观看。完结,撒花,哈哈。