(原创)利用页面交叉引用反馈爬取vulners.com的数据

利用页面交叉引用反馈爬取vulners.com的数据

因为实验室的工作需要,需要对vulners.com网站上的漏洞信息和相关链接进行数据爬取,但是vulners本身对爬虫的限制非常严格,前端页面都是由react.js生成的,很难单纯靠爬虫获取html数据。

vulners网址https://vulners.com/

可选方案

(1)利用chrome driver+ selenium获取数据。
(2)利用chrome 插件本身作为数据爬虫的载体。
(3)利用PhantomJS或者scarpy-splash进行加载。
(4)采用官方API进行爬取。

各个方案的评估

(1)由于vulners是境外网站,在国内加载速度很慢,而这些浏览器加载工具仅仅在加载完成之后才会进行。这样速度就很慢了。
(说明:现代浏览器例如chrome都采用了多线程加载和一边渲染一遍展示的技术,因此给用户的感觉就是很快就能把页面渲染出来,其实后台的工作还没有完成,再加上现代的web前段常用的异步加载工具例如ajax等,更进一步降低了方法(1)(2)的效率)
(2)之前采用过PhantomJS之类的js加载工具,但是其功能还是相对有限。对于exploit-db之类的简单的js网站效果相对好一些,而在vulners上表现的不太好。

vulners api

最终笔者采用了使用vulners api的方法来进行数据提取,而vulners api这个方法也是存在问题的,就是每次最多能够获取2000到10000条数据,然而vulners本身有将近70w条数据。

爬取方案

由于最近vulners网站升级,因此具体的api内容暂时无法发布与此。现在介绍一下爬取思路和具体的工作方案。
爬取过程分两个大步:
(1)利用组里的软件漏洞词典,进行初始数据积累:
   这个过程和”薅羊毛”类似,利用字典里面的分词,在vulners网站的搜索api上进行查询获取
   具体的API为:https://vulners.com/api/v3/search/lucene/?query=(关键词)
        这一过程一共积累了33w条数据。
(2)利用网页上的交叉引用,进一步获取数据。
         vulners.com网站的每个漏洞页面上会有一些和它相关的漏洞的页面链接,之后可以利用这些数据来作为进一步获取的跳板。
         https://vulners.com/api/v3/search/lucene/?query=(关键词)
&&reference=True。添加一个参数就可以获取相关数据。

总体来说系统的工作是按照如下流程进行的。

    urls_to_fetch = [] #待爬取url队列
    for token in software_vul_dict:
        url = gen_url(token)
        insert_db(search_by_lucence(url))
        #这个过程是基础数据积累过程:
    for item in db:
        urls_to_fetch.append(gen_url(item))
    for url in urls_to_fetch:#注意,这个队列有更新操作,因此迭代过程应该注意
        (result,result_ref)=search_by_id_with_ref(url)          
        insert_db(result)
        urls_to_fetch.append(gen_url(result_ref))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值