您好,登錄后才能下訂單哦!
之前在公司處理過(guò)18年的所有機(jī)器交付進(jìn)度的信息,要將所有未交付的機(jī)器過(guò)濾出來(lái)并做統(tǒng)一處理,用Python爬下來(lái)并寫(xiě)入Excel表格確實(shí)是個(gè)好辦法。
首先介紹一個(gè)處理這個(gè)問(wèn)題最笨的辦法:用瀏覽器打開(kāi)每個(gè)季度的剩余未交付的機(jī)器列表,挨行復(fù)制粘貼到Excel表格里。。然后每處理完一臺(tái)就刪掉記錄。。。這種方法對(duì)于小學(xué)生確實(shí)比較好使,也僅限于小學(xué)生了。。當(dāng)然得升級(jí)一下。
然后升級(jí)版就是:直接request模塊爬下來(lái)未交付的機(jī)器然后復(fù)制到表格里。復(fù)制這一步當(dāng)然也能用python的xl*模塊實(shí)現(xiàn)啊。要不想挨臺(tái)處理完還要?jiǎng)h記錄的話就直接cron命令定時(shí)抓一下。。。這樣是不是就很符合我的懶人氣質(zhì)了。。。
老套路,先上代碼吧。
#-*- coding: UTF-8 -*- import os import requests import json import xlrd import xlutils from xlutils.copy import copy import sys reload(sys) sys.setdefaultencoding('utf8') def get_device_spec(hostname): url = "http://abc.def.com/url/s" pa = "_type:server,hostname:"+ hostname param = {"q":pa} respone = requests.request("GET", url, params=param) res = json.loads(respone.text) server_detail = res["result"] return server_detail def write_excel_data(file_name,sheet_num,row,col,value_data): rbook = xlrd.open_workbook(file_name) wbook = copy(rbook) w_sheet = wbook.get_sheet(sheet_num) w_sheet.write(row,col,value_data) wbook.save(file_name) fileName = "8.25_Q3.xlsx" data = xlrd.open_workbook(fileName) sheet01 = data.sheets()[0] sheet01_nrows = sheet01.nrows sheet01_row = 1 for sheet01_row in range(1,sheet01_nrows): hostname = sheet01.cell(sheet01_row,0).value server = get_device_spec(hostname) try: write_excel_data(fileName,0,sheet01_row,1,server[0]["manufacturer"]) write_excel_data(fileName,0,sheet01_row,2,server[0]["idc"]) write_excel_data(fileName,0,sheet01_row,3,server[0]["sn"]) write_excel_data(fileName,0,sheet01_row,4,server[0]["rack_location"]) write_excel_data(fileName,0,sheet01_row,5,server[0]["flavor_disk"]) write_excel_data(fileName,0,sheet01_row,6,server[0]["maintain_enddate"]) except Exception as e: pass continue
def get_device_spec(hostname): url = "http://abc.def.com/url/s" pa = "_type:server,hostname:"+ hostname param = {"q":pa} respone = requests.request("GET", url, params=param) res = json.loads(respone.text) server_detail = res["result"] return server_detail
首先先看get_device_spec函數(shù)。這個(gè)函數(shù)使用request模塊通過(guò)傳入的hostname字段去抓取我們公司的機(jī)器信息,并做json格式處理并返回server_detail的所有信息。
def write_excel_data(file_name,sheet_num,row,col,value_data): rbook = xlrd.open_workbook(file_name) wbook = copy(rbook) w_sheet = wbook.get_sheet(sheet_num) w_sheet.write(row,col,value_data) wbook.save(file_name)
接下來(lái)看write_excel_data函數(shù)。這是一個(gè)將信息輸入到Excel表格的函數(shù)。首先打開(kāi)文件以及對(duì)應(yīng)的sheet,然后將所需要的row,col和valuue_data字段填入表格內(nèi),然后保存該文件。
fileName = "8.25_Q3.xlsx" data = xlrd.open_workbook(fileName) sheet01 = data.sheets()[0] sheet01_nrows = sheet01.nrows sheet01_row = 1 for sheet01_row in range(1,sheet01_nrows): hostname = sheet01.cell(sheet01_row,0).value server = get_device_spec(hostname) try: write_excel_data(fileName,0,sheet01_row,1,server[0]["manufacturer"]) write_excel_data(fileName,0,sheet01_row,2,server[0]["idc"]) write_excel_data(fileName,0,sheet01_row,3,server[0]["sn"]) write_excel_data(fileName,0,sheet01_row,4,server[0]["rack_location"]) write_excel_data(fileName,0,sheet01_row,5,server[0]["flavor_disk"]) write_excel_data(fileName,0,sheet01_row,6,server[0]["maintain_enddate"]) except Exception as e: pass continue
這段代碼算是主函數(shù)了。主要實(shí)現(xiàn)的是定義文件名,然后讀取文件內(nèi)的hostname并將其作為實(shí)參傳入并運(yùn)行g(shù)et_device_spce函數(shù),這一步用來(lái)獲取機(jī)器的所有信息;以及過(guò)濾出sn,idc等字段作為實(shí)參傳入write_excel_data函數(shù)內(nèi),這一步用來(lái)將獲得的機(jī)器參數(shù)過(guò)濾出自己需要的字段并填入Excel表格內(nèi)。最后的except是簡(jiǎn)單做了一個(gè)錯(cuò)誤判斷退出。。防止自己電腦oom。。
最后我是在自己電腦上配置了每天9點(diǎn)定時(shí)運(yùn)行該文件并抓取機(jī)器信息保存。然后上班來(lái)處理剩余的機(jī)器。。
加一個(gè)我個(gè)人的公眾號(hào):運(yùn)維開(kāi)發(fā)Club。主要向大家分享Linux運(yùn)維、Python、Go語(yǔ)言以及當(dāng)下的云計(jì)算、容器等知識(shí),歡迎關(guān)注?。。?/p>
這段代碼算是介紹完成了,其中個(gè)人任務(wù)也有好多未優(yōu)化的代碼。。。包括代碼重用啦,還有獲取的信息可用量也不是很多。。等等吧。有待大家?guī)兔χ更c(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。