响应码521与国家企业信用信息公示系统js解析

所谓的521是网络在请求是返回的状态码为521,并且反回一段js,js执行后会生成一段cookie,携带cookie再次向服务器发送请求,才可以请求成功,而且ip和cookie绑定,切换ip需要重新获取cookie

原理还是比较简单的,难度在于js的执行,如果使用selenium这个问题还是比较容易处理,但是爬虫讲究的是速度和高效,本文深度剖析一下521中返回的js具体执行过程

以国家企业信用信息公示系统为例,在我们请求第一次网站主页的时候返回状态码521,并同时返回js,附图:

响应码521与国家企业信用信息公示系统js解析_第1张图片

 

看起来还是比较乱的,复制出来,放到sublime中,自动调整一下格式

响应码521与国家企业信用信息公示系统js解析_第2张图片需要稍微有一点点js基础,然后结合经验,对这段代码也能看出个大概。这段js代码先是定义了两个参数和两个方法,最后有一个while循环,在while循环中有个eval()方法,js中的eval和python中的eval还是有点区别的,度娘是这么解释的:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

 

 

据此可以判断上面代码eval里面这一段"y.replace(/\b\w+\b/g, function(y) {return x[f(y, z) - 1] || ("_" + y)})"会生成一段新的js,eval会将这段新的js执行。

python中有个三方库PyExecJS可以执行js,只要js中没有用到浏览器中的对象就可以执行,在运行时需要需要指定函数入口,并且这个函数需要有返回内容,所以需要将上面的while循环修改成成所需函数,而函数返回的内容就是新生成的js,直接上代码

js_fun = re.match(  "
                    
                    

你可能感兴趣的:(响应码521与国家企业信用信息公示系统js解析)