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查询Mysql时返回字典结构的代码
Jun 18 Python
Python实现备份文件实例
Sep 16 Python
Python中的pass语句使用方法讲解
May 14 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
python读取LMDB中图像的方法
Jul 02 Python
TensorFlow实现Logistic回归
Sep 07 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python和Bash结合在一起的方法
Nov 13 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
adodb与adodb_lite之比较
2006/12/31 PHP
发布一个用PHP fsockopen写的HTTP下载的类
2007/02/22 PHP
php遍历CSV类实例
2015/04/14 PHP
详解js异步文件加载器
2016/01/24 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
JavaScript cookie的设置获取删除详解
2014/02/11 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
git进行版本控制心得详谈
2017/12/10 Python
python文本数据相似度的度量
2018/03/12 Python
我们的节日清明节活动总结
2014/04/30 职场文书
给校长的建议书400字
2014/05/15 职场文书
市场推广策划方案
2014/06/02 职场文书
技校毕业生自荐信
2014/06/03 职场文书
毕业生找工作求职信
2014/08/05 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
MySql数据库触发器使用教程
2022/06/01 MySQL