通用漏洞爬虫 === 本文写于2018年4月15日 这是换到python3后写的第一个比较大的东西,稍微总结一下 源码地址:GitHub   https://github.com/786662216/vulnerability-spider 最终效果:通用漏洞安全情报  http://www.sheshuaiyan.top/cve/ 一开始换到3后,print是函数也好,pip和python2冲突也罢。最让人受不了的还是有些库的差别真的是很大,很多类的方法参数都不一样了。编码也是,不知怎么回事前面就加了个b硬生生改成二进制字节流了 主要是从http://www.cnvd.org.cn/、https://www.seebug.org/、http://cve.scap.org.cn/ 这三个网站中爬取的 主体思路还是挺笨的,直接用request把整个网页源码下载下来再用正则去匹配,没有用scapy之类的框架。花了一些时间去写正则,得到的数据放到csv中,用php取出来后处理一下放到模板中去。中间遇到了一些问题 一、首先是CNVD和seebug有反爬机制,都是用的知道创宇的加速乐。seebug就不用说了,用的是自家的;但CNVD也用的这个东西,所以绕过反爬的方法是一样的。首先了解一下加速乐是怎么反爬的 * 判断客户端的cookie正不正确。如果不正确(或者没有),返回521状态码 * set-cookie(__jsluid)并且返回一段js代码通过浏览器执行后又可以生成一个cookie(__jsl_clearance) * 只有这两个cookie一起发送给服务器,才会返回正确的网页内容 * 注意,刚才(2018年6月20日14:00:45)发现只需要jsuid即可,需要在之后加上 max-age=31536000; path=/; HttpOnly 只要获得这两个cookies就可以了,那么思路就有两种: 1、分析/解密js,算出__jsl_clearance) 2、直接用selenium模拟浏览器访问,再通过自带的方法直接拿出这两个cookies 一开始用的第一种方法,问题不大,但是没什么通用性 二、因为要放到没有图形界面的服务器上跑(ubuntu server 14.04),所以selenium还不能直接用,还用到了一个库中的类:Display的pyvirtualdisplay。这个东西可以假装有个界面在运行,原理就是欺骗系统底层这里有一个800x600的窗口正在访问某个页面,这样就可以在linux服务器上运行这个爬虫了,不要忘了装好Display所依赖的其他库和软件,这个库对windows很不友好。 上面提到的对其他软件和库的依赖是一个问题,还有两个问题:一个是header问题,一个是账户权限问题。 不得不说加速乐后台处理的还是很细心,如果有一个头对不上就直接返回js而不是html正文,尤其是User-Agent。于是又装了个ubuntu14.04的虚拟机安装了chrome(因为我用的webdriver是chrome),把头粘下来换了上去,但是还是不行,虽然没有返回js但是报错了,查了一下才知道Display不能用root账号启用webdriver,没明白为什么。于是又创建了一个新账户,给文件加了权限后,用新账户运行就没有任何问题了。 三、最后便是一些比较小的问题。 * 首先是加了datetime这个库,用来设定每天什么时候运行; * 因为要爬好几个网站,所以有很多python文件,以后没准还要加。每次在bash下一个一个运行太麻烦,写了个shell脚本让他一次性全部启动; * 运行结果无论成功还是有错误还要写入到log日志中,这个也在shell中实现了; * 用php取出csv文件中的数据时,可能会有空行、数据为空等问题,处理一下即可;