python爬取cnnvd,粘贴可用
粘贴可用,目前因为无性能要求无多线程操作
# @Time : 2022/9/28 21:56
# @Author : pzh
# @File : ali_cvd_detail.py
# -*- coding: utf-8 -*-```java
import re
import requests
from random import randint
import time
from lxml import etree
from cache import memory_cache
import datetime
import threading
from LoggingUtils import logger
import math
import osdef get_onepage_content(url):user_agent = ['Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4482.0 Safari/537.36 Edg/92.0.874.0']try:response = requests.get(url, headers={'User-Agent':user_agent[randint(0,2)]},timeout=60)if response.status_code == 200:return response.textreturnexcept Exception:returndef show_cve_content(res):e = etree.HTML(res);list = e.xpath("//div[@class='list_list']/ul/li/div/p/a/text()")return listpath ="E://Asiainfo//webappss//pythonDemo//Test//ali_cnnvd_";# 分页数据放到一个文件里面
def save_content_to_text(content,now_time):with open(path+now_time+'.txt','a+') as f:f.write(content + '\n')pageSize=30def main():#每天凌晨3点执行mainlogger.info("当前任务为:"+'120'+"秒执行一次")timer = threading.Timer(120, main)timer.start()#获取任务的总数startTime = time.time()value = memory_cache.get_value("TotalCNNVD")logger.info("当前任务获取上次总数为:"+str(value))#循环的所有数据htmls ="";#获取最新的总数htmlss = get_onepage_content('http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag?pageno=1&pageSize=1&repairLd=');e = etree.HTML(htmlss)totalSizeList=e.xpath("//div[@class='page']/a[1]/text()")totalList = re.findall(r"[1-9]+\.?[0-9]*",str(totalSizeList).replace(",",""))total = totalList [0]logger.info("当前最新任务获取总数为:"+total)#判断,进入任务,如果不一样说明有更新的,取最新的减去上次的if(str(value) != str(total)):#存入这次的total的数量,下次进入时使用memory_cache.set_value("TotalCNNVD",total,86400)#如果取出来的值是None说明是第一次进入,取全量if(str(value) == 'None') :Num = int(total)else:Num = int(total)-int(value)#正式需要把2替换成pageNumpageNum = math.ceil(Num / pageSize)logger.info("需要循环的页数为:"+str(pageNum))now_time=datetime.datetime.now().strftime('%Y-%m-%d')logger.info("当前任务文件路径及名称:"+path+now_time+'.txt')for pagenum in range(1, 2) :url = f'http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag?pageno={pagenum}&pageSize={pageSize}&repairLd='html = get_onepage_content(url);htmls=html+htmls;#如果当天已经存在,就删除if (os.path.exists(path+now_time+".txt")):os.remove(path+now_time+".txt")os.close()for content in show_cve_content(htmls):htmldetail = get_onepage_content(f'http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD={content}')e = etree.HTML(htmldetail)#漏洞标题biaoti = e.xpath("//div[@class='detail_xq w770']/h2/text()")[0].strip()#漏洞描述loudong = e.xpath("//div[@class='d_ldjj']/p[2]/text()")[0].strip()#漏洞公告jianyi = e.xpath("//div[@class='d_ldjj m_t_20']/p[@class='ldgg']/a/text()")#受影响实体gongji1 = e.xpath("//div[@class='vulnerability_list']/ul/p/text()")[0].strip()#补丁try :gongji3 = e.xpath("//div[@class='vulnerability_list']/ul/li/div/a/text()")[0].strip()except Exception: gongji3='暂无'#CNNVD编号gongji4 = e.xpath("//div[@class='detail_xq w770']/ul/li[1]/span/text()")[0].strip()#危害等级gongji5 = e.xpath("//div[@class='detail_xq w770']/ul/li[2]/a[1]/text()")[0].strip()#CVE编号gongji6 = e.xpath("//div[@class='detail_xq w770']/ul/li[3]/a/text()")[0].strip()#漏洞类型gongji7 = e.xpath("//div[@class='detail_xq w770']/ul/li[4]/a/text()")[0].strip()#威胁类型gongji8 = e.xpath("//div[@class='detail_xq w770']/ul/li[6]/a/text()")[0].strip()content = str(loudong)+","+str(biaoti)+","+str(gongji1)+",补丁:"+str(gongji3)+","+str(gongji4)+",危害等级:"+str(gongji5)+",CVE编号:"+str(gongji6)+",漏洞类型:"+str(gongji7)+",威胁类型:"+str(gongji8)save_content_to_text(str(content),now_time)endTime = time.time()logger.info("cnnvd循环",str(pagenum)+"完成,耗时:",endTime - startTime)else: logger.info("无更新")# 获取现在时间
now_time = datetime.datetime.now()
# 获取明天时间
next_time = now_time + datetime.timedelta(days=+1)
next_year = next_time.date().year
next_month = next_time.date().month
next_day = next_time.date().day
# 获取明天3点时间
next_time = datetime.datetime.strptime(str(next_year)+"-"+str(next_month)+"-"+str(next_day)+" 03:00:00", "%Y-%m-%d %H:%M:%S")
# # 获取昨天时间
# last_time = now_time + datetime.timedelta(days=-1)# 获取距离明天3点时间,单位为秒
timer_start_time = (next_time - now_time).total_seconds()
logger.info("获取距离明天3点时间(秒):"+str(timer_start_time))#定时器,参数为(多少时间后执行,单位为秒,执行的方法)
timer = threading.Timer(timer_start_time, main)
timer.start()if __name__ == "__main__":main()
python爬取cnnvd,粘贴可用相关推荐
- Python 爬取西刺可用代理IP,自带检测。
功能: 爬取西刺代理IP 添加了自动检测IP是否可用功能 输出到Data.txt文件中 注意: 爬取西刺的时候,有可能真实IP被封,可以先尝试爬取少量的代理IP,放入ip_use中. 测试: 1.测试 ...
- python爬取电影评分_用Python爬取猫眼上的top100评分电影
代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...
- python爬取天气_python3爬取各类天气信息
本来是想从网上找找有没有现成的爬取空气质量状况和天气情况的爬虫程序,结果找了一会儿感觉还是自己写一个吧. 主要是爬取北京包括北京周边省会城市的空气质量数据和天气数据. 过程中出现了一个错误:Unico ...
- Python爬取B站弹幕方法介绍
Python爬取B站弹幕方法介绍 文章目录 Python爬取B站弹幕方法介绍 前言 寻找弹幕数据 编写爬虫 B站弹幕数量 新技术介绍 参考文章 前言 最近同学要做东西,需要用 B 站的视频对应的弹幕数 ...
- python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~
原标题:闲着没事,尝试一下用Python爬取B站弹幕呀~ 前言 最近同学要做东西,需要用 B 站的视频对应的弹幕数据做分析,于是请我帮忙爬取 B 站视频的弹幕数据. 对于爬虫而言,我们需要找到对应数据 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...
- python爬取58同城的兼职信息
标题python爬取58同城的兼职信息 刚刚开始学习爬虫,一些 自己研究的小东西,爬取58同城上面的兼职信息放入Excel表格里,具体代码解释在代码里给出注释,下面给出完整代码: #首先是导包 imp ...
- Python爬取URP教务系统课程表并保存到excel
Python爬取URP教务系统课程表并保存到excel 爬取URP教务系统课程表最终结果如图所示: 接下来开始操作: 首先打开教务系统->按F12->点击Network->刷新一下界 ...
- Python爬取京东商品评论数据
一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...
- python爬取高匿代理IP(再也不用担心会进小黑屋了)
一起进步 为什么要用代理IP 很多数据网站,对于反爬虫都做了一定的限制,这个如果写过一些爬虫程序的小伙伴应该都深有体会,其实主要还是IP进了小黑屋了,那么为了安全,就不能使用自己的实际IP去爬取人家网 ...
最新文章
- CNN更新换代!性能提升算力减半,还即插即用(附论文)
- Blueprint代码详细分析-Android10.0编译系统(七)
- Java使用继承的语法是,Java使用继承
- windows和linux下的文件路径表示
- 《软件需求分析(第二版)》第 13 章——需求开发面临的特殊难题 重点部分总结
- 翻牌抽奖 php,PHP+jQuery开发简单的翻牌抽奖实例
- m40型工业机器人_从工业机器人编程及应用到数控机床的安装维修,一次都学习了...
- 【回归预测】基于matlab GA优化BP回归预测(含优化前的对比)【含Matlab源码 1790期】
- POJ 2989 All Friends
- hadoop 运行原理
- 一维码和二维码开源库zint学习
- Jprofiler激活码
- php 统计fasta 序列长度和GC含量
- 通俗易懂的Android root 原理
- 奇虎360私有化背后隐现信托身影
- 微型计算机能直接识别并执行的语言,微处理器能直接识别并执行的命令语言称为...
- 计算机双工模式,100M 全双工、100M 半双工、10M全双工几种模式分别测试
- 山东标梵讲解如何在HTML文档中使用CSS样式表?
- AdmExpress 国际仓储转运系统/海淘转运系统 1.0 正式版发布
- tinyint 范围