继上一篇文章某数的V5版的另类bypass方案 hKHnQfLv 8X7Yi61c Cookie http://www.moonapi.com/news/43.html 后,使用同样的方案尝试了医疗器械经营企业(许可) http://app1.nmpa.gov.cn/data_nmpa/face3/base.jsp?tableid=136&tablename=table136&title=%d2%bd%c1%c6%c6%f7%d0%b5%be%ad%d3%aa%c6%f3%d2%b5%a3%a8%d0%ed%bf%c9%a3%a9&bcid=154209512434322144199787151065

依旧按照之前的方案,首先F12调试。

没有debugger断点,OK,这一步操作省了,继续找翻页事件,是直接调用的函数devPage(2),再跟进去后就开始是混淆的代码了,算了,懒得看,console中试了下devPage可以翻转到任意一页,Good,省事了。

当然这里有一个问题,devPage中会去取Dom的值,同时因为触发的翻页ajax返回的是html, 那么就需要保证每次返回值都正确渲染出来,整个流程才能正常。如果翻页太频繁,或者刚好遇到服务器错误(有一次还报了条SQL执行错误,SQL语句都打印了出来),就没办法继续了。

那如果出现这种情况怎么处理呢?Python脚本中检测一下返回结果,如果为空或者未解析出有效果信息,则刷新一下页面,跳转到当前处理的页页继续处理。

好了,完整流程就是这样,打开页面,注入翻页js翻到指定页面,获取ajax响应,分析响应,入库。

愉快地让爬虫跑起来吧。

15条

30条

45条

60条

...

突然,页面打不开了,手动去浏览器访问也会返回400错误!

看起来是做了IP访问的限制,触发了反爬机制。

这种情况要处理,估计就只有两条路,一条是去仔细分析爬虫与手动的区别,按说来正常手动去浏览,即使多看了一下页面,也不应该会被屏蔽,然后再根据区别适当调整爬虫,懒得分析,直接把爬虫的间隔时间调整到10-15秒随机,结果还是采集十几页后同样被屏蔽,算了,放弃,避免耽误太多时间。

另一条路就是换IP! 既然是爬虫,没有个代理IP池随时备用着怎么行,于是修改自制的浏览器加上代理功能,同时增加函数让python脚本可以动态去设置代理IP,于是整个流程变为:正常工作 -> 采集下一页面,异常 -> 获取代理IP -> 设置代理IP -> 刷新页面。

换上新装备后,爬虫又快乐地跑起来来了,只不过每采10几页就需要换下一个IP,所以这种情况需要准备大量的代理IP。

写在最后,药监局已经换上新版网页,在新版网页中不再全部展示所有记录,只提供输入框查询接口,不得不说,这算是一种降维打击,以后就只能通过许可证号进行枚举了。