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 (1)
Oct 31 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
python实现雨滴下落到地面效果
Jun 21 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
python实现爬取百度图片的方法示例
Jul 06 Python
python logging模块的使用总结
Jul 09 Python
在pycharm中实现删除bookmark
Feb 14 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
Python实现爬取并分析电商评论
Jun 19 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 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的new static和new self的区别与使用
2019/11/27 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
java必学必会之static关键字
2015/12/03 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
Python实现高斯函数的三维显示方法
2018/12/29 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
Python print不能立即打印的解决方式
2020/02/19 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
Django视图类型总结
2021/02/17 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
大学毕业生自我鉴定
2013/11/05 职场文书
不假外出检讨书
2014/01/27 职场文书
阳光体育活动方案
2014/02/16 职场文书
办公设备采购方案
2014/03/16 职场文书
责任心演讲稿
2014/05/14 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js