楊峰, 林鈺杰, 吳麗賢
(廣東電網有限責任公司 佛山供電局, 佛山 528000)
隨著電網企業開始大規模的技術改革,以進一步創新管理模式的前提下,面對每天大量的電網故障設備信息,如何加強對電網故障信息的監控,保證監控人員能最快的找到故障信息,是當前電網企業思考和解決的重要問題。但是,目前針對電力企業故障信息的篩選,大部分還是以人工篩選為主。在少量的信息面前,人工篩選還能及時處理,但電網企業每天會面臨幾十萬條,甚至上百萬條的故障信息,則會極大的增加電力企業的工作量。因此,迫切需要一種能自動對電力企業故障信息進行自動提取和識別的方法,以提高當前故障信息識別的工作效率。本文則借助當前的網絡爬蟲技術,構建一個可用于電力企業故障信息進行自動識別的搜索引擎,并對該引擎進行詳細的設計。
所謂的網絡爬蟲,是將互聯網看成是一個蜘蛛網,Spider就是在這張蜘蛛網上蜘蛛,在這個網上爬來爬去。網絡爬蟲就是通過網頁的鏈接,進而找到目標網頁。而在尋找過程中,通常是從某個網站的首頁開始,在讀取網頁的URL地址后,找到某個網頁,然后在根據這個鏈接,找到其他的網頁。由此這樣循環,直到將網站所有的網頁抓取完。網絡爬蟲實現的具體流程如圖1所示。
本系統構建的主要目的是實現對電力企業監控頁面中故障信息的抓取,直接識別出其中的故障網頁,進而將結果直接展示給廣大的電力監控人員,以方便監控人員對故障信息的處理。因此,在本文中首先利用爬蟲技術對網頁信息進行抓取,在抓取后通過KMP字符串匹配算法完成對目標網頁的匹配,最后通過JSON解析技術,將網頁中的關鍵信息解析出來。具體思路如圖2所示。
要實現對網頁信息的提取,主要包含兩個部分:一部分是靜態網頁,另一部分是動態網頁。在靜態網頁的抽取中,本文則主要調用Crawl類中的Injector類完成URL地址的注入,然后通過Crawl類中的Generator類,完成對采集數據列表的創建,最后調用fetcher包中的fetcher類來完成對靜態頁面的采集。

圖1 網絡爬蟲基本原理

圖2 本系統抓取思路
對動態網頁的抓取,是當前網頁解析的難點。動態頁面抓取最為關鍵的是其頁面狀態的不確定性。在Java網頁抓取過程中,頁面會通過Ajax異步加載服務器的數據,然后通過Script來實現對頁面布局的修改,從而展示數據。因此,在抓取的過程中,動態頁面往往會有多個頁面形態。爬蟲抽取的頁面,是在第一次通過HTTP訪問請求后得到的HTML數據。因此,在本文中采用兩部對網頁信息進行抽取,一步是模擬頁面腳本執行,進而得到執行后的靜態頁面信息;二步是在上述靜態頁面信息的基礎上,按照靜態頁面抽取方法對URL進行抽取。具體實現則是通過HttpBase類完成。
1) KMP算法
KMP算法是一種用戶模板與文本之間的匹配技術。KMP算法在開展文本過程工作時,其主要流程為:首先,以用戶信息需求為前提,開展用戶需求模型的構建工作;然后,借助文本流對用戶需求文本進行搜索;最后,根據用戶反饋對需求模型進行改進。具體KMP算法信息過濾模型如圖3所示。
所謂的字符串匹配,是指在給定一組特定的字符串集合T,在主串S中找到集合T在其中的所有的出現,然后按照相似度算法,當相似度超過設定的中,則判定為兩者匹配。在構建匹配規則的前提下,對字符串匹配度進行計算,如圖4所示。

圖3 KMP算法信息過濾模型

圖4 關鍵詞匹配
假設圖4中上下紅色部分的字符串匹配度表示為dw≥α,那么我們就判定兩字符串高度匹配。其中α表示為字符串匹配度閾值。
以配網臺賬管理檢索為例。傳統的方法是在問題數據庫中,通過《站線變戶一致性-功能位置饋線一致性-生產與GIS一致》表中看到全路徑“禪城供電局->城區供電所->百花變電站->701百花甲線”,然后人工逐個路徑點擊進去到最后一個低壓斷路器的設備,再去查看臺賬。具體如圖5所示。

圖5 配網臺賬查看
在本文中,則利用java的jsoup頁面解析技術和數據抓取技術來實現不需要人工點擊直接打開臺賬。具體步驟為:
首先,臺賬瀏覽的url為:
http://10.150.22.1/web/top/workbench/app.ac?appCode=equipment_distribution&appName=配網設備臺賬管理&tSession= 1539777699084# menuId= 6EEC715F334B42A2A1F2106E401CA036&url=/web/lcam/fwms/equipment/deviceNavi/distribution/tree
使用F12網絡分析功能,點擊項依次為禪城供電局->城區供電所->百花變電站->701百花甲線,得到每一步點擊的請求標頭和響應正文。
其次,使用java的“HttpBase”包獲取url地址,公式為:http://10.150.22.1/web/lcam/fwms/equipment/deviceNavi/distribution/tree/api/tree-child/"+"030610000000641"+"/6/0"
第三,利用KMP算法進行字符串匹配“701百花甲線”,使用jsoup解析提取出[{"title": "701百花甲線",”key": "357000000033201"中的357000000033201
解析結果:
http://10.150.22.1/web/lcam/fwms/equipment/deviceNavi/distribution/feeder/"+"357000000033201"
要實現上述引擎的設計,實現對電力企業故障信息的提取,首先要對數據進行集成。對此在本文中,結合廣東省營銷系統、省電力營銷系統的數據,采用ETL處理方法對系統數據進行構建。該框架如圖6所示。

圖6 數據源集成ETL框架
該數據源框架充分考慮電力企業中產生的海量數據,通過Hadoop框架對電力數據進行集成處理。
通過圖6看出,在該ETL數據集成中,主要是通過服務器端完成。在通過對不同網頁信息的抽取后,通過統一數據源信息管理模塊,實現對抽取數據的管理。
在完成系統的引擎搭建和數據搭建之后,還需要一個交互界面,才能實現對電力故障信息的搜索。對此,本文對用戶界面的開發環境進行搭建。具體采用Eclipse3.1+My SQL5.0+Tomcat5.5 的開發思路。其中,Eclipse開發工具具有良好的開放性,并且支持多種插件的安裝和工具包的導入。是 Java語言開發很好的選擇平臺。后面構建 web 應用程序界面時需安裝Tomcat Plugin V3 插件。
此外,本系統的開發還需要有開源蜘蛛程序包 Heritrix1.12.1和全文檢索工具包 Lucene2.0 的支持。
通過在檢索首頁的關鍵詞檢索,得到檢索后的URL,然后點擊,直接進入到經過匹配檢索后的結果界面。以上述應用的檢索結果為例,具體如圖7所示。

圖7 檢索搜索結果
通過上述的設計可以看出,本文采用的網絡爬蟲技術對網頁信息的抓取,具有準確性高,同時抓取定位效率高的特點。而本文在設計中,最大的亮點在于在匹配過程中,對傳統的KMP算法進行了改進,以此大大提高了字符串匹配的準確度。同時引入ETL抽取工具,建立有效數據庫,進而為電力故障信息的快速提取提供了新的參考。