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简单实现基数排序算法
May 16 Python
python导出hive数据表的schema实例代码
Jan 22 Python
使用python判断你是青少年还是老年人
Nov 29 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
django云端留言板实例详解
Jul 22 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python操作yaml说明
Apr 08 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
python神经网络学习 使用Keras进行回归运算
May 04 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/07/19 PHP
php实现映射操作实例详解
2019/10/02 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
python 系统调用的实例详解
2017/07/11 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
Ajax的优点和缺点
2014/11/21 面试题
实习自我鉴定范文
2013/10/30 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
2014年营销工作总结
2014/11/22 职场文书
2015年度企业工作总结
2015/05/21 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript