教育行业漏洞报告平台(Beta)数据爬取分析

解决问题

对教育漏洞提交平台的漏洞相关数据进行分析。

内容与要求

爬取网站提交的漏洞的相关信息,对每年漏洞数量,漏洞类型变化,漏洞类型比例,提交漏洞排名,存在漏洞数最多等方面进行统计分析,并可视化

使用工具

Requests 用于爬取页面
BeautifulSoup用于页面分析
Pandas用于数据分析
Time 用于爬取时进度条显示进度
tqdm用于爬取时进度条显示进度
matplotlib用于数据可视化,绘制统计图
wordcloud 用于数据可视化,绘制云图

爬取数据

网站分析

1、网站为:教育行业漏洞报告平台(Beta),该网站是专门针对教育学校网站的漏洞提交搜集平台
2、对网站漏洞页面数据爬取,url为https://src.sjtu.edu.cn/list/?page=1

3、截止2020-1-3 22:00,共有2172个页面,所以可以通过修改page的参数请求不同页面
4、查看页面结构,如下图,发现第一个table标签里为所需数据,每一行在tr标签中,每一个表格在td在中,所以通过bs4可以进行进行提取

开始爬取


大约一个半小时后

全部保存到excel文件中

程序如下

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
from tqdm import tqdm

mylist = []
user = {'user-agent': 'Mozilla/5.0'}
for i in tqdm(range(1,2173)):#共有2172页需要爬取,设置url链接中page的参数,其中tqdm用于进度条
    url = 'https://src.sjtu.edu.cn/list/?page='+str(i)
    r = requests.get(url, headers=user)#请求页面
    r.encoding = r.apparent_encoding
    html = BeautifulSoup(r.text, 'html.parser')
    mytable=html.find('table')#找到页面中的表格
    mytr=mytable.find_all('tr')#找到表格中所有行
    mytr.pop(0)#去掉数据中表头那一行
    #对每一行各个单元格处理
    for m in mytr:
        tds=m('td')#将这一行所有单元格保存在tds中
        j=tds[1].a.string.split()[0]#第二个单元格(这一个单元格保存的数据为xx学校存在xx漏洞)包围在<a>标签中,将其中的字符串取出来,并去掉空格换行等
        jj=j.split('存在')#将改字符串通过存在分割
        #因为里面的数据有一点不是xx学校存在xx漏洞的形式,需要分别处理
        if(len(jj)==2):#如果有存在这个字符
            ty = jj.pop()#保存漏洞类型
            school = jj.pop()#保存学校
        else:#如果没有,将漏洞类型设为其它
            school=jj.pop()
            ty='其他漏洞'
        #将这一行所有内容存在mylist中
        mylist.append([tds[0].string.split('-')[0],school,ty,tds[2].string,tds[3].string])#第一个单元格通过-分割,只取年份
    time.sleep(2)#一方面降低爬取速度,一方面用于显示爬取进度条
my=pd.DataFrame(mylist,columns=['年份','学校','类型','程度','提交人'])
my.to_excel(r'C:\Users\Desktop\my.xlsx')

数据分析

因为2020只有1月的数据,所以分析时将2020年的数据先去除data = data.drop(data[data[‘年份‘] == 2020].index)

对每年漏洞数量分析


可以看出,漏洞发现数量在这三年是波动的,但总体还是在增加。随着互联网发展,相应的安全问题肯定也越来越多。

对漏洞类型比例的统计


可以看到,漏洞类型前三是常见的信息泄露,sql注入,弱口令。学校网站一般都面向学生,保存有大量学生的个人信息,加上学生的自我保护意识弱。一旦违法者利用漏洞窃取信息,再将这些信息倒卖,或利用信息进行诈骗,将引起严重后果。切实感受学校网站的口令一般都是由规律的学号,身份证号构成,安全性确实不够。

对提交漏洞者分析


前几名的大佬提交了上千漏洞,虽然一些漏洞可以批量刷出来,但三年间能提交这么多,实在佩服。

所使用的罩图

对学校存在漏洞数分析


从上图可以看到被存在漏洞数居前列的有很多名校,作为国内有影响力的高校,安全防护也需要同步跟上。另外上海交通大学的漏洞数遥遥领先,远远超出其它高校,个人猜想,可能跟这个平台是由上海交通大学参与建设的关系。

