余凱 湯淵 黎海震 夏偉軒
摘? 要:為了從大量數(shù)據(jù)中快速,高效地提取出有用的數(shù)據(jù)以方便數(shù)據(jù)分析。利用Python語(yǔ)言中的Selenium庫(kù)是目前廣泛應(yīng)用于爬蟲(chóng)設(shè)計(jì)的一種方法,以其代碼精簡(jiǎn),拾取方便且效率較高等特點(diǎn),應(yīng)用于絕大部分企業(yè)的數(shù)據(jù)挖掘平臺(tái)中。通過(guò)應(yīng)用Python和Selenium的方法實(shí)現(xiàn)了數(shù)據(jù)的提取,并通過(guò)使用異常捕抓、函數(shù)封裝,統(tǒng)一調(diào)用實(shí)現(xiàn)了數(shù)據(jù)的導(dǎo)出和上傳的自動(dòng)化,結(jié)果表明使用Selenium爬蟲(chóng)會(huì)優(yōu)于網(wǎng)頁(yè)爬蟲(chóng)。
關(guān)鍵詞:Selenium;異常處理;爬蟲(chóng);電力系統(tǒng)
中圖分類(lèi)號(hào):TP311.5? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)05-0026-04
Research on Application of Power System Data Crawler
Based on Selenium Framework
YU Kai,TANG Yuan,LI Haizhen,XIA Weixuan
(Power Supply Service Center of Dongguan Power Supply Bureau of Guangdong Power Grid Company,Dongguan? 523000,China)
Abstract:In order to extract useful data from a large number of data quickly and efficiently to facilitate data analysis. Using the Selenium library in Python language is a method widely used in crawler design at present. It is used in the data mining platform of most enterprises because of its simple code,convenient picking and high efficiency. The method of Python and Selenium is used to extract the data,and the automation of data export and upload is realized by using exception capture,function encapsulation and unified call. The results show that Selenium crawler is better than web crawler.
Keywords:Selenium;abnormal jump catch;web crawler;electric system
0? 引? 言
隨著大數(shù)據(jù)時(shí)代的發(fā)展,越來(lái)越多的企業(yè)意識(shí)到了數(shù)據(jù)的重要性,如何從數(shù)以億計(jì)的信息中提取出自己想要的信息,已經(jīng)成為的大數(shù)據(jù)時(shí)代的必修課,爬蟲(chóng)技術(shù)也應(yīng)運(yùn)而生,其通過(guò)設(shè)計(jì)規(guī)則,自我驅(qū)動(dòng)抓取網(wǎng)頁(yè)信息的特點(diǎn),做到了在大大減少人力消耗的前提下,提取出企業(yè)所要用的數(shù)據(jù)。通過(guò)網(wǎng)頁(yè)抓取后臺(tái)數(shù)據(jù),快速解析網(wǎng)頁(yè)代碼達(dá)到獲取網(wǎng)頁(yè)元素信息和數(shù)據(jù)包的方式,在無(wú)需破壞或介入數(shù)據(jù)庫(kù)的前提下,直接從系統(tǒng)和頁(yè)面取得想要的信息。為各類(lèi)分析挖掘提供數(shù)據(jù)源支持。
通過(guò)爬蟲(chóng)獲取的各類(lèi)信息紛雜,對(duì)爬蟲(chóng)數(shù)據(jù)統(tǒng)一進(jìn)行必要的分析與預(yù)處理進(jìn)行數(shù)據(jù)上傳是適應(yīng)業(yè)務(wù)場(chǎng)景的必要環(huán)節(jié)。很多企業(yè)也通過(guò)其特有的方式構(gòu)建了其處理信息的平臺(tái),將爬蟲(chóng)接入這些信息平臺(tái),使數(shù)據(jù)能夠通過(guò)后臺(tái)直觀地展現(xiàn)在其他應(yīng)用軟件上,以此開(kāi)展更多的業(yè)務(wù)場(chǎng)景是為企業(yè)創(chuàng)造數(shù)據(jù)競(jìng)爭(zhēng)力,幫助企業(yè)適應(yīng)大數(shù)據(jù)時(shí)代的重要環(huán)節(jié),因此,如何智能化地利用科技手段實(shí)現(xiàn)爬蟲(chóng)與信息平臺(tái)的互通十分關(guān)鍵。
1? 業(yè)務(wù)分析
在電網(wǎng)企業(yè)電力營(yíng)銷(xiāo)日常工作中,需要在營(yíng)銷(xiāo)系統(tǒng)、計(jì)量系統(tǒng)以及其管理系統(tǒng)之間往返使用特定數(shù)據(jù)索引進(jìn)行數(shù)據(jù)提取、分析和整理后上傳到其他系統(tǒng)進(jìn)行分析,這部分工作往往重復(fù)性高、操作流程長(zhǎng)。為避免此類(lèi)工作耗費(fèi)大量時(shí)間和精力,使用爬蟲(chóng)技術(shù)進(jìn)行跨平臺(tái)跨系統(tǒng)之間的數(shù)據(jù)提取和整理,實(shí)現(xiàn)電力系統(tǒng)數(shù)據(jù)整合上傳的自動(dòng)化操作。
如整合當(dāng)月電量數(shù)據(jù)進(jìn)行分析的工作,需要對(duì)供售電量、電量排名、電量構(gòu)成、行業(yè)電量數(shù)據(jù)進(jìn)行導(dǎo)出及上傳,需要登錄到電力系統(tǒng),使用爬蟲(chóng)導(dǎo)出當(dāng)月每一天的供售電量、電量排名、電量構(gòu)成、行業(yè)電量等在內(nèi)的19個(gè)電力數(shù)據(jù)。
由圖1、圖2所示,對(duì)電力系統(tǒng)分析,發(fā)現(xiàn)電力系統(tǒng)主要由查詢部分、數(shù)據(jù)部分以及功能按鈕組成,以導(dǎo)出各行業(yè)售電量為例,要爬取該數(shù)據(jù),可以通過(guò)在查詢部分中點(diǎn)擊查詢按鈕,再點(diǎn)擊行數(shù)據(jù)內(nèi)數(shù)量的超鏈接,就可以預(yù)覽數(shù)據(jù)部分,最后點(diǎn)擊功能按鈕中的導(dǎo)出按鍵既可以將數(shù)據(jù)導(dǎo)出為如圖3所示的Excel表格,以上的步驟與Selenium爬蟲(chóng)不謀而合,可以通過(guò)Selenium模擬用戶進(jìn)行查詢、點(diǎn)擊以及導(dǎo)出三個(gè)行為,實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)導(dǎo)出。
2? Selenium介紹
2.1? Selenium原理
Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7,8,9,10,11)、Mozilla Firefox、Safari,Google Chrome、Opera等,Selenium通過(guò)對(duì)瀏覽器的驅(qū)動(dòng),對(duì)對(duì)象元素進(jìn)行控制,同時(shí)Selenium支持多種開(kāi)發(fā)語(yǔ)言,比如Java、C和Python,通常會(huì)使用Python+Selenium+ Chrome/Firefox的組合來(lái)解決現(xiàn)有的網(wǎng)絡(luò)爬蟲(chóng)登錄以及繞過(guò)JS和滑塊問(wèn)題,目前Chrome和Firefox已經(jīng)完全替代了之前的PhantomJS無(wú)界面瀏覽器,能完成所有操作又節(jié)省內(nèi)存。這樣Chrome/Firefox負(fù)責(zé)渲染解析JavaScript,Selenium負(fù)責(zé)驅(qū)動(dòng)瀏覽器和Python進(jìn)行對(duì)接,Python負(fù)責(zé)做后期的處理,三者構(gòu)成一個(gè)完整的爬蟲(chóng)結(jié)構(gòu)。
這樣的結(jié)構(gòu)搭配,可以實(shí)現(xiàn)很多的操作,比如填寫(xiě)表單、點(diǎn)擊鏈接、鼠標(biāo)拖拽,鼠標(biāo)點(diǎn)擊等,為爬蟲(chóng)操作帶來(lái)極大的方便,能解決一系列人工操作的問(wèn)題,為網(wǎng)絡(luò)爬蟲(chóng)通過(guò)驗(yàn)證登錄信息提供了方便,模擬瀏覽器正常流程圖,如圖4所示。
2.2? Selenium相關(guān)API
安裝Selenium命令:pip install selenium,安裝核心API后可以進(jìn)行多種操作,比如窗口切換、表達(dá)操作鼠標(biāo)操作等為實(shí)現(xiàn)模擬操作環(huán)境提供接口。在電力系統(tǒng)中,主要用到了5個(gè)API,分別是核心驅(qū)動(dòng)模塊,訪問(wèn)網(wǎng)址模塊,元素定位方法,網(wǎng)頁(yè)延時(shí)模塊,退出瀏覽器模塊,核心驅(qū)動(dòng)模塊可以配合訪問(wèn)網(wǎng)址來(lái)啟動(dòng)Chrome瀏覽器并登錄電力系統(tǒng),元素定位方法可以定位需要模擬點(diǎn)擊或者輸入的位置,以及定位網(wǎng)頁(yè)中點(diǎn)擊按鈕所在框架的位置,定位位置后通過(guò)模擬用戶點(diǎn)擊導(dǎo)出按鈕實(shí)現(xiàn)數(shù)據(jù)的提取,而顯式等待和隱式等待可以等待一段時(shí)間再執(zhí)行下一個(gè)命令,解決由于網(wǎng)速等原因造成的頁(yè)面卡頓而無(wú)法定位元素位置,以及點(diǎn)擊導(dǎo)致的運(yùn)行出錯(cuò)問(wèn)題,在導(dǎo)出完所需的所有數(shù)據(jù)之后可以通過(guò)退出瀏覽器模塊退出,通過(guò)以上5個(gè)API可以對(duì)電力系統(tǒng)實(shí)現(xiàn)一個(gè)效率高、穩(wěn)定性強(qiáng)的Selenium爬蟲(chóng)。
3? 具體實(shí)現(xiàn)
3.1? 架構(gòu)設(shè)置
一個(gè)優(yōu)秀的爬蟲(chóng)應(yīng)該具有:明確的爬取目標(biāo)、高效的爬取策略、有效的前置后后置處理以及快速的運(yùn)行速度,針對(duì)4個(gè)要求,本節(jié)設(shè)計(jì)了符合“計(jì)量自動(dòng)化系統(tǒng)”的爬蟲(chóng)架構(gòu),共4個(gè)模塊,分別為用戶基本行為模塊、數(shù)據(jù)導(dǎo)出模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)存儲(chǔ)模塊,總結(jié)如下:
用戶基本行為模塊負(fù)責(zé)完善點(diǎn)擊,查找元素等在Selenium中的基本行為,通過(guò)捕抓異常的方式讓代碼不會(huì)因?yàn)橐淮雾?yè)面點(diǎn)擊失敗或者導(dǎo)出超時(shí)等原因而停止后續(xù)的操作,使得代碼具有強(qiáng)有力的生命力,在電力系統(tǒng)中,該模塊可以保證數(shù)據(jù)的正常導(dǎo)出,是下面3個(gè)模塊的基礎(chǔ),保證了Selenium爬蟲(chóng)的穩(wěn)定性,點(diǎn)擊模塊的流程圖如圖5所示。
數(shù)據(jù)導(dǎo)出模塊負(fù)責(zé)進(jìn)入到電力系統(tǒng)中導(dǎo)出按鈕所對(duì)應(yīng)的框架中,并點(diǎn)擊導(dǎo)出數(shù)據(jù)按鈕,數(shù)據(jù)處理模塊負(fù)責(zé)將導(dǎo)出的Excel按照用戶的需求挑選出所需的行或者列,保持與后續(xù)數(shù)據(jù)上傳的接口與數(shù)據(jù)列名的一致性,并剔除不需要的數(shù)據(jù),減少內(nèi)存的占用,數(shù)據(jù)存儲(chǔ)模塊則是將處理好的Excel以前一天的時(shí)間命名,并保存到對(duì)應(yīng)的文件夾中。
以上三個(gè)步驟配合用戶基本行為模塊可以實(shí)現(xiàn)完整的電力系統(tǒng)的數(shù)據(jù)導(dǎo)出,最終得到包含各行業(yè)售電量情況、東莞電量分布情況在內(nèi)的19個(gè)Excel,以各行業(yè)售電量情況為例。流程圖和結(jié)果如圖6、圖7所示。
最后為了使代碼更整潔高效,將每一個(gè)文件的導(dǎo)出代碼封裝成一個(gè)函數(shù),再將函數(shù)放到類(lèi)下面,建立main.py文件,在文件內(nèi)進(jìn)行類(lèi)的實(shí)例化和類(lèi)函數(shù)的調(diào)用,并通過(guò)建立定時(shí)任務(wù)的方式,使得Selenium爬蟲(chóng)能自動(dòng)導(dǎo)出所需要的文件。
3.2? 結(jié)果對(duì)比
由圖8、圖9可以發(fā)現(xiàn),通過(guò)Selenium爬蟲(chóng)的方式模擬人工進(jìn)行數(shù)據(jù)導(dǎo)出的結(jié)果在數(shù)據(jù)的排版上會(huì)優(yōu)于網(wǎng)頁(yè)爬蟲(chóng),同時(shí)也可以保持?jǐn)?shù)據(jù)編碼與原數(shù)據(jù)一致,并且使用Selenium也可以省略網(wǎng)頁(yè)分析,正則表達(dá)式提取等其他爬蟲(chóng)所需結(jié)合的提取方式,減少了運(yùn)行所需的時(shí)間,提高了效率。
4? 結(jié)? 論
通過(guò)Python和Selenium設(shè)計(jì)了一套符合電力系統(tǒng)網(wǎng)頁(yè)特點(diǎn)的爬取、上傳的架構(gòu),將用戶行為都封裝成了函數(shù)的形式,通過(guò)調(diào)用這些簡(jiǎn)單的用戶行為函數(shù)實(shí)現(xiàn)每一個(gè)文件的導(dǎo)出,并將這些函數(shù)定義為類(lèi),在main.py文件中可以通過(guò)類(lèi)來(lái)調(diào)用每一個(gè)函數(shù),實(shí)現(xiàn)每一個(gè)文件的導(dǎo)出,在有需要的時(shí)候也可以單獨(dú)調(diào)用類(lèi)函數(shù)導(dǎo)出數(shù)據(jù),經(jīng)過(guò)多次實(shí)驗(yàn),以導(dǎo)出的方式提取數(shù)據(jù),結(jié)果將優(yōu)于使用網(wǎng)頁(yè)爬蟲(chóng),并且在導(dǎo)出數(shù)據(jù)時(shí)可以關(guān)閉屏幕。
參考文獻(xiàn):
[1] 安子建.基于Scrapy框架的網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)與數(shù)據(jù)抓取分析 [D].長(zhǎng)春:吉林大學(xué),2017.
[2] 樊濤,趙征,劉敏娟.基于Selenium的網(wǎng)絡(luò)爬蟲(chóng)分析與實(shí)現(xiàn) [J].電腦編程技巧與維護(hù),2019(9):155-156+170.
[3] 花君林.基于Selenium的Python網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn) [J].電腦編程技巧與維護(hù),2017(15):30-31+36.
[4] 杜彬.基于Selenium的定向網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn) [J].金融科技時(shí)代,2016(7):35-39.
[5] 劉洋,田儒賢,唐蘭文.基于WebDriver技術(shù)的定向網(wǎng)絡(luò)爬蟲(chóng)研究 [J].電腦知識(shí)與技術(shù),2020,16(3):34-36.
[6] 陳清.基于Python的網(wǎng)站爬蟲(chóng)應(yīng)用研究 [J].通訊世界,2020,27(1):202-203.
[7] 樓姍姍.大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)探討 [J].決策探索(中),2019(11):92.
[8] 朱梓熙,吳文慶.一種智能自動(dòng)獲取信息的方法——以獲取養(yǎng)老機(jī)構(gòu)信息為例 [J].科技創(chuàng)新發(fā)展戰(zhàn)略研究,2020,4(1):47-51.
[9] 莊文龍,陳惠娟.基于Selenium2的自動(dòng)化測(cè)試應(yīng)用 [J].福建電腦,2019,35(8):89-91.
[10] 李瑞,徐家喜.基于selenium2的自動(dòng)化測(cè)試系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) [J].福建電腦,2018,34(7):26-27+2.
[11] 馮晶晶.基于Selenium的Web自動(dòng)化測(cè)試框架的設(shè)計(jì)與實(shí)現(xiàn) [D].北京:北京工業(yè)大學(xué),2018.
[12] 劉瑾.Web系統(tǒng)Selenium WebDriver自動(dòng)化測(cè)試框架搭建 [J].電子技術(shù)與軟件工程,2017(21):171-172.
作者簡(jiǎn)介:余凱(1978-),男,漢族,廣東湛江人,電力工程師,本科,研究方向:電力營(yíng)銷(xiāo)。