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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
解决python 3 urllib 没有 urlencode 属性的问题
Aug 22 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
解决django model修改添加字段报错的问题
Nov 18 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
python 安全地删除列表元素的方法
Mar 16 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
PHP简洁函数小结
2011/08/12 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
Python实现插入排序和选择排序的方法
2019/05/12 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
党员大会主持词
2014/04/02 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Django Paginator分页器的使用示例
2021/06/23 Python
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python