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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
在Python中使用模块的教程
Apr 27 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
pycharm设置注释颜色的方法
May 23 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python binascii 进制转换实例
Jun 12 Python
python3 pillow模块实现简单验证码
Oct 31 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
Python try except异常捕获机制原理解析
Apr 18 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
python热力图实现简单方法
Jan 29 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
Yii框架登录流程分析
2014/12/03 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
详解python中的线程
2018/02/10 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
python修改字典键(key)的方法
2019/08/05 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Whistles官网:英国女装品牌
2020/08/14 全球购物
电气工程和自动化自荐信范文
2013/12/25 职场文书
会议邀请书范文
2014/02/02 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python
Python PIL按比例裁剪图片
2022/05/11 Python