文/路輝 高尚飛 李少龍
隨著現(xiàn)代信息技術(shù)的迅猛發(fā)展,互聯(lián)網(wǎng)規(guī)模的不斷擴大,尤其家庭光纖網(wǎng)絡寬帶的接入和4G移動網(wǎng)的不斷普及,新的網(wǎng)絡業(yè)務層出不窮,互聯(lián)網(wǎng)應用已經(jīng)深入到人們生活的方方面面,B/S(Browser客戶端瀏覽器/Server服務器端服務應用)技術(shù)架構(gòu)的互聯(lián)網(wǎng)網(wǎng)站由于其可直接通過瀏覽器進行網(wǎng)站訪問優(yōu)勢,是其發(fā)展及應用最為突出和廣泛?;ヂ?lián)網(wǎng)網(wǎng)站使用超文本標記語言(HTML)作為表達的信息展示www(萬維網(wǎng))網(wǎng)站,其分為客戶端瀏覽器和服務器端應用程序的開發(fā)架構(gòu)模式。目前,企事業(yè)單位內(nèi)部業(yè)務系統(tǒng)采用B/S架構(gòu)以成為系統(tǒng)建設共同遵循和采用的技術(shù)架構(gòu),廣泛應用于企業(yè)級信息管理系統(tǒng)和業(yè)務系統(tǒng)。
HTTP協(xié)議,即超文本傳輸協(xié)議(HTTPHypertext transfer protocol)是一種詳細規(guī)定了瀏覽器和萬維網(wǎng)服務器之間互相通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議。HTTP協(xié)議是一種分布式、協(xié)作式的通信協(xié)議,用戶客戶端瀏覽器與服務端web服務器的數(shù)據(jù)傳輸交互,是互聯(lián)網(wǎng)上應用層上應用最廣泛的協(xié)議。
互聯(lián)網(wǎng)網(wǎng)站主要分為信息提供和業(yè)務操作類,信息提供如新聞、股票行情之類的網(wǎng)站,業(yè)務操作如網(wǎng)上營業(yè)廳等。當然,也有很多網(wǎng)站同時具有這兩種性質(zhì),如購物網(wǎng)站、視頻網(wǎng)站等,既提供信息,也實現(xiàn)某些業(yè)務。隨著互聯(lián)網(wǎng)的飛速發(fā)展,由于基于HTTP協(xié)議傳輸?shù)腂rowser/Server模式架構(gòu)的優(yōu)勢,企業(yè)級業(yè)務系統(tǒng)采用B/S技術(shù)架構(gòu)已是通用架構(gòu)標準。B/S結(jié)構(gòu)是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種改進,在這種結(jié)構(gòu)下,軟件應用的業(yè)務邏輯完全在應用服務器端實現(xiàn),用戶表現(xiàn)完全在Web服務器實現(xiàn),客戶端只需要瀏覽器即可進行業(yè)務處理,是一種全新的系統(tǒng)構(gòu)造技術(shù)。
目前,基于B/S架構(gòu)的企業(yè)級業(yè)務系統(tǒng)實現(xiàn)系統(tǒng)間數(shù)據(jù)集成方式主要有兩種方式,一是采用接口的系統(tǒng)間數(shù)據(jù)集成,其應用最為典型和廣泛的為Web Service的服務接口應用;二是數(shù)據(jù)庫層數(shù)據(jù)庫賬號授權(quán)訪問的數(shù)據(jù)獲取集成方式。
Web Service是使用SOAP機制的XML消息傳遞,XML 是目前主流的數(shù)據(jù)交換技術(shù),它可以實現(xiàn)具有相當靈活性的、通用的數(shù)據(jù)交換接口,可以有效的解決不同應用系統(tǒng)、不同數(shù)據(jù)源之間的數(shù)據(jù)共享與交流問題,實現(xiàn)原理如圖1Web Service接口實現(xiàn)原理所示。
數(shù)據(jù)庫的賬號授權(quán)訪問是指通過在數(shù)據(jù)庫中以管理員身份權(quán)限創(chuàng)建一個新的用戶,并給其賦予相應權(quán)限的操作。典型的數(shù)據(jù)庫權(quán)限控制為Oracle數(shù)據(jù)庫,其權(quán)限為允許用戶訪問屬于其它用戶的對象或執(zhí)行程序,ORACLE系統(tǒng)提供三種權(quán)限:Object對象級、System系統(tǒng)級、Role 角色級,日常用到的為系統(tǒng)及管理權(quán)限,主要包括DBA、RESOURCE及CONNECT三種權(quán)限;然而,在業(yè)務系統(tǒng)的數(shù)據(jù)庫賬號訪問實現(xiàn)業(yè)務系統(tǒng)數(shù)據(jù)共享時,往往要精確到實體級(即數(shù)據(jù)庫表或視圖)上的select(查詢)、update(更新)、insert(插入)、delete(刪除)等具體的數(shù)據(jù)訪問控制,確保數(shù)據(jù)的安全管控。
業(yè)務系統(tǒng)的接口集成或數(shù)據(jù)庫授權(quán)訪問集成,均需要原業(yè)務系統(tǒng)進行相關(guān)改造或申請賬號及授權(quán)操作,其往往在實際工作中由于改造需項目資金支持或利益風險等原因,導致業(yè)務系統(tǒng)數(shù)據(jù)集成工作常常難以推進,影響相關(guān)業(yè)務開展工作。
互聯(lián)網(wǎng)網(wǎng)頁數(shù)據(jù)的采集通常是針對信息提供類網(wǎng)站的網(wǎng)頁數(shù)據(jù)抓取后進行分類存儲,是一個自動提取網(wǎng)頁表單數(shù)據(jù)的Web 程序?;ヂ?lián)網(wǎng)信息采集我們主要采用基于垂直搜索引擎的主題爬蟲技術(shù),對互聯(lián)網(wǎng)上的某類主題信息頁面全自動識別、分類、抓取, 并能夠?qū)崿F(xiàn)網(wǎng)頁指紋消重和信息消重, 同時對主題信息頁面進行去除無關(guān)信息和信息自動抽取。針對不同的網(wǎng)絡爬蟲采集形式,其主要實現(xiàn)原理如圖2互聯(lián)網(wǎng)數(shù)據(jù)采集基本實現(xiàn)流程所示。
網(wǎng)絡爬蟲的基本工作流程:首先選取一部分精心挑選的種子URL;再將這些URL放入待抓取URL隊列;從待抓取URL隊列中取出待抓取在URL,解析DNS,并且得到主機的ip,并將URL對應的網(wǎng)頁下載下來,存儲進已下載網(wǎng)頁庫中。此外,將這些URL放進已抓取URL隊列。最后分析已抓取URL隊列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊列,從而進入下一個循環(huán)。
圖1:Web Service接口實現(xiàn)原理
圖2:互聯(lián)網(wǎng)數(shù)據(jù)采集基本實現(xiàn)流程
基于HTTP協(xié)議的業(yè)務系統(tǒng)數(shù)據(jù)采集功能結(jié)構(gòu)設計包括采集設置、數(shù)據(jù)采集、任務調(diào)度及數(shù)據(jù)存儲4部分。數(shù)據(jù)采集結(jié)構(gòu)如圖3業(yè)務系統(tǒng)數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)圖所示。
圖3:業(yè)務系統(tǒng)數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)圖
數(shù)據(jù)采集設置主要要求使用者完成要采用業(yè)務系統(tǒng)的登錄操作,且需保證采集用戶是業(yè)務系統(tǒng)的合法用戶,權(quán)限滿足數(shù)據(jù)采集要求(有操作查看數(shù)據(jù)的權(quán)限),一般要求為管理員用戶角色權(quán)限,然后確定需要采集的數(shù)據(jù)頁面,即確定好采集URL地址,最后再按照要求進行采集參數(shù)設置(如采集某一年、某一地區(qū))。數(shù)據(jù)采集過程是按照任務調(diào)度的分發(fā)進行數(shù)據(jù)采集執(zhí)行,核心操作為按照采集參數(shù)設置,組裝HTTP協(xié)議請求報文向后臺應用服務請求,后端服務監(jiān)聽到前端請求后作出響應并返回數(shù)據(jù),采集程序再接到返回數(shù)據(jù)后按照數(shù)據(jù)解析規(guī)則進行數(shù)據(jù)解析,整個采集過程都將進行URL隊列的管理及采集日志記錄;數(shù)據(jù)采集過程最后把采集并解析的業(yè)務數(shù)據(jù)、任務調(diào)度的URL隊列信息及采集日志統(tǒng)一存儲至數(shù)據(jù)庫表中。
基于HTTP協(xié)議的業(yè)務系統(tǒng)數(shù)據(jù)采集原理如圖4數(shù)據(jù)采集基本流程圖所示,核心步驟主要包括HTTP協(xié)議請求報文、HTTP響應報文及數(shù)據(jù)解析過程。
根據(jù)系統(tǒng)數(shù)據(jù)采集采集操作、數(shù)據(jù)采集、任務調(diào)度及數(shù)據(jù)存儲4部分功能結(jié)構(gòu)相關(guān)關(guān)系,系統(tǒng)總體流程執(zhí)行如下:
(1)以業(yè)務系統(tǒng)的合法、權(quán)限滿足用戶賬號登錄相應業(yè)務系統(tǒng),確定需要采集數(shù)據(jù)的頁面URL地址,通常業(yè)務系統(tǒng)架構(gòu)多數(shù)采用框架進行的多頁面集成,所以采集頁面對應的URL地址一般為數(shù)據(jù)查詢列表的查詢按鈕事件連接。
(2)按照采集頁面的查詢參數(shù)進行采集參數(shù)設置,如時間、區(qū)域等參數(shù),一般為全數(shù)據(jù)采集,確定參數(shù)后進行進行HTTP請求報文(從客戶向服務器發(fā)送的請求報文)組裝,HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)4個部分組成。
圖4:數(shù)據(jù)采集基本流程圖
(3)組裝好請求報文后,客戶端向服務的發(fā)送報文請求,其根本操作就是按照請求報文內(nèi)容的請求對應的URL地址發(fā)送去搬過去,URL地址和報文頭的Host屬性組成完整的請求URL。
(4)服務器端的響應報文,系統(tǒng)后臺服務按照客戶端請求返回響應報文,HTTP響應也由三個部分組成,分別是:狀態(tài)行(statusline)、 消 息 報 頭(headers)、 響 應 正 文(response-body)。
(5)頁面表單數(shù)據(jù)解析操作就是針對響應報文返回的響應正文進行數(shù)據(jù)解析,一般簡單時直接用正則表達式對整個響應報文進行匹配提取出對應信息,但我們業(yè)務系統(tǒng)的數(shù)據(jù)庫內(nèi)容一般都是批量操作的,返回的數(shù)據(jù)均是整個數(shù)據(jù)庫中存儲對應數(shù)據(jù)表的全量數(shù)據(jù),所以用解析HTML的方法解析。
(6)數(shù)據(jù)解析完畢后,按照業(yè)務列表即表頭標識把對應列頁面數(shù)據(jù)存儲至數(shù)據(jù)庫中,同時進行相關(guān)日志記錄,并把采集的URL地址及參數(shù)信息同時記錄存儲至數(shù)據(jù)庫日志表中。
(7)重復以上步驟(2)-(6),直至數(shù)據(jù)采集完畢,則數(shù)據(jù)采集程序結(jié)束。
在數(shù)據(jù)采集過程中,由于目前很多業(yè)務系統(tǒng)為了數(shù)據(jù)響應的及時性,會按照頁面列表顯示的條數(shù)進行指定數(shù)據(jù)行數(shù)的返回,此時要特別注意進行“下一頁”的URL繼續(xù)采集,直至“最后一頁”采集完畢。
HTTP響應報文數(shù)據(jù)解析主要是對響應正文(response-body)內(nèi)容進行解析,其內(nèi)容為標準的HTML標記語言格式,由規(guī)范的
HTML標簽組成,數(shù)據(jù)解析主要針對標簽內(nèi)容。營銷管理系統(tǒng)中查詢轉(zhuǎn)變用戶清單時,顯示如圖5營銷管理系統(tǒng)轉(zhuǎn)變用戶清單列表圖系統(tǒng)列表界面所示。
分析報文中的的標簽內(nèi)部內(nèi)容其內(nèi)部嵌套有標簽,詳細標簽內(nèi)容如下:
圖5:營銷管理系統(tǒng)轉(zhuǎn)變用戶清單列表圖
依據(jù)其標簽規(guī)范,我可以發(fā)現(xiàn)其列表內(nèi)容均為標簽的內(nèi)集合里面,并根據(jù)其內(nèi)部的標簽獲取對應的列值。在解析數(shù)據(jù)時,首先遍歷集合,其次嵌套遍歷標簽集合,同時按照一定的規(guī)則規(guī)律過濾掉不符合的
另外,pathon語言提供的許多工具可以行輕松的HTTP協(xié)議的響應報文內(nèi)容解析操作,如導入beautifulsoup4庫,可以把HTTP響應報文格式為HTML文檔,遍歷此文檔,可以從中挑選出特定的標簽;導入re(正則)庫可以很容易的實現(xiàn)和正則相關(guān)的驗證。例如,判斷一個字符串是否可以匹配某個正則表達式、從一個字符串中找出所有的能夠匹配的字符串等。
數(shù)據(jù)存儲前需要進行對應數(shù)據(jù)庫表的設計,表名可按照業(yè)務系統(tǒng)列表內(nèi)容進行命名,數(shù)據(jù)庫字段名則按照業(yè)務系統(tǒng)列表值的分析,可以直接按照列表頁面(圖5營銷管理系統(tǒng)轉(zhuǎn)變用戶清單列表圖)的列表頭(如序號、用戶編號、用戶名稱等)進行表字段名的直接英文翻譯命名。后續(xù)按照開發(fā)的應用進行數(shù)據(jù)的直接插入數(shù)據(jù)庫表中進行存儲,實現(xiàn)業(yè)務系統(tǒng)頁面數(shù)據(jù)的獲取,為下一步的數(shù)據(jù)集成共享提供對應業(yè)務系統(tǒng)的數(shù)據(jù)支撐。
本文對基于HTTP協(xié)議的業(yè)務系統(tǒng)網(wǎng)頁數(shù)據(jù)采集做頂層的研究與設計,并結(jié)合電力營銷管理系統(tǒng)進行數(shù)據(jù)的抓取和解析分析,為基于B/S架構(gòu)的業(yè)務系統(tǒng)不通過接口或數(shù)據(jù)庫直接訪問的方式實現(xiàn)系統(tǒng)間的數(shù)據(jù)集成共享,有效解決因業(yè)務系統(tǒng)間安全規(guī)范、網(wǎng)絡不允許等客觀條件、或業(yè)務系統(tǒng)建設方不配合開放接口時,實現(xiàn)業(yè)務數(shù)據(jù)間的數(shù)據(jù)集成共享問題。