如何不斷擴(kuò)充數(shù)據(jù)中心的數(shù)據(jù)規(guī)模,提升數(shù)據(jù)挖掘的價值,這是我們思考的問題,數(shù)據(jù)一方面來自于內(nèi)部生產(chǎn),一部分?jǐn)?shù)據(jù)可以來自于互聯(lián)網(wǎng),互聯(lián)網(wǎng)上的數(shù)據(jù)體量龐大,形態(tài)多樣,之前blog里很多FMEer已經(jīng)提出了方案,比如json,xml,正則表達(dá)式等等,但對于比較松散的HTML如何進(jìn)行數(shù)據(jù)解析提取呢?我問了一下度娘,貌似沒有FME下的文章,恰逢今天有時間,就寫一點關(guān)于HTML提取的東東,算是自己做的筆記吧!
這次我要提取的范例數(shù)據(jù)來自國土資源局土地招拍掛系統(tǒng),我要提取上面的交易結(jié)果以及地塊信息,樣式如下圖:
圖1:交易結(jié)果列表
圖2:地塊信息
圖3:轉(zhuǎn)換工程
圖4:提取后的數(shù)據(jù)
在這個轉(zhuǎn)換工程里,用到了幾個轉(zhuǎn)換器,它們是:pythonCreator,HTTPCaller,HTMLExtractor、PythonCaller、StringSearcher、StringReplacer、AttributeExposer、AttributeRenamer、AttributeRemover
本文重點介紹一下HTMLExtractor,轉(zhuǎn)換器的參數(shù)如下圖:
圖5:HTMLExtractor參數(shù)
圖上標(biāo)注的參數(shù)依次是:
1、 HTML Input:HTML的內(nèi)容來源,可以是content,表示來源于傳入的屬性、參數(shù)等,也可以是File,表示來源于一個已存在的HTML文件。
2、 HTML Content:本案例用的是content作為源,與HttpCaller連用,HTML存放于_response_body屬性中。如果是File作為源,則需要設(shè)置HTML File為文件路徑。
3、 Target Attribute:設(shè)置一個屬性(列表)名稱,這個屬性名稱將包含HTML解析的結(jié)果。
4、 CSS Selector:設(shè)置CSS選擇器,類似正則表達(dá)式,但用起來更簡單,特別適合解析HTML。
5、 Tag Part/HTML Attribute:可以設(shè)置為Value(匹配標(biāo)簽里的值)、Whole(匹配的標(biāo)簽和值)、或者輸入匹配標(biāo)簽擁有的一個屬性名稱,比如<a>標(biāo)記的href屬性。
6、 Return Format:可以設(shè)置為List Attribute,則將所有匹配的內(nèi)容作為一個list返回,如果為First Match,則僅返回第一個匹配的內(nèi)容。
舉個栗子,下面是我要匹配的交易結(jié)果HTML源文件:
<tr class="TR2" onMouseOver="this.className='TR3';" onMouseOut="this.className='TR2';">
<td height="31" align="left" class="TD1"><img src="images/arrow_yellow.gif">2</td>
<td class="TD1" align="left">BQ2-19-87</td>
<td class="TD1" align="left">國有建設(shè)用地使用權(quán)</td>
<td class="