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列表操作实例
Jan 14 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python构建深度神经网络(DNN)
Mar 10 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
python发送邮件脚本
May 22 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
Python requests接口测试实现代码
Sep 08 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
Python实现对齐打印 format函数的用法
Apr 28 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实现服务器状态监控的方法
2014/12/09 PHP
深入php内核之php in array
2015/11/10 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
js的回调函数详解
2015/01/05 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
python迭代器实例简析
2014/09/25 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python字典的值可以修改吗
2020/06/29 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
《鸟的天堂》教学反思
2014/02/27 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
分公司经理任命书
2014/06/05 职场文书
英语教研活动总结
2014/07/02 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
Golang连接并操作MySQL
2022/04/14 MySQL
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技