李 璟 , 吳 萍
(1.中國海洋大學 青島 266100;2.國家海洋局東海預報中心 上海 200081)
隨著海洋經濟的高速發展,各級部門、各涉海行業以及社會公眾對預報服務質量越發重視。區域范圍內海洋預報質量評估是提升各機構的預警報能力和服務水平的有效途徑,同時還有助于預報減災部門有效管理預報服務質量,對防災減災具有積極的意義。
海洋預報質量評估最直接的方法是將海洋預報數據與海洋觀測實況數據進行比較。海洋觀測數據來源廣泛,如岸基站、浮標、雷達等。隨著通訊技術的發展和數據處理技術的廣泛應用,實況觀測數據通過傳輸和處理后實時錄入到數據庫中,為預報和實況數據的比對提供及時有效的數據。但如何集中、有效地獲取區域內各預報機構的海洋預報產品是當前亟待解決的問題。
本文旨在通過分析區域內各機構海洋預報產品的數據源和提供方式,采用數據同步、Web service和數據抓取3種方式獲取預報產品,經抽取和清洗等處理后將預報區域、預報要素、預報值、預報時效等信息錄入數據庫中,為預報質量評估提供數據。
本研究的對象為東海區7家預報機構在網站上發布的海洋預報產品。從各預報產品涉及的要素以及是否有符合比對條件的實況資料兩方面進行分析。例如:預報產品有預報要素(如水溫),但可供對比的測點的實況數據里沒有該要素或是數據的連續性較差,無法進行比對,因此,不選取該產品的此項要素作為提取對象。同時,綜合考慮預報產品多要素提取的復雜性,此次研究僅選取浪高作為提取對象,由此確定從各機構提取的預報產品的預報區域和預報時效如表1所示。

表1 預報產品提取列表
綜合表1分析結果,本次研究提取的對象符合下述條件:預報區域為各機構轄區內1個以上的預報區域,預報要素為浪高,預報時效為24 h。
根據確定的研究對象,分析其所在網站發布預報產品的數據來源和提供方式,從而得出數據提取的方法。
通常情況下,網站發布數據的來源主要有兩類:(1)后臺有數據庫服務,發布頁面直接從數據庫讀取數據并顯示在頁面上;(2)后臺通過對指定文件內容進行解析并在頁面發布所得的預報數據,或是通過頁面編輯器直接將數據寫入頁面相應位置實現預報發布。
對于通過數據庫發布預報產品的,如果開放數據庫或是提供Web service接口,則可根據訪問說明文檔,直接讀取數據并寫入本地數據庫。對于通過文檔上傳或網頁編輯器方式發布預報產品的,由于后臺不具備數據庫,無法通過直接訪問的方式獲取數據。因此,需要研究其他的數據提取方法,能夠既不增加預報機構工作量同時又不影響預報發布。數據抓取在數據提取方面是一種常見的方法,技術也較為成熟,不需要發布端提供額外的數據服務,可以有效地解決如何從無數據庫的頁面獲取數據的問題。
綜上所述,結合數據來源和技術實現兩方面因素,本研究采用數據同步、Web service、數據抓取3種方式,分別針對提供數據庫開放、提供數據接口和上述兩者均不提供的3種情況,實現提取預報產品中的預報要素值。各機構預報產品的數據來源和本次研究的數據獲取方式如表2所示。

表2 預報產品的數據來源和獲取方式列表
本研究通過搭建一個預報產品集成系統(包含一組程序和服務以及一個集成數據庫)實現預報數據的自動化提取和入庫,如圖1所示。其中,程序和服務用于實現數據的同步、訪問、抓取以及錄入動作的周期性和自動化;數據庫則接收和存儲經由程序處理過的各類數據。

本研究采用主流的關系型數據庫管理系統Microsoft SQL Server搭建數據庫,用于存儲各機構的預報數據。數據庫主要包含兩張數據表:基礎信息表和預報信息表。前者用于存儲各機構預報產品的基本信息,關鍵字段包括:基礎信息編號、預報機構名稱、預報名稱、預報區域、預報要素、預報時效。后者用于存儲通過程序提取的所有預報數據,關鍵字段包括:記錄編號、預報產品編號、發布時間、預報值。兩者通過基礎信息表的基礎信息編號進行關聯,如圖2所示。

