• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      河南有線的創(chuàng)新應(yīng)用
      ——日?qǐng)?bào)數(shù)據(jù)的自動(dòng)抓取與填報(bào)

      2020-01-14 01:03:24蘇本國(guó)張衛(wèi)云
      中國(guó)傳媒科技 2019年12期
      關(guān)鍵詞:報(bào)表瀏覽器頁(yè)面

      文/蘇本國(guó) 張衛(wèi)云

      1.背景

      麥肯錫稱:數(shù)據(jù),已經(jīng)滲透到當(dāng)今每一個(gè)行業(yè)和業(yè)務(wù)職能領(lǐng)域,成為重要的生產(chǎn)因素。在這個(gè)時(shí)代,公司的決策者、經(jīng)營(yíng)者都需要通過(guò)數(shù)據(jù)觀察企業(yè)運(yùn)作狀態(tài)以及規(guī)律,沒(méi)有數(shù)據(jù),我們舉步維艱。

      系統(tǒng)報(bào)表能為我們提供各種基礎(chǔ)數(shù)據(jù),但數(shù)據(jù)維度和格式固化,不能靈活滿足我們的臨時(shí)需求。所以,手工填報(bào)定制的、多變的經(jīng)營(yíng)日?qǐng)?bào)(周報(bào)月報(bào))是所有經(jīng)營(yíng)單位都必須持續(xù)開(kāi)展的日常工作。

      Excel靈活而強(qiáng)大,能處理工作中大部分的數(shù)據(jù)。使用Excel可以方便地制作包含原數(shù)據(jù)、計(jì)算過(guò)程和最終展現(xiàn)結(jié)果的日?qǐng)?bào)(周報(bào)月報(bào))模板。

      河南有線信息支撐部在日常工作中,常根據(jù)公司領(lǐng)導(dǎo)要求,臨時(shí)制作各種Excel模板,并根據(jù)當(dāng)時(shí)需求,有選擇地將各系統(tǒng)平臺(tái)上的報(bào)表數(shù)據(jù)手工填入臨時(shí)模板。該工作難度低,重復(fù)性強(qiáng),尤其月初,需要填報(bào)的模板在30份左右,每份需要打開(kāi)的報(bào)表頁(yè)面基本都在10個(gè)以上,僅月初就需要6人一天的工作量。

      為此,我們嘗試尋找一種自動(dòng)獲取數(shù)據(jù)并填報(bào)的方法,最終找到目前排行第一的開(kāi)源開(kāi)發(fā)工具Python,經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)和研究,我們利用該工具編寫(xiě)了網(wǎng)頁(yè)爬取、Excel數(shù)據(jù)填寫(xiě)的可執(zhí)行程序,成功實(shí)現(xiàn)了數(shù)據(jù)的自動(dòng)填報(bào)工作目標(biāo)。

      2.思路和過(guò)程概述

      圖1

      使用python編寫(xiě)網(wǎng)頁(yè)爬蟲(chóng)的步驟,可分為:發(fā)送請(qǐng)求、獲取數(shù)據(jù)、解析數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)四步。但在實(shí)際操作中,因爬取方法不同,我們直接獲取到了數(shù)據(jù)的列表,所以省去了數(shù)據(jù)解析環(huán)節(jié),只保留了三步:發(fā)送請(qǐng)求、獲取數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)。每個(gè)過(guò)程處理細(xì)節(jié)詳情如圖1所示:

      下面按圖示步驟,分步說(shuō)明在應(yīng)用程序的編寫(xiě)過(guò)程中,每一步遇到的問(wèn)題及相應(yīng)的解決方案。

      3.編制過(guò)程詳解

      3.1 發(fā)送請(qǐng)求

      3.1.1 請(qǐng)求頁(yè)面的三種方法選擇

      爬取數(shù)據(jù),第一步操作就是模擬瀏覽器向網(wǎng)頁(yè)所在的服務(wù)器發(fā)出請(qǐng)求。我們需要抓取的頁(yè)面是公司內(nèi)部CRM客戶關(guān)系管理系統(tǒng)的報(bào)表數(shù)據(jù),無(wú)需身份驗(yàn)證,但請(qǐng)求參數(shù)較多,報(bào)表數(shù)據(jù)由JavaScript動(dòng)態(tài)加載。

      3.1.1.1 基礎(chǔ)的用法,使用 urllib 的 request模塊

      該模塊中的urlopen()方法,可以實(shí)現(xiàn)簡(jiǎn)單的請(qǐng)求發(fā)送操作,并得到響應(yīng)。但該方法在構(gòu)造帶參數(shù)的請(qǐng)求時(shí)較為復(fù)雜。

      3.1.1.2 高級(jí)用法,使用 requests庫(kù)

      requests庫(kù)中的方法可輕松實(shí)現(xiàn)帶參數(shù)、cookies、登錄驗(yàn)證和代理設(shè)置等網(wǎng)頁(yè)請(qǐng)求,但得到的結(jié)果和在瀏覽器中看到的不一樣:在瀏覽器中可以看到的顯示數(shù)據(jù),但requests得到的結(jié)果中并沒(méi)有。這是因?yàn)閞equests獲取的都是原始HTML文檔,而瀏覽器中的數(shù)據(jù)則是經(jīng)過(guò)JavaScript處理數(shù)據(jù)后生成的結(jié)果。

      云南積極融入服務(wù)長(zhǎng)江經(jīng)濟(jì)帶發(fā)展戰(zhàn)略,有利于云南充分發(fā)揮比較優(yōu)勢(shì),把特色資源轉(zhuǎn)化為經(jīng)濟(jì)優(yōu)勢(shì),把云南打造成為煙草、能源、冶金、化工、特色輕工基地和承接產(chǎn)業(yè)轉(zhuǎn)移基地。

      3.1.1.3 模擬瀏覽器法,使用 selenium 庫(kù)

      為了解決獲取JavaScript生成的動(dòng)態(tài)頁(yè)面數(shù)據(jù)問(wèn)題,我們查閱相關(guān)資料后最終選擇使用模擬瀏覽器庫(kù)——Selenium處理。

      Selenium是一個(gè)自動(dòng)測(cè)試工具,利用它可驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊、下拉等操作,同時(shí)還可以獲取瀏覽器當(dāng)前呈現(xiàn)的頁(yè)面源代碼,做到可見(jiàn)即可爬。注:在使用該方法前,除安裝Selenium庫(kù)外,還需要正確安裝好使用的瀏覽器,如Chrome,并配置好ChromeDriver。

      3.1.2 頁(yè)面分析與構(gòu)造請(qǐng)求

      分析請(qǐng)求參數(shù),打開(kāi)報(bào)表頁(yè)面,按F12打開(kāi)“開(kāi)發(fā)者工具”,從Query String Parameters發(fā)現(xiàn)URL中所帶參數(shù)較多,且含有中文參數(shù)(地市信息)。針對(duì)這樣的復(fù)雜參數(shù)信息,我們采用了“基礎(chǔ)地址+參數(shù)信息”的方法重新構(gòu)造URL,然后再使用Selenium庫(kù)發(fā)送請(qǐng)求。在此過(guò)程中,遇到了不少細(xì)節(jié)問(wèn)題,詳情及解決方法如表1所示:

      表1

      3.1.3 發(fā)送請(qǐng)求

      根據(jù)“分析請(qǐng)求參數(shù)”時(shí)所獲信息,使用selenium庫(kù)模擬谷歌瀏覽器向服務(wù)器發(fā)出請(qǐng)求。獲取各地市現(xiàn)金流的腳本編寫(xiě)如下:

      3.2 獲取數(shù)據(jù)

      打開(kāi)報(bào)表頁(yè)面,按F12打開(kāi)“開(kāi)發(fā)者工具”,選中要提取的元素,右鍵選擇“審查元素”,可找到該元素所在的節(jié)點(diǎn)位置。由于該元素沒(méi)有較明確的節(jié)點(diǎn)ID,且有較多同類節(jié)點(diǎn),因此采用逐級(jí)上查,找到離其最近的有明確節(jié)點(diǎn)ID的節(jié)點(diǎn)“__bookmark2__”,以便CSS選擇器定位待查數(shù)據(jù)。獲取數(shù)據(jù)腳本如下:

      3.2.2 關(guān)于延時(shí)等待

      在調(diào)測(cè)過(guò)程中,發(fā)現(xiàn)報(bào)表頁(yè)面自動(dòng)打開(kāi)后很快關(guān)閉,并沒(méi)有獲得目標(biāo)數(shù)據(jù)。資料顯示selenium的get()方法會(huì)在網(wǎng)頁(yè)的框架加載結(jié)束后結(jié)束執(zhí)行,此時(shí),服務(wù)器給瀏覽器的響應(yīng)中可能也沒(méi)有目標(biāo)數(shù)據(jù)。因此,這里需要增加延時(shí)等待。延時(shí)等待分顯示和隱式,在本應(yīng)用中,我們采用了顯示等待的方法,在控制語(yǔ)句中增加了WebDriverWait()函數(shù)。即:在規(guī)定時(shí)間內(nèi)加載指定節(jié)點(diǎn),如果加載完成,則正常返回查找的節(jié)點(diǎn),否則,拋出超時(shí)異常??刂颇_本如下:

      3.3 存儲(chǔ)數(shù)據(jù)

      3.3.1 Python 往 Excel中寫(xiě)數(shù)據(jù)的 5 種方法

      Python擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)庫(kù),同時(shí),Python社區(qū)提供了大量的第三方模塊。完成一項(xiàng)任務(wù)可有多種方法,只有選擇合適的方法才能達(dá)到自己的目標(biāo)。將所獲數(shù)據(jù)寫(xiě)入Excel時(shí),我們嘗試了多種方法,但都無(wú)法實(shí)現(xiàn)“無(wú)損模板地更新”的目標(biāo)。網(wǎng)上有文章整理了Python寫(xiě)入Excel的4種方法及其優(yōu)缺點(diǎn),增加我們自己的一種方法,歸納如下:

      表2

      其中,使用OpenPyXL修改模板時(shí),只可追加sheet頁(yè),但不能更新單元格,會(huì)影響表中原有公式;但使用Microsoft Excel則可修改部分單元格數(shù)據(jù),且不會(huì)影響原公式。因?yàn)楸緫?yīng)用中既需要讀,又需要更新Excel文檔中的部分?jǐn)?shù)據(jù),且不能修改原文檔中的公式,所以,在此只能使用Microsoft Excel API,即引用win32com組件。

      3.3.2 使用win32com組件,修改Excel表中部分?jǐn)?shù)據(jù)

      寫(xiě)入Excel文檔的全過(guò)程:調(diào)用win32com組件,啟動(dòng)獨(dú)立的Excel進(jìn)程,并打開(kāi)Excel模板文件,使用sheet.Cells(i, j).Value實(shí)現(xiàn)給“第i行第j列”單元格賦值。相關(guān)腳本如下:

      圖2

      圖3

      4.成果展現(xiàn)

      經(jīng)過(guò)以上三步操作,一個(gè)完整的數(shù)據(jù)抓取和填報(bào)程序就完成了,加上友好的參數(shù)錄入及進(jìn)度提示住處,再使用pyinstaller將程序編譯成可執(zhí)行文件。將可執(zhí)行文件和模板一起移置到應(yīng)用環(huán)境中,按周期執(zhí)行該文件,輸入統(tǒng)計(jì)需要的參數(shù),即可以直觀地看到頁(yè)面打開(kāi)過(guò)程和Excel數(shù)據(jù)刷新過(guò)程。圖2為目標(biāo)頁(yè)面逐一打開(kāi)的過(guò)程,圖3為Excel文檔自動(dòng)打開(kāi)的過(guò)程,此后,隨著Excel數(shù)據(jù)的刷新,文檔中原有計(jì)算公式會(huì)自動(dòng)計(jì)算,待數(shù)據(jù)寫(xiě)入完畢,目標(biāo)數(shù)據(jù)即為可發(fā)布數(shù)據(jù)。

      結(jié)語(yǔ)

      使用python的擴(kuò)展庫(kù)和模塊實(shí)現(xiàn)獲取和使用數(shù)據(jù)較為簡(jiǎn)單,本應(yīng)用使用的擴(kuò)展庫(kù)和模塊有:selenium、urllib、win32com和datetime等。方便快捷地實(shí)現(xiàn)了目標(biāo)功能,解決常用報(bào)表的自動(dòng)填報(bào)問(wèn)題,在節(jié)約人力成本的同時(shí),提高了工作效率和數(shù)據(jù)準(zhǔn)確度。

      猜你喜歡
      報(bào)表瀏覽器頁(yè)面
      大狗熊在睡覺(jué)
      刷新生活的頁(yè)面
      反瀏覽器指紋追蹤
      電子制作(2019年10期)2019-06-17 11:45:14
      LabWindows/CVI中Excel報(bào)表技術(shù)研究
      從三大報(bào)表讀懂養(yǎng)豬人的成績(jī)單
      環(huán)球?yàn)g覽器
      再見(jiàn),那些年我們嘲笑過(guò)的IE瀏覽器
      同一Word文檔 縱橫頁(yè)面并存
      淺析ASP.NET頁(yè)面導(dǎo)航技術(shù)
      月度報(bào)表
      江安县| 肃宁县| 绥江县| 华蓥市| 台东县| 桓台县| 和平县| 紫云| 无锡市| 南丹县| 子洲县| 河津市| 莱阳市| 普宁市| 仁怀市| 宽城| 通化县| 潜山县| 宁波市| 巴彦县| 古田县| 无为县| 来安县| 九台市| 建德市| 麻栗坡县| 肥乡县| 隆德县| 安乡县| 乌兰浩特市| 绥滨县| 饶平县| 蓝田县| 中方县| 阿克| 莫力| 临漳县| 常山县| 通城县| 石屏县| 嘉鱼县|