(原创)利用页面交叉引用反馈爬取vulners.com的数据
来源:互联网 发布:找客源软件 编辑:程序博客网 时间:2024/06/05 06:54
利用页面交叉引用反馈爬取vulners.com的数据
- 利用页面交叉引用反馈爬取vulnerscom的数据
- 可选方案
- 各个方案的评估
- vulners api
- 爬取方案
因为实验室的工作需要,需要对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))
- (原创)利用页面交叉引用反馈爬取vulners.com的数据
- 爬取页面的json数据
- 如何交叉取一个表的数据
- 利用WebMagic的Cookie机制进行页面爬取
- 利用scrapy-splash爬取JS生成的动态页面
- dojo小例子(6)页面打开后,请求数据,把反馈数据回填页面
- 利用 Python 爬取豆瓣电影排行榜 Top250 的数据
- 利用python爬取人人贷网的数据
- 利用python爬取实习僧网站上的数据
- python3实现爬取淘宝页面的商品的数据信息(selenium+pyquery+mongodb)
- java selenium firefox (图形界面)爬取页面数据
- 几种不刷新页面取数据的方法
- 几种不刷新页面取数据的方法
- 几种不刷新页面取数据的方法
- 几种不刷新页面取数据的方法
- 几种不刷新页面取数据的方法
- 几种不刷新页面取数据的方法
- Selenium学习四——利用Python爬取网页多个页面的表格数据并存到已有的excel中
- 4. DBSCAN方法及其应用
- java线程死锁和避免
- 【转】php curl调用参数设置详解
- Excel 2010总结
- 背包问题
- (原创)利用页面交叉引用反馈爬取vulners.com的数据
- 【华为机试】【中级】单词倒排
- php中引用另一个php文件( include 和 require 语句区别)
- jQuery
- 算法题练习系列之(十六): 组个最小数
- jQuery插件——Validation的使用
- springmvc结合poI实现Execl导出
- MyBatis联合查询配置详解
- spring boot启动时调用自己的非web逻辑