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中time()方法的使用的教程
May 22 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
pandas带有重复索引操作方法
Jun 08 Python
Python 处理图片像素点的实例
Jan 08 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
python能开发游戏吗
Jun 11 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
python的setattr函数实例用法
Dec 16 Python
在Python中如何使用yield
Jun 07 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 年龄计算函数(精确到天)
2012/06/07 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
python提取页面内url列表的方法
2015/05/25 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
python标识符命名规范原理解析
2020/01/10 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
电信专业毕业生推荐信
2013/11/18 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
如何写好升职自荐信
2014/01/06 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
青年文明号服务承诺
2014/03/31 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
党员领导干部承诺书
2014/05/28 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python