圖2 預報產品集成數據庫示意圖
根據各機構提供預報數據的方式,本研究采用數據同步、Web service、數據抓取3種方式,分別開發數據提取和入庫程序,并通過建立對應的Windows服務進行周期性運行,實現自動化和長期化的效果。
3.2.1 數據同步方式
根據對廈門預報機構網站發布的預報產品的數據來源進行分析可知,其后臺具備數據庫,并且開放數據庫訪問,因而采取數據同步的方式就可提取所需預報數據,過程如下:
1) 根據源數據庫和目標數據庫的地址、用戶名、密碼、數據庫名分別建立與兩者的連接。
2) 使用SQL語句從源數據庫表中查詢得出預報日期、發布時間、預報時效、預報區域、要素值的數據集。
3) 根據數據集中的預報時效、預報區域連同預報機構在目標數據庫中的基礎信息表得出預報產品編號,連同數據集中的發布時間和要素值寫入預報信息表。
程序采用的是ADO.NET實現數據庫讀、寫操作編程。
3.2.2 Web service方式
根據對福建和溫州兩家預報機構網站發布的預報產品的數據來源進行分析可知,兩者均具備數據庫基礎,且均提供Web service接口。因此,可以通過采用Web service方式,分別訪問兩個機構的數據接口提取到的所需預報數據。
Web service技術目前已廣泛地應用于各類信息系統開發的數據集成環節。Web service是一個可編程的Web應用程序,直觀地表現為向外部提供出一個可以被調用的API[1]。Web service的協議、接口和注冊服務可以使用松散耦合的方式協調工作[2]。服務描述自身接口的特性、參數、數據類型等但對于服務用戶而言,隱藏了實現服務的細節[2],便于程序語言、中間層組件或平臺的整合[3]。因此,Web service的實現和其所需的軟硬件平臺以及編寫服務所用的編程語言是相對獨立的。
由于本研究涉及的網站的開發語言、數據庫環境不盡相同,因此,在確定數據獲取方式時需要考慮如何規避由于網站異構造成的復雜性。Web service的應用程序具有松散耦合的特性[4],支持跨平臺和跨語言。同時,該技術具有很好的封裝性、集成性,傳輸透明,框架穩定,且發展也比較成熟。因此,采用Web service方式既可以穩定地從福建和溫州發布的數據服務中獲取到預報產品,又能夠規避由于網站異構造成的復雜性。
通過Web service方式提取產品的實現過程包括:根據兩家機構提供的接口說明文檔對訪問方法的描述,編寫程序實現預報數據集提取和對原始數據進行抽取、清理、轉換后寫入本地數據庫,流程如3所示。

圖3 Web Service方式提取數據流程圖
上述過程主要包括4個步驟:
1)獲取原始數據集:創建訪問Web service接口的實例,通過循環得到某預報單的包含所有預報區域的數據集。
2)篩選數據集:在原始數據集范圍內通過匹配預報區域關鍵字,提取目標區域的數據子集。
3)解析數據集:依次將預報區域、預報時間、預報時效、預報要素值、預報單信息等值綁定到實體并追加入目標數據集。其中預報要素值提取時需要使用正規表達式將要素數值從數據子集中解析出來。
4)寫入數據庫:將目標數據集寫入本地數據庫的預報信息表內。
3.2.3 數據抓取方式
根據對浙江、江蘇、閩東、寧波4家預報機構網站發布的預報產品的數據來源進行分析可知,其發布后臺均不具備數據庫。對于上述4家機構采用的數據獲取方式需綜合考慮對預報工作量和數據安全兩方面的影響。本研究采用的數據抓取技術可以解決此類問題。
數據抓取是搜索引擎常用的一種技術,可以智能地從網絡資源上提取可用的數據[6],為從海量的互聯網數據中獲取有用信息提供了一種便捷的途徑。數據抓取程序的基本原理是分析網頁的內容和屬性,并建立一個內容索引用于提供搜索查詢服務。程序運行過程中,逐一對網頁分析文檔內容進行信息抽取的同時,將發現的新鏈接歸入待分析隊列中,迭代遍歷預設范圍內的所有頁面[7]。抓取過程一般包括:確定抓取目標網址、分析頁面內容和結構并確定抓取規則以及借助爬網程序根據規則抓取數據3個步驟[5]。
由于數據抓取技術可以直接解析發布頁面進而獲得預報信息,不需發布方提供額外的接口或產品,因此,不會影響工作量和后臺數據安全。
通過分析4家機構預報頁面的結構和內容,確定需要抓取的發布頁面的地址形式(即固定的還是動態的)以及需要抓取的預報信息所在位置的標記特點,然后通過編程實現抓取動作,流程如圖4所示。

