python爬取cnvd漏洞库信息的实例


Posted in Python onFebruary 14, 2019

今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞库里面的信息,一看960多个要整理到什么时候才结束。

所以我决定写个爬虫帮他抓取数据。

看了一下各类信息还是很规则的,感觉应该很好写。

but这个网站设置了各种反爬虫手段。

经过各种百度,还是解决问题了。

设计思路:

1.先抓取每一个漏洞信息对应的网页url

2.获取每个页面的漏洞信息

# -*- coding: utf-8 -*-
import requests
import re
import xlwt
import time
from bs4 import BeautifulSoup
headers = {
 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 'Accept-Encoding': 'gzip, deflate, sdch',
 'Accept-Language': 'zh-CN,zh;q=0.8',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
}
cookies={'__jsluid':'8d3f4c75f437ca82cdfad85c0f4f7c25'}
myfile=xlwt.Workbook()
wtable=myfile.add_sheet(u"信息",cell_overwrite_ok=True)
j = 0
a = 900
for i in range(4):
 url ="http://ics.cnvd.org.cn/?max=20&offset="+str(a)
 r = requests.get(urttp://ics.cnvd.org.cnl,headers=headers,cookies=cookies)
 print r.status_code
 while r.status_code != 200:
  r = requests.get(url,headers=headers,cookies=cookies)
  print r.status_code
 html = r.text
 soup = BeautifulSoup(html)
 #print html
 
 for tag in soup.find('tbody',id='tr').find_all('a',href=re.compile('http://www.cnvd.org.cn/flaw/show')):
  print tag.attrs['href']
  wtable.write(j,0,tag.attrs['href'])
  j += 1
 a += 20
 print u"已完成%s"%(a)
filename=str(time.strftime('%Y%m%d%H%M%S',time.localtime()))+"url.xls"
myfile.save(filename)
print u"完成%s的url备份"%time.strftime('%Y%m%d%H%M%S',time.localtime())
# -*- coding: utf-8 -*-
from selenium import webdriver
import xlrd
import xlwt
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
 
class Gk(unittest.TestCase):
 def setUp(self):
  self.driver = webdriver.Firefox()
  self.driver.implicitly_wait(5)
  self.verificationErrors = []
  self.accept_next_alert = True
 
 def test_gk(self):
  myfile=xlwt.Workbook()
  wtable=myfile.add_sheet(u"info",cell_overwrite_ok=True)
  data = xlrd.open_workbook('url.xlsx')
  table = data.sheets()[0]
  nrows = table.nrows
  driver = self.driver
  
  j = 0
  for i in range(nrows):
   try:
    s = []
    driver.get(table.cell(i,0).value)
    title = driver.find_element_by_xpath("//h1").text
    print title
    s.append(title)
    trs = driver.find_element_by_xpath("//tbody").find_elements_by_tag_name('tr')
    for td in trs:
     tds = td.find_elements_by_tag_name("td")
     for tt in tds:
      print tt.text
      s.append(tt.text)
    k = 0
    for info in s:
     wtable.write(j,k,info)
     k += 1
    j += 1
   except:
    filename=str(time.strftime('%Y%m%d%H%M%S',time.localtime()))+"url.xls"
    myfile.save(filename)
    print u"异常自动保存%s的漏洞信息备份"%time.strftime('%Y%m%d%H%M%S',time.localtime())
   
  filename=str(time.strftime('%Y%m%d%H%M%S',time.localtime()))+"url.xls"
  myfile.save(filename)
  print u"完成%s的漏洞信息备份"%time.strftime('%Y%m%d%H%M%S',time.localtime())
  
 def is_element_present(self, how, what):
  try: self.driver.find_element(by=how, value=what)
  except NoSuchElementException, e: return False
  return True
 
 def is_alert_present(self):
  try: self.driver.switch_to_alert()
  except NoAlertPresentException, e: return False
  return True
 
 def close_alert_and_get_its_text(self):
  try:
   alert = self.driver.switch_to_alert()
   alert_text = alert.text
   if self.accept_next_alert:
    alert.accept()
   else:
    alert.dismiss()
   return alert_text
  finally: self.accept_next_alert = True
 
 def tearDown(self):
  self.driver.quit()
  self.assertEqual([], self.verificationErrors)
 
if __name__ == "__main__":
 unittest.main()

好了。看看结果怎样!

python爬取cnvd漏洞库信息的实例

OK!剩下手动整理一下,收工!

以上这篇python爬取cnvd漏洞库信息的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
浅谈对yield的初步理解
May 29 Python
Python构建XML树结构的方法示例
Jun 30 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
python实现redis三种cas事务操作
Dec 19 Python
python3中的md5加密实例
May 29 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
python实现桌面托盘气泡提示
Jul 29 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
pytorch梯度剪裁方式
Feb 04 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
基于python历史天气采集的分析
Feb 14 #Python
Python 实现域名解析为ip的方法
Feb 14 #Python
解决python Markdown模块乱码的问题
Feb 14 #Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 #Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 #Python
python实现全盘扫描搜索功能的方法
Feb 14 #Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 #Python
You might like
PHP生成Flash动画的实现代码
2010/03/12 PHP
php array的学习笔记
2012/05/16 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
php设计模式之委托模式
2016/02/13 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
Node 代理访问的实现
2019/09/19 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Python深入学习之内存管理
2014/08/31 Python
python读取图片任意范围区域
2019/01/23 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
公务员综合考察材料
2014/02/01 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
2014年采购员工作总结
2014/11/18 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
5.12护士节活动总结
2015/02/10 职场文书
关于幸福的感言
2015/08/03 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
MySQL之select、distinct、limit的使用
2021/11/11 MySQL