目标

从国家信息安全漏洞库(CNNVD)中爬取目标软件的相关漏洞,统计漏洞类型、危害等级、相关数量等,并进行可视化。

具体流程

  1. 构造URL,根据关键词(如glibc)爬取相关软件的漏洞信息,统计其数量和网页数
  2. 构造URL,一个一个网页的爬取,找到每个具体漏洞的链接,保存这些链接
  3. 根据每个具体漏洞的链接,爬取相关页面,用正则表达式和BeautifulSoup找到我们需要的链接。

代码实现

  1. 爬取网页并保存到EXCEL文件中
# -*- coding:utf-8 -*-
import requests
from  bs4 import BeautifulSoup
import traceback
import re
import xlwt
list=['glibc','Microsoft Office Word','Microsoft Internet Explorer']#想要查询的相关漏洞
num=[] # 存放每个实体对应的漏洞数目
page=[]# 存放每个实体对应的漏洞的页数
# 根据url爬取网页
def getHTMLTEXT(url,code="utf-8"):kv = {'user-agent': 'Mozilla/5.0'}  # 模拟浏览器访问网站try:r=requests.get(url,headers=kv,timeout=30)r.raise_for_status()r.encoding=codereturn r.textexcept:traceback.print_exc()return ""
# 初始网页
def parsepage(name,url):type={}# 存放每个实体中的漏洞类型html=getHTMLTEXT(url)soup=BeautifulSoup(html,'html.parser')#每个类型的数量#text=soup.find_all('a',text=re.compile('总条数:'))#num.append(re.findall(r'[0-9,]+',text.__str__()[:][:]))#统计当前实体搜索结果共有多少页value = soup.find_all('input',id="pagecount")page.append(re.findall(r'[0-9]+',value.__str__()))
#爬取对应漏洞下所有的网页
def all_page(name,url,n):type=[] #漏洞类型level=[] #漏洞危害等级name_info=[]#每个漏洞的名称link=[] #每个漏洞的链接#循环遍历每个网页for p in range(1,int(n)+1):html=getHTMLTEXT(url+str(p))soup = BeautifulSoup(html, 'html.parser')# 统计每个实体中具体漏洞的链接text = soup.find_all('a',attrs={'class':'a_title2'})for i in text:try:href = i.attrs['href']if(re.findall(r'.?CNNVD.?',href)):link.append(href)except:continue#对于每一个链接,去爬取链接的页面for i in link:html=getHTMLTEXT('http://www.cnnvd.org.cn'+i)soup = BeautifulSoup(html, 'html.parser')title=soup.find_all('h2',style="")for m in title[0]:title=m #每个漏洞的具体名称#寻找类型和等级text=soup.find_all('a',style="color:#4095cc;cursor:pointer;",href="")S=[]if len(text):for t in text[:2]:t=re.findall(r'[\u4E00-\u9FA5]+',str(t)) #匹配汉字try:S.append(t[0])except:S.append('未评定')type.append(S[0])level.append(S[1])name_info.append(title)#将列表信息写入EXCEL中f = xlwt.Workbook()  # 创建EXCEL工作簿sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheetsheet1.write(0, 0, "漏洞名称")sheet1.write(0, 1, "类型")sheet1.write(0, 2, "危害等级")for i in range(len(name_info)):sheet1.write(i + 1, 0, name_info[i])sheet1.write(i + 1, 1, type[i])sheet1.write(i + 1, 2, level[i])f.save(name+"_result.xls")  #保存文件
if __name__=="__main__":url='http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag?qcvCname='for i in list:parsepage(i,url+i)for i in range(len(list)):turl=url+list[i]+'&pageno='all_page(list[i],turl,page[i][0])#创建工作簿f=xlwt.Workbook()#创建EXCEL工作簿sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheetfor i in range(len(num)):sheet1.write(i,0,list[i])sheet1.write(i,1,num[i])f.save("实体总量.xls")

生成的文件如下所示

2. 统计数据

import xlrd
import xlwt
import traceback
def open_excel(path,name):type={}level={}try:data=xlrd.open_workbook(path)table=data.sheet_by_name(sheet_name=u'sheet1')t=table.col_values(1)[1:]l=table.col_values(2)[1:]#去掉重复值t1=set(t)l1=set(l)#初始化字典for i in t1:type[i]=0for i in l1:level[i]=0#统计数量for i in t:type[i]=type[i]+1for i in l:level[i]=level[i]+1f = xlwt.Workbook()  # 创建EXCEL工作簿tkeys=list(type.keys())sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheetfor i in range(len(tkeys)):sheet1.write(i, 0,tkeys[i])sheet1.write(i, 1,type[tkeys[i]])sheet2=f.add_sheet(u'sheet2',cell_overwrite_ok=True)lkeys=list(level.keys())for i in range(len(lkeys)):sheet2.write(i,0,lkeys[i])sheet2.write(i,1,level[lkeys[i]])f.save(name+'_sum_up.xls')except :traceback.print_exc()print('Error!')
if __name__=="__main__":path=['glibc_result.xls','Microsoft Internet Explorer_result.xls','Microsoft Office Word_result.xls']name=['glibc','Microsoft Internet Explorer','Microsoft Office Word']for i in range(len(path)):open_excel(path[i],name[i])

