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
您可能感兴趣
- pythonlist类型教程(Python List cmp知识点总结)
- python面向对象的介绍(Python面向对象思想与应用入门教程类与对象)
- pythonrequests爬虫使用教程(Python 通过requests实现腾讯新闻抓取爬虫的方法)
- python如何把字符串转换成数字(python实现字符串加密成纯数字)
- python抓取天气数据(Python实战之制作天气查询软件)
- python详细讲解类方法的使用(浅谈python标准库--functools.partial)
- python循环语句嵌套使用(Python分支语句与循环语句应用实例分析)
- centos7上安装python(centos6.5安装python3.7.1之后无法使用pip的解决方案)
- python批量图像换背景(详解Python给照片换底色蓝底换红底)
- python操作pandas(详解Python学习之安装pandas)
- pythonide使用教程(对Python Pexpect 模块的使用说明详解)
- python中字典的主要特点(Python里字典的基本用法包括嵌套字典)
- python 调钉钉接口(python3实现钉钉消息推送的方法示例)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
- python分割字符串要用哪一个语句(python使用threading.Condition交替打印两个字符)
- 协程在python中怎么使用(python协程之动态添加任务的方法)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
- 泪目 这位 刷屏 的英雄,是全椒人的骄傲(泪目这位刷屏)
热门推荐
- 云计算与服务器托管区别(使用云服务器托管对于企业的好处有哪些?)
- vue自定义组件定义事件(基于Vue实现自定义组件的方式引入图标)
- nginx日志配置详细教程(Nginx访问日志及错误日志参数说明)
- sqlserver中复合索引(浅析SQL Server 聚焦索引对非聚集索引的影响)
- sql server附加数据库出错(SQL Server附加数据库报错无法打开物理文件,操作系统错误5的图文解决教程)
- ASP.NET函数返回多个值的几种方法
- css各种引用方法(CSS中的四种引用方式)
- Sql Server 更新锁
- mysql字符串的表示方法(详解mysql中的字符集和校验规则)
- 当前云服务器设置方法(如何使用云服务器?四招教你玩转)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9