正简而言之五条高架道路通罗马,上次他们采用了Selenium智能化辅助工具来爬取腾讯云的音乐文章,Selenium智能化辅助工具能驱动应用程序执行特定的动作,获得应用程序现阶段呈现的网页的源码,做到可见即可爬,但须要等网页全然读取完,也就是JavaScript全然图形出来才能获取到现阶段的网页源码,这样的爬取工作效率太低了、爬取速度很慢了。
崇尚轻松、崇尚高工作效率的他们,怎么会放任工作效率低落呢?所以他们那时利用Scrapy框架加js反向来爬取腾讯云文章并做词雷达网,做工作效率最高的人!!!
在爬最末,他们具体来说要介绍呵呵什么是js反向。
js反向
具体来说Javascript简称js,js是一类JavaScript,是不须要展开校对的,也是应用程序中的一部分,经常用在web应用程序JavaScript,主要是用来给html增加动态功能,也能展开统计数据身份校正。
身份校正在前端开发和食腐中是很常用的,当他们掌握了DES且能将身份校正的字串展开NSA补齐时,就能从程式设计阿宝摇身一变变为程式设计天神,熟练DES能帮助他们同时实现高效率的js反向。由于DES的内容有很多,那时他们主要是简单介绍呵呵DES有哪些,之前有写过DES,钟爱能看看鲁托县文章!!!
常用的DES
js中常用的DES有以下几种:
非线性杂凑MD5演算法:确保文件的精确性,防止一些人冒用程序,加些地牢或者盗用著作权,设计的一套校正系统,广为用于身份校正和NSA技术上,如用户的公钥;
等距身份校正DES演算法:是一类采用公钥身份校正的演算法,其身份校正演算、NSA演算须要采用的是同样的公钥,身份校正后字串宽度是8的码字;
等距身份校正AES演算法:是DES演算法的升级版,采用各组公钥体制,身份校正后字串宽度是16的码字,汇集了强可靠性、高效率能、高工作效率、功能强大和灵活等优点,比DES演算法的身份校正强度更高,更安全;
非等距DESRSA:在公开公钥身份校正和电子商业中被广为采用,须要公开公钥和专有公钥,只有对应的专有公钥才能NSA;
base64伪身份校正:是一类用64位数表示任一十进制统计数据的方法,只是一类数据流而不是DES;
https合格证书会话身份校正:基于http和SSL/TLS同时实现的一个协议,确保在互联网上数据传输的统计数据都是身份校正的,从而确保统计信息安全。
js反向作用
他们推送互联网允诺的时候,往往须要携带允诺参数,如下图右图:
有食腐基础的人都知道,上图推送的是POST互联网允诺,在推送允诺时,他们还要携带一些参数,例如上图中的limit和current,其中limit是每次获取的统计数据个数,current是页码数。要想获取上面的URL链接所呈现中的统计数据时,必须要在推送互联网允诺时携带limit和current这两个参数。
有时候他们须要携带的允诺参数是身份校正过的参数,如下图右图:
同样是推送POST互联网允诺,很明显这次的参数是已经身份校正过的参数,该参数是一大串不知道表达什么意思的字符串,这时就须要采用js反向来补齐该参数。有人可能说,直接复制粘贴那参数,也获取到统计数据呀。可是这样只能获取到一小部分统计数据或者一页的统计数据,不能获取到多页。
通过上面的例子,他们能知道,js反向能帮助他们补齐身份校正过的参数。
当然除了帮他们补齐身份校正过的参数,还能帮他们处理以下事情:
模拟登录中公钥身份校正和其他允诺参数身份校正处理;
动态读取且身份校正统计数据的捕获和补齐;
js反向的同时实现
那么如何同时实现js反向或者补齐身份校正过的参数呢。
要补齐身份校正过的参数,大致能分为四步:
寻找身份校正参数的方法位置找出来;
设置断点找到未身份校正参数与方法;
把身份校正方法写入js文件;
调试js文件。
下面他们以待会要爬取的腾讯云音乐文章为例,所创建的js文件名为wangyi.js,来演示呵呵如何同时实现js反向。
寻找身份校正函数位置
具体来说打开开发者模式,找到你要获取的统计数据的URL允诺条目,再把身份校正参数的变量复制下来,点击右上角三个小点,选择Search。
在通过Search搜索把身份校正参数函数的存放位置找出来,如下图右图:
经过选择他们发现身份校正函数放在core_b15…中,点击4126这一行就会打开core_b15…,他们再在core_b15…中搜索有没有其他params,键盘同时按下Ctrl F,如下图右图:
由上图可知,core_b15…中有34个params,这34个params中都有可能是身份校正参数,这里他们来告诉大家一个小技巧,一般情况下,身份校正参数都是以下形式输出的,
参数:参数 =
所以他们能在搜索框中稍稍加点东西,例如把搜索框中的params改为params:,结果如下图右图:
这样params就被他们精确到只有两个,接下来他们开始设置断点。
设置断点找到未身份校正参数与函数
在上一步中,他们把params的范围缩短到只有两处,如下图右图:
第一类图的params只是一个类似字典的变量,而第二张图的params:bYm0x.encText,表示在bYm0x中选取encText的值赋给params,而在13367行代码中,表示encSecKey为bYm0x中encSecKey的值,所以他们能通过变量bYm0x来获取,而在params:bYm0x.encText上两行代码中,bYm0x变量中window调用了asrsea方法,13364行代码是他们身份校正参数的函数。他们把鼠标放在window.asrsea中间,如下图右图:
由上图可知,window.asrsea通过function d函数中调用的,其传入参数为d,e,f,g,点击f d(d,e,f,g),如下图右图:
当他们不知道从哪里设置断点时,他们能尝试在它调用函数的一行设置断点或者你认为哪行代码可疑就在哪行代码设置断点,刷新网页,如下图右图:
点击上图的1,一步步放开断点,注意观察上图中的2,3处的变化,如下图如下图右图:
当左边出现了文章区,但没出现文章内容时,这时右边的方框刚好出现了d,e,f,g这三个统计数据,而且d中的数字刚好是歌曲的id。他们这四个参数复制下来,并去除\,观察呵呵:
d:“{“rid“:”R_SO_4_1874158536“,”threadId“:”R_SO_4_1874158536“,”pageNo“:”1“,”pageSize“:”20“,”cursor”:”-1“,”offset“:”0“,”orderType“:”1“,”csrf_token“:”“}”e:“010001”f:“00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7”g:“0CoJUm6Qyw8W8jud”
通过上面的代码,他们推测rid和threadId是单曲id,pageNo是文章区的页数,pageSize是文章统计数据的行数,其他的不认识!!!
为了证实推测,他们换个歌单来测试获取d,e,f,g这四个参数:
d:“{“rid“:”A_PL_0_6892176976“,”threadId“:”A_PL_0_6892176976“,\”pageNo“:”1“,”pageSize“:”20“,”cursor“:”–1“,”offset“:”0“,”orderType“:”1“,”csrf_token“:”“}”e:“010001”f:“00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7”g:“0CoJUm6Qyw8W8jud”
通过观察能发现,他们的推测是正确的,而且e,f,g是固定不变的,那么他们能确定参数d中的参数就是未身份校正的参数,既然找到了未身份校正的参数,那么他们先把未身份校正的参数写入js文件中。
注意:rid中的A_PL_0代表的是歌单,而R_SO_4代表的是单曲。
把身份校正参数的方法写入js文件
未身份校正的参数他们在上一步已经获取到了,也就知道了身份校正参数的函数为接下来开始把身份校正参数的方法并写入js文件中。
该身份校正参数方法如下图右图:
身份校正参数方法为window.asrsea,所以他们直接复制粘贴第13364行代码作为他们的身份校正参数方法,并写在入口函数中,并返回变量bYm0x,具体代码如下右图:
functionstart{varbYm0x =window.asrsea(JSON.stringify(i8a), bqf4j([“流泪”,“强”]), bqf4j(Sr6l.md), bqf4j([“爱心”,“女孩”,“惊恐”,“大笑”]));returnbYm0x}
将鼠标放在window.asrsea中间,如下图右图:
在图中他们能知道window.asrsea调用了function d函数,而传入的参数对应着未身份校正的参数d、e、f、g,而d属于字典,e、f、g属于常量,所以他们能把上面的代码改写为:
functionstart{varbYm0x=window.asrsea(JSON.stringify(d),e,f,g);returnbYm0x}
写了入口函数后,他们开始观察function d函数,如下图右图:
通过function d函数,他们发现function d函数调用了a函数、b函数、c函数,所以他们要把这些函数都复制在刚才的js文件中。当他们不知道要复制哪些代码时,就直接复制function d函数的外面一层花括号的所有代码,也就是第13217行代码为复制的开始点,第13257行代码为复制的结束点。
为了他们的js文件能在控制台看到调试的结果,他们须要添加以下代码:
console.log(start)
调试js文件
好了,他们已经把代码复制在js文件中了,在调试js文件前,他们先安装node.js和node.js插件。
node.js
node.js安装方式很简单,进入node.js官网,如下图右图:
大家选择对应的系统来下载安装,由于安装实在太简单了,都是无脑下一步就能了,当然最好参照网上的教程来安装,这里他们就不讲解如何安装node.js。
注意:一定要安装node.js,否则会在调试js文件中报以下错误:
execjs._exceptions.ProgramError:TypeError: ‘JSON‘ 未定义
node.js插件
他们写好js文件后,须要展开调试,而在pycharm中调试js文件须要安装node.js插件。
具体来说进入pycharm中的setting配置,如下图右图:
按照上图中的步骤,即可安装好插件。
好了,准备工作已经做好了,现在开始调试js文件,运行刚才的js文件,会发现报了以下错误:
window.asrsea = d,^ReferenceError:windowisnotdefined
该错误是说window没定义,这时他们只须要在最前面添加以下代码即可:
window={}
展开运行他们的js文件,发现又报错了,错误如下右图:
varc=CryptoJS.enc.Utf8.parse(b)^ReferenceError:CryptoJSisnot defined
错误提示又是参数没定义,但CryptoJS就不能简单的设置一个空字典,这须要他们继续在刚才的core_b15…中寻找CryptoJS了,如下图右图:
由图中可知,CryptoJS一共要13处那么多,那么他们该从何开始复制呢,又从何处结束复制呢,当他们不知道在哪里开始复制时,直接把所有的CrpytoJS都复制下来,请记住一个原则,宁愿复制多了也不复制少了,多了不会报错,少了会报错,而且还要找错,重新复制。
好了,他们复制完后,继续运行js文件。
运行结果如下:
好了,js文件已经运行准确无误了。接下来开始爬取统计数据
统计数据爬取
他们是通过Scrapy框架来爬取统计数据,所以他们具体来说来创建Scrapy项目和spider食腐。
创建Scrapy项目、Spider食腐
创建Scrapy项目和Spider食腐很简单,依次执行以下代码即可:
scrapy startproject
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!