教你使用python爬虫-携程-eleven参数!
携程-eleven分析
一、eleven的位置
通过对旁边栈的分析,它是在另一个js文件中调用的。那个js文件是一个自调用的函数,所以我们可以直接copy下来,用浏览器执行看看
执行运行是会报错的, undefind没有call属性
经过调试发现,报错这里是想调用window下面的某一个函数,也就是这个对象属性key为29对应的值
所以我们需要将这个函数添加进去
我们再运行一次,这样就不会报错了
虽说能够成功运行,不报错,但是本地生成的eleven的值是跟携程官网生成的eleven是不一样的
三、解决方案
这段js代码,肯定是对某一些做了判断,我当时猜想过cookie,因为我就是在浏览器中运行,浏览器的一些标识肯定都是一样,又区别的地方应该就是cookie吧。我就就一步一步的调试这这一大段js代码,讲真确实让人看得头疼
刚开始看确实没多少耐心,点的也很快,也没什么技巧。
有一个老哥说,他能在浏览器执行那段js代码,并且与携程官网的参数能对上。他是新建一个窗口浏览器,通过控制台将js代码copy,再进行调用,我试了下真的可以。我就很奇怪了,那就排除跟cookie有关了。
后面我还是继续调试那段js代码(我是在携程网站进行调试的),发现那段js调用了 3 这个位置的函数,是一个 require 函数,每次调用都抛了异常,它有异常捕捉的代码,所以不会崩掉。
我再调试着本地代码,发现我是没有这个函数的,我再去新建一个浏览器窗口,window.require输出为一个函数,这下终于知道哪里不对了
所以我只需要在 3 那个位置添加这个函数就行了,上面也说过,携程网站它调用这个函数都是抛异常的,所以我们这样写就好了。
为了防止巧合,我试了很多次,本地和线上生成的eleven都只差一位,意思是说他肯定还对某一项做了检测。
四、补充
需要注意的几个函数,不是说其他函数不重要,也很重要,但这个比较关键。
五、node环境
再弄node环境之前,必要浏览器执行后的eleven要和携程网的对得上,node环境缺什么,报什么错,再跟本地浏览器进行调试。过程肯定不是一帆风顺,但是解出来的时候,会莫名激动
此文转载文,著作权归作者所有,如有侵权联系小编删除!
原文地址:https://www.tuicool.com/articles/YZVJ73J