对各年各漏洞程度分析


从上图可以比较得出,虽然漏洞数量有增长,但高危漏洞在下降,这也是国家政策推动,人们对安全的意识逐步提高的结果。

程序

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

data = pd.read_excel(r'C:\Users\Desktop\my.xlsx')#读取爬取到的数据
data = data.drop(data[data['年份'] == 2020].index)#因为爬取日期为2017-2020.1,所以只分析2017-2019的数据,将2020年的数据全部去掉

#对每年漏洞数量分析
#实际读取相应列就可以,但是发现生成的折线图的点不是顺序连接的,可能是由于x轴的年份是数值形式,所以下几步将年份转化为字符串形式
d = dict(data['年份'].value_counts())#读取年份这一列,转化为字典
#构造新的字典
dd = {}
dd['2017'] = d[2017]
dd['2018'] = d[2018]
dd['2019'] = d[2019]
ddd = pd.Series(dd)
plt.figure(1)#开始画折线图,新建绘图一
ddd.plot()
plt.rcParams['font.sans-serif'] = ['simsun']#以显示中文,奇怪的是,其他字体无法显示,试了几个,这个字体才能显示
plt.xlabel('年份')#x轴标签
plt.ylabel('漏洞数量')#y轴标签
plt.title('各年漏洞数量变化')#标题
plt.savefig(r'C:\Users\Desktop\各年漏洞数量变化.jpg')#保存

#对漏洞类型比例的统计
t_num = data['类型'].value_counts()[:10]#只取排名前十的
plt.figure(2)#开始画饼图,新建绘图二
t_num.plot.pie(autopct='%.1f %%')#设置显示比例
plt.title('漏洞类型比例')
plt.savefig(r'C:\Users\Desktop\漏洞类型比例.jpg')

#对提交漏洞者分析
people = data['提交人'].value_counts()[:10]#只取提交漏洞前十
plt.figure(3)#开始画柱状图,新建绘图三
people.plot.bar()
plt.title('提交漏洞前十')
plt.savefig(r'C:\Users\Desktop\提交漏洞前十.jpg')
#对前十名的昵称绘制云图
c_mask = plt.imread(r'C:\Users\Desktop\hack.jpg')  # 读入罩图
wc = WordCloud(font_path="simhei.ttf",  # 设置字体
               mask=c_mask,  # 添加罩图
               background_color="white",  # 设置背景色
               max_font_size=60)  # 最大字体
wc.generate_from_frequencies(people)  # 产生词云
wc.to_file(r'C:\Users\Desktop\1.jpg')

#对学校存在漏洞数分析
school = data['学校'].value_counts()[:20]#只取前20名
plt.figure(4)#开始画柱状图,新建绘图四
school.plot.bar()
plt.xticks(fontsize=5)#设置x轴大小,发现转一个角度效果也不好,干脆字体设置小点
plt.title('被发现漏洞数前十学校')
plt.savefig(r'C:\Users\Desktop\被发现漏洞数前十学校.jpg')

#对各年各漏洞类型数量分析
df = pd.DataFrame(index=['2017', '2018', '2019'])#新建DataFrame类型df
#取出原数据程度为高危的年份那一列,对数量统计,即高危漏洞在各个年出现的数量,再按年份进行升序排列,取得值,插入到df中
df.insert(0, '高危', data[data['程度'] == '高危']['年份'].value_counts().sort_index().values)
df.insert(1, '中危', data[data['程度'] == '中危']['年份'].value_counts().sort_index().values)
df.insert(2, '低危', data[data['程度'] == '低危']['年份'].value_counts().sort_index().values)
plt.figure(5)#开始画折线图,新建绘图五
df.plot()
plt.xlabel('年份')
plt.ylabel('漏洞数量')
plt.title('各年漏洞威胁程度')
plt.savefig(r'C:\Users\Desktop\各年漏洞威胁程度.jpg')

原文地址:https://www.cnblogs.com/Qi-Lin/p/12182370.html

时间: 2024-10-24 10:43:30

教育行业漏洞报告平台(Beta)数据爬取分析的相关文章

吐槽国内各大公司的漏洞报告平台

