余凱 湯淵 黎海震 夏偉軒



摘? 要:為了從大量數據中快速,高效地提取出有用的數據以方便數據分析。利用Python語言中的Selenium庫是目前廣泛應用于爬蟲設計的一種方法,以其代碼精簡,拾取方便且效率較高等特點,應用于絕大部分企業的數據挖掘平臺中。通過應用Python和Selenium的方法實現了數據的提取,并通過使用異常捕抓、函數封裝,統一調用實現了數據的導出和上傳的自動化,結果表明使用Selenium爬蟲會優于網頁爬蟲。
關鍵詞:Selenium;異常處理;爬蟲;電力系統
中圖分類號:TP311.5? ? ? 文獻標識碼:A 文章編號: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? 引? 言
隨著大數據時代的發展,越來越多的企業意識到了數據的重要性,如何從數以億計的信息中提取出自己想要的信息,已經成為的大數據時代的必修課,爬蟲技術也應運而生,其通過設計規則,自我驅動抓取網頁信息的特點,做到了在大大減少人力消耗的前提下,提取出企業所要用的數據。通過網頁抓取后臺數據,快速解析網頁代碼達到獲取網頁元素信息和數據包的方式,在無需破壞或介入數據庫的前提下,直接從系統和頁面取得想要的信息。為各類分析挖掘提供數據源支持。
通過爬蟲獲取的各類信息紛雜,對爬蟲數據統一進行必要的分析與預處理進行數據上傳是適應業務場景的必要環節。很多企業也通過其特有的方式構建了其處理信息的平臺,將爬蟲接入這些信息平臺,使數據能夠通過后臺直觀地展現在其他應用軟件上,以此開展更多的業務場景是為企業創造數據競爭力,幫助企業適應大數據時代的重要環節,因此,如何智能化地利用科技手段實現爬蟲與信息平臺的互通十分關鍵。
1? 業務分析
在電網企業電力營銷日常工作中,需要在營銷系統、計量系統以及其管理系統之間往返使用特定數據索引進行數據提取、分析和整理后上傳到其他系統進行分析,這部分工作往往重復性高、操作流程長。為避免此類工作耗費大量時間和精力,使用爬蟲技術進行跨平臺跨系統之間的數據提取和整理,實現電力系統數據整合上傳的自動化操作。
如整合當月電量數據進行分析的工作,需要對供售電量、電量排名、電量構成、行業電量數據進行導出及上傳,需要登錄到電力系統,使用爬蟲導出當月每一天的供售電量、電量排名、電量構成、行業電量等在內的19個電力數據。
由圖1、圖2所示,對電力系統分析,發現電力系統主要由查詢部分、數據部分以及功能按鈕組成,以導出各行業售電量為例,要爬取該數據,可以通過在查詢部分中點擊查詢按鈕,再點擊行數據內數量的超鏈接,就可以預覽數據部分,最后點擊功能按鈕中的導出按鍵既可以將數據導出為如圖3所示的Excel表格,以上的步驟與Selenium爬蟲不謀而合,可以通過Selenium模擬用戶進行查詢、點擊以及導出三個行為,實現數據的自動導出。
2? Selenium介紹
2.1? Selenium原理
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7,8,9,10,11)、Mozilla Firefox、Safari,Google Chrome、Opera等,Selenium通過對瀏覽器的驅動,對對象元素進行控制,同時Selenium支持多種開發語言,比如Java、C和Python,通常會使用Python+Selenium+ Chrome/Firefox的組合來解決現有的網絡爬蟲登錄以及繞過JS和滑塊問題,目前Chrome和Firefox已經完全替代了之前的PhantomJS無界面瀏覽器,能完成所有操作又節省內存。這樣Chrome/Firefox負責渲染解析JavaScript,Selenium負責驅動瀏覽器和Python進行對接,Python負責做后期的處理,三者構成一個完整的爬蟲結構。
這樣的結構搭配,可以實現很多的操作,比如填寫表單、點擊鏈接、鼠標拖拽,鼠標點擊等,為爬蟲操作帶來極大的方便,能解決一系列人工操作的問題,為網絡爬蟲通過驗證登錄信息提供了方便,模擬瀏覽器正常流程圖,如圖4所示。
2.2? Selenium相關API
安裝Selenium命令:pip install selenium,安裝核心API后可以進行多種操作,比如窗口切換、表達操作鼠標操作等為實現模擬操作環境提供接口。在電力系統中,主要用到了5個API,分別是核心驅動模塊,訪問網址模塊,元素定位方法,網頁延時模塊,退出瀏覽器模塊,核心驅動模塊可以配合訪問網址來啟動Chrome瀏覽器并登錄電力系統,元素定位方法可以定位需要模擬點擊或者輸入的位置,以及定位網頁中點擊按鈕所在框架的位置,定位位置后通過模擬用戶點擊導出按鈕實現數據的提取,而顯式等待和隱式等待可以等待一段時間再執行下一個命令,解決由于網速等原因造成的頁面卡頓而無法定位元素位置,以及點擊導致的運行出錯問題,在導出完所需的所有數據之后可以通過退出瀏覽器模塊退出,通過以上5個API可以對電力系統實現一個效率高、穩定性強的Selenium爬蟲。
3? 具體實現
3.1? 架構設置
一個優秀的爬蟲應該具有:明確的爬取目標、高效的爬取策略、有效的前置后后置處理以及快速的運行速度,針對4個要求,本節設計了符合“計量自動化系統”的爬蟲架構,共4個模塊,分別為用戶基本行為模塊、數據導出模塊、數據處理模塊、數據存儲模塊,總結如下:
用戶基本行為模塊負責完善點擊,查找元素等在Selenium中的基本行為,通過捕抓異常的方式讓代碼不會因為一次頁面點擊失敗或者導出超時等原因而停止后續的操作,使得代碼具有強有力的生命力,在電力系統中,該模塊可以保證數據的正常導出,是下面3個模塊的基礎,保證了Selenium爬蟲的穩定性,點擊模塊的流程圖如圖5所示。
數據導出模塊負責進入到電力系統中導出按鈕所對應的框架中,并點擊導出數據按鈕,數據處理模塊負責將導出的Excel按照用戶的需求挑選出所需的行或者列,保持與后續數據上傳的接口與數據列名的一致性,并剔除不需要的數據,減少內存的占用,數據存儲模塊則是將處理好的Excel以前一天的時間命名,并保存到對應的文件夾中。
以上三個步驟配合用戶基本行為模塊可以實現完整的電力系統的數據導出,最終得到包含各行業售電量情況、東莞電量分布情況在內的19個Excel,以各行業售電量情況為例。流程圖和結果如圖6、圖7所示。
最后為了使代碼更整潔高效,將每一個文件的導出代碼封裝成一個函數,再將函數放到類下面,建立main.py文件,在文件內進行類的實例化和類函數的調用,并通過建立定時任務的方式,使得Selenium爬蟲能自動導出所需要的文件。
3.2? 結果對比
由圖8、圖9可以發現,通過Selenium爬蟲的方式模擬人工進行數據導出的結果在數據的排版上會優于網頁爬蟲,同時也可以保持數據編碼與原數據一致,并且使用Selenium也可以省略網頁分析,正則表達式提取等其他爬蟲所需結合的提取方式,減少了運行所需的時間,提高了效率。
4? 結? 論
通過Python和Selenium設計了一套符合電力系統網頁特點的爬取、上傳的架構,將用戶行為都封裝成了函數的形式,通過調用這些簡單的用戶行為函數實現每一個文件的導出,并將這些函數定義為類,在main.py文件中可以通過類來調用每一個函數,實現每一個文件的導出,在有需要的時候也可以單獨調用類函數導出數據,經過多次實驗,以導出的方式提取數據,結果將優于使用網頁爬蟲,并且在導出數據時可以關閉屏幕。
參考文獻:
[1] 安子建.基于Scrapy框架的網絡爬蟲實現與數據抓取分析 [D].長春:吉林大學,2017.
[2] 樊濤,趙征,劉敏娟.基于Selenium的網絡爬蟲分析與實現 [J].電腦編程技巧與維護,2019(9):155-156+170.
[3] 花君林.基于Selenium的Python網絡爬蟲的實現 [J].電腦編程技巧與維護,2017(15):30-31+36.
[4] 杜彬.基于Selenium的定向網絡爬蟲設計與實現 [J].金融科技時代,2016(7):35-39.
[5] 劉洋,田儒賢,唐蘭文.基于WebDriver技術的定向網絡爬蟲研究 [J].電腦知識與技術,2020,16(3):34-36.
[6] 陳清.基于Python的網站爬蟲應用研究 [J].通訊世界,2020,27(1):202-203.
[7] 樓姍姍.大數據環境下基于python的網絡爬蟲技術探討 [J].決策探索(中),2019(11):92.
[8] 朱梓熙,吳文慶.一種智能自動獲取信息的方法——以獲取養老機構信息為例 [J].科技創新發展戰略研究,2020,4(1):47-51.
[9] 莊文龍,陳惠娟.基于Selenium2的自動化測試應用 [J].福建電腦,2019,35(8):89-91.
[10] 李瑞,徐家喜.基于selenium2的自動化測試系統的設計和實現 [J].福建電腦,2018,34(7):26-27+2.
[11] 馮晶晶.基于Selenium的Web自動化測試框架的設計與實現 [D].北京:北京工業大學,2018.
[12] 劉瑾.Web系統Selenium WebDriver自動化測試框架搭建 [J].電子技術與軟件工程,2017(21):171-172.
作者簡介:余凱(1978-),男,漢族,廣東湛江人,電力工程師,本科,研究方向:電力營銷。