我们接上文继续。
撸码
接下来就是撸代码了,在这之前在强调下环境:Anconda3,在这里创建一个环境,我一般用python3.6,不懂Anconda的可以看上一篇,进入环境后先装好两个库
pip install requests
pip install PyExecJS
PyExecJS
PyExecJS 是一个可以使用 Python 来模拟运行 JavaScript 的库。我们上面解析到的getParam参数加密的方法可以用这个库来执行,就不用在麻烦的用python代码来模拟了。
在装PyExecJS库之前要保证机器上安装了一个JS运行环境,在这里推荐Node.js(自行百度安装)
下面上代码,我们这里就说一下思路吧:
首先发出一个post请求,先看一下请求的参数结构:
我们再回到上文提到的需要毅力的那一步,点点点之后看到getData方法,然后以getWeatherData方法为例,鼠标移到参数上,可显示出具体的参数,在这里有一个固定的method参数和一个param参数,param是由city、type、startTime、endTime组成的,type是固定的,不清楚的看下图:
type参数.png
那我们先定义这4个参数:
参数准备.png
然后使用PyExecJS模拟js中的getParam方法
获取到加密的param后发出post请求
最后将获取的加密的返回值再次通过PyExecJS模拟decodeData方法进行解析,获取最终的数据
这里贴一下整个流程的实现思路吧,具体代码就不拿出来献丑了。。。
整体实现思路.png
最后再看一下测试的结果,我这里就抓了一条:
结果.png
结语:首先再次感谢崔老师的文章,写的很详细,大家有时间可以去拜读一下。其次,最后的整体的代码看起来虽然不多,很简单,但是读过我文章的朋友可以感觉的到前面的整个的分析过程是多么的繁琐复杂,一环扣一环,漏掉其中一环都不行,我还是站在的巨人的肩膀上去做的,可见作为原作者的崔老师所下的功夫是有多大。。。
说这些的目的就是觉得,想要做成一件事情,努力是不可避免的,这也是我只贴出总体思路的原因,还是希望真心去玩爬虫的朋友自己去完整的走一遍整个过程,我相信对你们自己会有很大的好处的,这是我自己的切身体会,最后还是感谢崔老师,让我在这一块有了一次升华。
感兴趣的可以去看一下崔老师的文章:
https://cuiqingcai.com/5024.html
网友评论