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 数据加密代码
Dec 24 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
Python三元运算实现方法
Jan 12 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python实现统计英文单词个数及字符串分割代码
May 28 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
使用python实现ANN
Dec 20 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
python编程的核心知识点总结
Feb 08 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
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
javascript add event remove event
2008/04/07 Javascript
js 编写规范
2010/03/03 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python中 logging的使用详解
2017/10/25 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python 星号(*)的多种用途
2020/09/21 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
大一学生职业生涯规划
2014/03/11 职场文书
应聘护士求职信
2014/07/21 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
地球一小时活动总结
2015/02/27 职场文书
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python