统计后的数据如下所示

结果可视化

用EXCEL将数据绘图,实现可视化,下面给出一例。

爬虫练习--爬取CNNVD相关漏洞相关推荐

  1. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  2. python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址

    随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我 ...

  3. 爬虫分页爬取猎聘_想把python爬虫了解透彻吗?一起盘它 ! !

    原理 传统的爬虫程序从初始web页面的一个或多个url开始,并获取初始web页面的url.在抓取web页面的过程中,它不断地从当前页面中提取新的url并将其放入队列中,直到满足系统的某些停止条件.聚焦 ...

  4. Python使用多进程提高网络爬虫的爬取速度

    多线程技术并不能充分利用硬件资源和大幅度提高系统吞吐量,类似需求应使用多进程编程技术满足. 以爬取中国工程院院士简介和照片为例,参考代码如下,请自行分析目标网页结构并与参考代码进行比对.另外需要注意, ...

  5. python爬虫金融数据_python爬虫项目-爬取雪球网金融数据(关注、持续更新)

    (一)python金融数据爬虫项目 爬取目标:雪球网(起始url:https://xueqiu.com/hq#exchange=cn&firstname=1&secondname=1_ ...

  6. 爬虫之爬取易班推文信息

    简介 趁着周末有空,最近又在做爬虫相关的功能,想将易班的推文信息放到自己的小程序里,奈何网上没有找到合适的文章,于是就自己研究了一下易班推文的爬取,使用Springboot设置定时任务去爬取,在爬取信 ...

  7. python听歌识曲爬虫_Python爬取网易云音乐热门评论的搜索结果-阿里云开发者社区...

    网易云音乐评论爬虫(三):爬取歌曲的全部评论 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的 ...

  8. Python爬虫可以爬取什么呢?

    Python_Python爬虫可以爬取什么 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多, 一方面,互联网可以获取的数据越来越多, 另一方面,像 Python这样的编程语言提供越来越多的优 ...

  9. 【Python爬虫】爬取微信公众号文章信息准备工作

    有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来.参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一 ...

  10. 菜鸟Python实战-03爬虫之爬取数据

    最近想学习一下爬虫 所以参考了一下网上的代码,并加以理解和整理,好记性不如烂笔头吧. 以下代码的目标网站是豆瓣电影:https://movie.douban.com/top250?start=%22( ...

最新文章

  1. 在dbca建库的时候报ORA-27125错误的解决方法
  2. 2007年浙江大学计算机及软件工程研究生机试真题
  3. VC++文件监控(一) ReadDirectoryChangesW
  4. lamuda表达式 list移除空元素_Lambda 表达式遍历集合时用remove方法删除list集合中满足条件的元素问题...
  5. js charCodeAt() charAt()
  6. python123电脑登录不了_python(14)- 简单练习:登录账户失败三次,账户自动锁定...
  7. php怎么设置浏览器禁止打开新窗口,JS打开新窗口防止被浏览器阻止的方法_javascript技巧...
  8. 分享收集软件教程的微信小程序
  9. 全国所有省份、城市的JSON
  10. Jzoj4699 Password
  11. iacr crypto 级别_缠论走势终完美:任何级别的所有走势,都能分解成盘整与趋势两种,而趋势又分上涨与下跌两种...
  12. QT隐藏标题栏和背景
  13. 【无标题】Vue长列表性能优化常用方案
  14. 概率论-小记录(矩估计)
  15. Linux 系统时间 EST 改 CTS
  16. JAVA中用程序绘制国际象棋与中国象棋棋盘
  17. 单片机——点阵2(Proteus和KeilC51)
  18. js中类似`${xx,xxxy}`的语句
  19. 2022.3.12 绍兴文理学院元培学院第十五届大学生程序设计竞赛
  20. C++学习笔记 转换函数(conversion function)

热门文章

  1. LiveGBS国标GB/T28181流媒体平台华为IPC设备GB35114配置接入说明
  2. linux如何安装github下载的东西,Linux如何安装使用GitHub
  3. SQL Server 之 修改时不允许保存更改
  4. autojs自动阅读脚本源代码免费分享
  5. 基于protues仿真及stm32cubemx的基础外设使用-------串口中断
  6. C#获取扫码枪扫描数据并处理
  7. 浅谈RPG Maker XP自动地图元件的绘制原理
  8. phpwind不支持php7,phpwind8.7 phpwind v8.7 新功能曝光
  9. PE制作实录 —— 定义我的 PE 工具箱
  10. android 禁止软键盘弹出自动弹出,Android屏蔽软键盘自动弹出的解决方案