圖4 數據抓取方式提取數據流程圖
要實現數據抓取需要對各個頁面進行不同的數據匹配,主要包括3個步驟:
1)確定發布地址:如果地址是固定的(如:江蘇預報發布頁面),直接利用該地址進行請求解析;如果地址不是固定的(如:浙江預報發布頁面),就通過解析該頁面的上一層地址。根據時間或其他關鍵字確定當天是否有最新預報單發布,如果存在則將該地址確定為最新發布地址。
2) 獲取發布內容:為了方便數據的解析,以及保證其準確性,使用AJAX的請求方式,直接對發布地址進行請求,再將反饋內容動態寫入指定的容器內,讓瀏覽器自動進行解析,從而得到標準的文件內容,即像操作本地源代碼一樣對其解析的內容進行操作。
3)寫入數據庫:將解析后的數據集寫入本地數據庫的預報信息表內。
隨機選取2012年5月10日至6月28日為統計日期區間,對東海區7家機構的預報產品分別連續獲取49次。統計通過數據同步、Web service接口、數據抓取3種方式獲取產品的平均成功率如表3所示。

表3 預報產品獲取情況統計表
結果分析:
1)可能造成Web service接口獲取數據失敗的原因主要是被訪的服務發布不穩定或是網絡擁堵。
2)可能造成頁面數據抓取失敗的原因包括:a)被訪網站服務繁忙,引起頁面訪問超時,程序無法獲取地址或無法解析頁面,導致抓取失敗。b) 頁面文本的格式不規范或結構有變動,程序無法按原定的規則解析頁面,導致抓取失敗。
3) 3種方式各有特點:a) 數據庫直接讀取方式雖能穩定地獲取數據,但開放數據庫存在數據安全隱患。b)頁面數據抓取雖然不影響數據安全性,但欠缺靈活性,不僅要求頁面發布的格式必須規范,而且如果頁面結構改變,需要對程序進行相應調整,否則無法得到正確的數據。c) Web service接口方式既可以較穩定地獲取數據,同時也能保證數據傳輸的安全。
通過使用數據同步、Web service接口、數據抓取技術可以初步實現對東海區范圍內多家機構的海洋預報產品的集成,為今后預報質量評估所需的預報和實況集成數據庫提供預報數據來源。
數據同步和數據抓取2種方式存在一定的局限性。在今后的預報制作和發布平臺建設過程中,如果采用統一的預報發布規范和數據接口規范,既有利于域內各預報機構海洋預報產品的集成與共享,又能為海洋預報質量評估提供穩定可靠的數據來源。
[1]尹建鋒,胡宏濤.基于Web Services的數據整合在企業中的應用[J].電腦開發與應用,2010,23(1):23-24,27.
[2]龔玲,張云濤.Web服務:原理和技術[M].北京:機械工業出版社,2010.
[3]周長勝.J2EE與.NET在建置XML Web Services方面的比較[J].黑龍江信息,2008,23(3):69.
[4]文求實,陳光忠.基于Web Services的數據庫中間件在電網信息管理系統數據庫中的應用 [J].自動化技術與應用,2007,(2):71-73.
[5]蘭秋軍.互聯網金融數據抓取方法研究 [J].計算機工程與設計,2011,(5):1 829-1 832.
[6]劉志輝,許捍衛.基于Google Maps API和網絡數據抓取技術的 Web GIS 開發[J].測繪通報,2009,(3):68-70.
[7]劉繼紅,吳軍華,任明鑫.基于改進的網絡蜘蛛算法抽取Web站點結構的方法[J].江南大學學報(自然科學版),2009,(5):555-559.