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使用crontab模块设置和清除定时任务操作详解)
- python中字典的常用操作(11个Python3字典内置方法大全与示例汇总)
- zabbix sender能否发送告警数据(python3实现zabbix告警推送钉钉的示例)
- 微信昵称python(Python 微信之获取好友昵称并制作wordcloud的实例)
- python弹跳小球(python实现弹跳小球)
- 零基础学计算机二级python(计算机二级python学习教程1 教大家如何学习python)
- python中encode中文自定义编码(详解Python解决抓取内容乱码问题decode和encode解码)
- python里面的time如何用(详解python:time模块用法)
- python选择语句形式判断回文数(Python3实现的回文数判断及罗马数字转整数算法示例)
- python 爬虫图形验证码(Python爬虫实现验证码登录代码实例)
- pythonhtml文件分析(对Python3 解析html的几种操作方式小结)
- python线程池如何实现同步(Python mutiprocessing多线程池pool操作示例)
- python中random库的用法(Python minidom模块用法示例DOM写入和解析XML)
- python大数据学习顺序(Python如何处理大数据?3个技巧效率提升攻略推荐)
- pythondocx安装教程(Python docx库用法示例分析)
- pythonsocket教程(python3利用Socket实现通信的方法示例)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
热门推荐
- nodejs架构解析(详解NodeJS模块化)
- dedecms导航条长度(去掉dedecms友情链接中的LI标签的方法)
- HTML中h1到h6标签
- 使用NuGet管理项目的DLL
- python虚拟变量教程(Python中psutil的介绍与用法)
- RegisterClientScriptBlock与RegisterStartupScript区别
- mysql完整整理(Mysql隔离性之Read View的用法说明)
- nginxlocation和alias的区别(nginx搭建图片服务器的过程详解root和alias的区别)
- iis服务器如何搭建一个网站(配置IIS网站web服务器的安全策略配置解决方案)
- 进程和线程的区别有哪些
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9