python网络爬虫案例实战(python爬取cnvd漏洞库信息的实例)
类别:脚本大全 浏览量:230
时间:2022-03-31 12:54:38 python网络爬虫案例实战
python爬取cnvd漏洞库信息的实例今天一同事需要整理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() |
好了。看看结果怎样!
ok!剩下手动整理一下,收工!
以上这篇python爬取cnvd漏洞库信息的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/qq1124794084/article/details/53923897
您可能感兴趣
- python 装饰器模式(python重试装饰器的简单实现方法)
- python内置函数使用方法(Python神奇的内置函数locals的实例讲解)
- 使用python制作游戏(python制作填词游戏步骤详解)
- python中字符串常用函数或方法(Python3.5字符串常用操作实例详解)
- python函数基本操作(Python定义函数功能与用法实例详解)
- python调用excel教程(利用python在excel里面直接使用sql函数的方法)
- python怎么设置matlab编程(实例详解Matlab 与 Python 的区别)
- python3爬虫代码(Python3爬楼梯算法示例)
- java入坑rabbitmq(Python操作rabbitMQ的示例代码)
- python加密和解密(python实现对输入的密文加密)
- python转pdf教程(Python实现将HTML转成PDF的方法分析)
- python将一个字符串逆序输出(Python字符串逆序的实现方法一题多解)
- python 模块详解(举例讲解Python常用模块)
- python数字图像处理入门(python图像处理入门一)
- python基本数据结构(浅谈Python编程中3个常用的数据结构和算法)
- pythonmatplotlib条形图动画(Python Matplotlib实现三维数据的散点图绘制)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 数字藏品市场有多乱 周杰伦丢了 一只猴 ,损失超300万(数字藏品市场有多乱)
- 这里输入关键词(怎么输入关键词搜索)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
热门推荐
- C#中ToString()常见的格式
- 面试中如何给人留下好印象
- iis授权规则(IIS下防止mdb数据库被下载的实现方法)
- vueelementui组件生成页面(Vue Element前端应用开发之树列表组件)
- dedecms可以长期使用吗(dedecms5.7 文章不能发布问题探讨及解决方法)
- php实现redis消息队列(redis+php实现微博三微博列表功能详解)
- sql server 时间与日期函数(SQL Server日期加减函数DATEDIFF与DATEADD用法分析)
- vue左右滑屏(vue中实现全屏以及对退出全屏的监听)
- python中for循环计算1-100(python 用for循环实现1~n求和的实例)
- input的autocomplete="off"属性
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9