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è)漏洞信息對應(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"異常自動保存%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!剩下手動整理一下,收工!
以上這篇python爬取cnvd漏洞庫信息的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python開啟多個(gè)子進(jìn)程并行運(yùn)行的方法
這篇文章主要介紹了python開啟多個(gè)子進(jìn)程并行運(yùn)行的方法,涉及Python進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
Python+tkinter實(shí)現(xiàn)高清圖片保存
作為愛玩電腦的你是不是也需要經(jīng)常更換一下自己的電腦壁紙呢?但是在網(wǎng)上有很多心儀的圖片想要保存下來,如果一張張的去保存那效率又低。所以本文用Python寫一個(gè)保存圖片的功能,把我們的圖片給保存到我們的電腦,需要的可以參考一下2022-03-03
Gradio機(jī)器學(xué)習(xí)模型快速部署工具quickstart前篇
這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具quickstart準(zhǔn)備原文翻譯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
圖文詳解牛頓迭代算法原理及Python實(shí)現(xiàn)
牛頓迭代法又稱為牛頓-拉夫遜(拉弗森)方法,它是牛頓在17世紀(jì)提出的一種在實(shí)數(shù)域和復(fù)數(shù)域上近似求解方程的方法。本文將利用圖文詳解牛頓迭代算法原理及實(shí)現(xiàn),需要的可以參考一下2022-08-08
代碼詳解django中數(shù)據(jù)庫設(shè)置
在本篇文章里小編給大家分享了關(guān)于django中數(shù)據(jù)庫設(shè)置的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。2019-01-01
Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn)
這篇文章主要介紹了Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Django之choices選項(xiàng)和富文本編輯器的使用詳解
這篇文章主要介紹了Django之choices選項(xiàng)和富文本編輯器的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

