python爬取cnvd漏洞庫信息的實(shí)例
今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞庫里面的信息,一看960多個(gè)要整理到什么時(shí)候才結(jié)束。
所以我決定寫個(gè)爬蟲幫他抓取數(shù)據(jù)。
看了一下各類信息還是很規(guī)則的,感覺應(yīng)該很好寫。
but這個(gè)網(wǎng)站設(shè)置了各種反爬蟲手段。
經(jīng)過各種百度,還是解決問題了。
設(shè)計(jì)思路:
1.先抓取每一個(gè)漏洞信息對(duì)應(yīng)的網(wǎng)頁url
2.獲取每個(gè)頁面的漏洞信息
# -*- 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("http://h1").text print title s.append(title) trs = driver.find_element_by_xpath("http://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"異常自動(dòng)保存%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()
好了??纯唇Y(jié)果怎樣!
OK!剩下手動(dòng)整理一下,收工!
以上這篇python爬取cnvd漏洞庫信息的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
多版本python的pip 升級(jí)后, pip2 pip3 與python版本失配解決方法
在本篇文章里小編給大家整理的是關(guān)于多版本python的pip 升級(jí)后, pip2 pip3 與python版本失配的解決方法內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-09-09Python 寫入訓(xùn)練日志文件并控制臺(tái)輸出解析
這篇文章主要介紹了Python 寫入訓(xùn)練日志文件并控制臺(tái)輸出解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表)
今天小編就為大家分享一篇Python嵌套列表轉(zhuǎn)一維的方法(壓平嵌套列表),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python中的 is 和 == 以及字符串駐留機(jī)制詳解
這篇文章主要介紹了Python中的 is 和 == 以及字符串駐留機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06Python對(duì)列表的操作知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理了關(guān)于Python對(duì)列表的操作知識(shí)點(diǎn)總結(jié)以及實(shí)例代碼運(yùn)用,需要的朋友們跟著學(xué)習(xí)下。2019-08-08解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定
這篇文章主要介紹了解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定!希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03python使用pyhook監(jiān)控鍵盤并實(shí)現(xiàn)切換歌曲的功能
這篇文章主要介紹了python使用pyhook監(jiān)控鍵盤并實(shí)現(xiàn)切換歌曲的功能,非常酷炫的一個(gè)小程序,可以讓你在游戲時(shí)避免切出游戲直接換歌,需要的朋友可以參考下2014-07-07pandas調(diào)整列的順序以及添加列的實(shí)現(xiàn)
這篇文章主要介紹了pandas調(diào)整列的順序以及添加列的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03