溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python實(shí)現(xiàn)抓取網(wǎng)頁(yè)API的機(jī)器信息并導(dǎo)入Excel表格

發(fā)布時(shí)間:2020-05-20 13:53:32 來(lái)源:網(wǎng)絡(luò) 閱讀:1161 作者:劉俊杰12138 欄目:編程語(yǔ)言

Python實(shí)現(xiàn)抓取網(wǎng)頁(yè)API的機(jī)器信息并導(dǎo)入Excel表格

    之前在公司處理過(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>

                                                           Python實(shí)現(xiàn)抓取網(wǎng)頁(yè)API的機(jī)器信息并導(dǎo)入Excel表格


    這段代碼算是介紹完成了,其中個(gè)人任務(wù)也有好多未優(yōu)化的代碼。。。包括代碼重用啦,還有獲取的信息可用量也不是很多。。等等吧。有待大家?guī)兔χ更c(diǎn)。


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI