前言
最近公司相关业务变动,需要采集药监的一些数据。在经过一段的时间的摸索后,顺利完成了需求。在这里,我会简单的分享个人在采集过程中的一些思考,如果能帮到大家就非常好了。
采集需求
采集地址:http://ftba.nmpa.gov.cn:8181/ftban/fw.jsp
采集数据项:非特备案产品的所有数据(列表&详情数据)
采集数量:?
采集分析
首先我们打开网址:http://ftba.nmpa.gov.cn:8181/ftban/fw.jsp 对数据进行分析
f12打开chrome调试控制台,发现有防止debugger脚本。
点开sources项,去掉js debugger控制。
随意做个翻页,看到xhr请求。
查看请求头
发现有6SQk6G2z,c1SoYK0a两个加密参数。继续调试,查看加密参数是如何生成的。
点开网络请求相关面板。
点击进入发送请求的js脚本内。我们可以看到请求由jQuery的ajax函数发起。
但是在这里没有看到加密参数的生成。我们继续调试。
在vm中看到如下代码,代码被压缩,不可读。
对这段脚本做了初步的调试,觉得比较繁琐,暂时放弃。
经过观察,请求每次发起,6SQk6G2z和c1SoYK0a的值都是变动的。在观察fw.js这个脚本,猜测反爬脚本应该是修改了$.ajax的原型方法,在请求头上固定加上了加密的参数。但鉴于脚本不可读,本人也比较懒,遂想了一个讨巧的方式来处理。
采集方法
既然在浏览器环境下,请求是手动触发的。那么改成自动触发,数据就可以自动收集了。
我的第一个想法就是用selenium,但经过尝试,selenium会被药监网站反爬,遂放弃。
既然selenium不行,那就祭出杀招,chrome插件。
理了一下,整体的思路就出来了。
部分脚本,截图如下:
- chrome插件脚本
- 本地服务
列表和详情的处理方法都是一致的。
总结
上面就简短分享了我自己处理这次抓爬的处理思路,如果大家有好的方法,可以分享学习,共勉。