现在国内众测平台,越来越多.乌云,估计大家都知道,一提到漏洞平台,差不多瞬间想到的就是乌云吧,其他的也不是,威客众测,补天,TSRC,ASRC,BSRC.Sebug感觉现在都不行了,负面新闻太多了. 现在火的,估计也就是乌云,乌云核心白帽子多,粉多,喷子也多,所以就一直火.威客众测也不错,提交漏洞,还可以赚钱,还合法. 国内外有哪些漏洞信息发布平台? 高质量,更新及时,反应迅速的那种 比如:exploits-db.cve和赛门铁壳安全中心 或者说像乌云之类的安全应急响应平台 国内的主要包括: C

python实现数据爬取-清洗-持久化存储-数据平台可视化

基于python对淘宝模特个人信息进行筛选爬取,数据清洗,持久化写入mysql数据库.使用django对数据库中的数据信息筛选并生成可视化报表进行分析. 数据爬取,筛选,存库: # -*- coding:utf-8 -*-   import requests from bs4 import BeautifulSoup import sys import re reload(sys) sys.setdefaultencoding('utf-8') import MySQLdb import cha

数据挖掘工具分析北京房价 (一) 数据爬取采集

一. 前言 房价永远是最让人头疼且激动的话题,尤其是在帝都,多少人一辈子都为了一套房子打拼.正好我也想用一个大家比较关心的话题作为案例,把目前我开发的这套软件进行一次完整的演练.从数据采集,到清洗,分析,和最终可视化和报告的呈现,实现一次完整的流程.一方面可以给大家切实的分享一些有用的信息,再者可以更好地了解这套软件的使用流程.  关于本工具的介绍,可参考数据挖掘平台介绍(综述)——平台简介. 自然的,文章分为四部分,本节是第一部分:数据爬取和采集. 二.  准备工作 俗话说巧妇难为无米之炊,没

爬虫学习 09.移动端数据爬取

爬虫学习 09.移动端数据爬取 前言 随着移动市场的火热,各大平台都陆陆续续的推出了自己的移动端APP来拉拢吸引和便捷其广大的用户.那么在移动端的平台当时势必会出现大量有价值的信息和数据,那这些数据我们是否可以去享用一下呢?那么接下来就进入我们的移动端APP数据的爬虫中来吧. 今日概要 fiddler简介 手机APP抓包设置 fiddler设置 安装证书下载 安全证书安装 局域网设置 fiddler手机抓包测试 今日详情 1 什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP

python实现人人网用户数据爬取及简单分析

这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据(户主的全部好友.户主好友的全部好友.户主及好友关注的公共主页).2.信息可视化,绘制户主好友间的关系网络图:3.数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页. 项目分为三个部分,各自是人人网登录及用户数据爬取与存储.用户关系可视化.公共主页推荐.以下分别介绍这三个部分. 第一部分实现

Python爬虫 股票数据爬取

前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/000001/ctrl/2017/displaytype/4.phtml 在浏览器(PC上)中打开这个地址,就可以看到下图显示的财务数据.这个地址是一个通用格式:(

爬虫案例—中基协数据爬取

因为工作原因,需要爬取相关网站的数据,包括中基协网站和天眼查部分数据. 一.中基协网站 爬取思路: 1.查看目标页:http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.9775162173180119&page=%s&size=50 发现有随机数字串(刷新反爬措施),以及页码和每页信息条数,可以用来拼接爬取url 用一个循环爬取所有展示页面,用到requests库以及random函数生成随机数 返回的是json数据,直接用r

爬虫1.5-ajax数据爬取

目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 1. ajax数据 ajax (异步JavaScript 和 XML)(读作阿贾克斯),ajax可以时网页实现异步更新,一般使用的json数据交互,即在不重新加载整个页面也可以对网页的部分进行更新,ajax技术加载的数据在网页源代码中是看不到的,只能看到url加载的html部分 获取ajax数据的两

Python爬虫入门教程 15-100 石家庄政民互动数据爬取

1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除. 2. 石家庄政民互动数据爬取-网页分析 点击更多回复 ,可以查看到相应的数据. 数据量很大14万条,,数据爬完,还可以用来学习数据分析,真是nice 经