上篇文章用了异步发出请求, 用python代码模拟运行js代码, 感觉太麻烦了, 这次介绍的还是有道翻译 ,不过是用execjs这个库来执行js代码, 获取参数后发出请求, 总体来说较python代码一个一个求值简单了不少, 需要的知识是扣代码 的能力, 就看你有没有这个耐心了。
第一步要明确的是 通过抓包 来获取数据, 输入一个单词 点击翻译, 可以看到数据果然都在这里, 然后看看需要发送什么请求来获取这些数据:
从上图可以看出 除了一些写死的参数之外, 有些参数是不固定的, 这个可以多试几次看出来, 那么好了, 到了这里目的就明确了, 就是如何拿到这些数据的问题, 倘若我们拿到了这些数据, 再发送post请求的时候带上不就可以了。 好 ,下面就要找到这些数据, 怎么找呢? 一个方法直接在source选项卡里的js文件挨个搜索, 分分钟就能找到,
当然 你也可以在netword选项卡里, ctrl + f , 刷新页面, 输入几个加密的参数, 同样能找到 所在js文件。
js文件如下:
如图, 在js文件中找到了post请求携带的参数 ,很明显可以看出来 这些参数是怎样加密的, 这时候我们如果想用python模拟当然可以 ,这样思路清晰, 用pyhton模拟代码也不是很难, 只是用一些简单库而已。
但是这次我们只需要扣代码就可以了。
如图, 打开可以运行js的编辑器, 我这里用的是 webstorm, 先把最核心的一块扣上去,
就是这一块, 好了, 到了这里就已经完成了40% , 顺藤摸瓜, 找到这里面需要的其他函数, 在从其他函数里在找到额外依赖函数。。。是一个考验耐心的工作, 我是差点要放弃, 因为一直找到的新的代码有需要额外的函数, 那些函数里一堆参数看到我很慌, 不过还好运行成功了, 如图:
多运行几次, 可以发现参数一直在变
python代码:
显示结果正确, 剩下的就是需要清洗数据了, 这里不再赘述。
所有的代码都已上传GitHub,请自行查看。
注:
post请求携带参数 一定要正确, 准确, 我在js文件中补上了所有需要携带的参数, 所以直接在py中携带即可。