Python selenium 爬取cnvd(国家信息安全漏洞共享平台)
时间:2021-08-09
本文章向大家介绍Python selenium 爬取cnvd(国家信息安全漏洞共享平台),主要包括Python selenium 爬取cnvd(国家信息安全漏洞共享平台)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#coding = utf-8
#@author :今夕
#@Time :2021.08.06 16:09
#@file :mian.py
#@software :PyCharm
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import re
import pymysql
import random
#应用漏洞获取
list=[27,28,29,30,31,32,33,34,35,38]
page=[13700,79200,30800,2500,9400,2600,1000,300,0,100]
def main():
driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
i=0
while i<len(list):
leng=0
while leng<=page[i]:
url = "https://www.cnvd.org.cn/flaw/typeResult?typeId=%d&max=100&offset=%d" % (list[i],leng)
leng=leng+100
driver.get(url)
driver.refresh() # 刷新页面
html = driver.page_source
datalist = parseHtml(html,list[i])
save(datalist)
driver.refresh()
print("当前i=%d,leng=%d"%(list[i],leng))
driver.close()
def parseHtml(html,type):
datlist=[]#存一页漏洞基本信息
soup = BeautifulSoup(html, "html.parser") # 指定Beautiful的解析器为“html.parser”
findLevel = re.compile(r'</span>(.*?)</td>', re.S)#危害级别匹配规则
findDate = re.compile(r'<td width="13%">(.*?)</td>', re.S)#时间匹配规则
k=1
items=soup.find_all('tr')
if type==27:
type="操作系统"
elif type==28:
type="应用程序"
elif type==29:
type="WEB应用"
elif type==30:
type="数据库"
elif type==31:
type="网络设备(交换机,路由器等网络终端设备)"
elif type==32:
type="安全产品"
elif type==33:
type="智能设备(物联网终端设备)"
elif type==34:
type="区块链公链"
elif type==35:
type="区块链联盟链"
elif type==38:
type="工业控制系统"
while k<len(items):
dat = [] # 存一个漏洞基本信息
item=items[k]
link="https://www.cnvd.org.cn"+item.a["href"]#获取漏洞详细信息链接
#print(link)
title=item.a["title"]#获取漏洞标题
#print(title)
item=str(item)#转换为字符串
level=re.findall(findLevel,item)[0]
#print(level)
date=re.findall(findDate,item)[0]
#print(date)
#print("___________________________")
dat.append(title)
dat.append(level)
dat.append(date)
dat.append(link)
dat.append(type)
datlist.append(dat)
#print(dat)
k+=1
return datlist
def save(datlist):
#print(datlist[1])
db = pymysql.connect(user='root', password='123456', host='localhost', database='cnvd')
cursor = db.cursor()
for dat in datlist:
data="'"+dat[0]+"'"+","+"'"+dat[1].replace(" ","").replace("\n","").replace("\t","")+"'"+","+"'"+dat[2]+"'"+","+"'"+dat[3]+"'"+","+"'"+dat[4]+"'"
print(data)
sql = "insert into cnvd (title,level,date,link,type) values(%s)"%data
#print(sql)
cursor.execute(sql) # 提交数据库操作
db.commit() # 提交事务
cursor.close()
db.close()
t = random.randint(1,6) # 取随机数
print("等待%d秒" % t)
time.sleep(t) # 休眠t秒
#输入selenium 搜索
# element = driver.find_element_by_name('a')
# ActionChains(driver).move_to_element(element).perform()
#单击,弹出的Ajax元素,根据链接节点的文本内容查找
if __name__ == '__main__':
main()
print("爬取完成")
原文地址:https://www.cnblogs.com/jinxi7021/p/15118660.html
- hbase源码系列(十)HLog与日志恢复
- hbase源码系列(六)HMaster启动过程
- 如何写好一篇漏洞报告(国外篇)
- hbase源码系列(八)从Snapshot恢复表
- hbase源码系列(七)Snapshot的过程
- CVE-2017-3085:Adobe Flash泄漏Windows用户凭证
- hbase源码系列(九)StoreFile存储格式
- 如何确定恶意软件是否在自己的电脑中执行过?
- Carbondata源码系列(二)文件格式详解
- 挖洞经验 | 记一次针对Twitter(Periscope)API 的有趣挖洞经历
- 设计模式学习(二): 观察者模式 (C#)
- Carbondata源码系列(一)文件生成过程
- BoopSuite:基于Python编写的无线安全审计套件
- 设计模式学习(一):多用组合少用继承(C#)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular双向绑定的一个例子
- mysqlbinlog命令详解 Part 3 - 查看十六进制格式内容
- MySQL information_schema详解 CHARACTER_SETS 表
- 彻底弄懂 Unicode 编码
- 两种使用代码获得SAP CRM product sales status的办法
- C#: "$"作用和用法
- SAP ABAP字符和字符串变量隐式转换的一些规则
- MySQL information_schema详解 COLLATION_CHARACTER_SET_APPLICABILITY
- 如何处理Angular项目在Visual Studio Code打开报关于@Decorators的警告信息
- QT 中普通数值与字符串之间的转换
- C# 时间与时间戳互转 13位
- 在C#中ref和out具体怎么使用?在什么情况下使用?
- Vs code 创建vue模版
- [892]python中re.split()方法
- MacOS抓包工具Charles