王鴻偉
(泉州師范學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,福建 泉州 3 6 2 0 0 0)
基于JerichoHTMLParser的html信息抽取
王鴻偉
(泉州師范學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,福建 泉州 3 6 2 0 0 0)
對web頁面上的信息抽取,一般采基于DOM或SAX的解析方式對信息進(jìn)行解析.面對非結(jié)構(gòu)化的html,無論使用DOM或SAX,都有其不足之處.本文對比DOM、SAX的解析方式,介紹一種開源的JerichoHTMLParser解析方式,其在對html頁面信息進(jìn)行直接解析時(shí),可以獲得一個(gè)比較好的解析效果.最后,用實(shí)驗(yàn)證明基于JerichoHTMLParser解析方式,對html頁面信息解析的可靠性和有效性.
DOM;SAX;JerichoHTMLParser;信息抽取
伴隨I n t e r n e t的發(fā)展,web已經(jīng)成為一個(gè)海量的信息庫.但web頁面上充斥著大量的無用信息,如廣告信息、廣告連接、圖片等,使得web上用戶關(guān)心的有用信息被大量的無用信息所掩蓋.整個(gè)I n t e r n e t正面臨著信息爆炸而有用知識相對缺乏的尷尬的境地.web信息抽取技術(shù)的出現(xiàn)和發(fā)展,則為從特定web頁面上抽取用戶關(guān)心的數(shù)據(jù),提供了一個(gè)有效的途徑.
目前,web頁面上大量的信息都以Html或XML這兩種語言發(fā)來發(fā)布,存在Html和XML并存的局面.對web頁面信息的抽取,就轉(zhuǎn)換成對Html和XML文檔的解析.
最常用的兩種解析方式有基于DOM和S A X的解析.而本文將介紹一種基于J e r i c h o Html P a r s e r的解析方式,并利用J e r i c h o Html P a r s e r實(shí)現(xiàn)對指定web頁面上的有用信息進(jìn)行抽取.
2.1 DOM解析方式
DOM是文檔對象模型(Document O b j e c t M o d e l)的縮寫,根據(jù)W3 CDOM規(guī)范,DOM是一種與瀏覽器、平臺、語言無關(guān)的接口.實(shí)際上DOM就是以樹為基礎(chǔ)處理XML及H T M L文件的一套A P I.
在H T M LDOM下,H T M L文檔中的所有節(jié)點(diǎn)組成了一個(gè)文檔樹(或節(jié)點(diǎn)樹).H T M L文檔中的每個(gè)元素、屬性、文本等都代表著樹中的一個(gè)N o d e(節(jié)點(diǎn)).樹起始于文檔節(jié)點(diǎn),并由此繼續(xù)伸出枝條,直到處于這棵樹最低級別的所有文本節(jié)點(diǎn)(葉子節(jié)點(diǎn))為止.利用DOM中的N o d e對象,開發(fā)人員可以對文檔進(jìn)行讀取、搜索、修改、添加和刪除等操作.因此,該解析方式也被稱為文檔驅(qū)動型的方式.
DOM方式進(jìn)行解析的優(yōu)缺點(diǎn):
優(yōu)點(diǎn) 整個(gè)文檔被放入內(nèi)存并解析成為一個(gè)樹結(jié)構(gòu)后,遍歷簡單訪問.開發(fā)人員可以方便的對文檔進(jìn)行讀取、搜索、修改、添加和刪除等操作.因此,DOM的解析方式提供了一種操作上的便利性.
缺點(diǎn) 效率低,解析速度慢,內(nèi)存占用量過高.被解析的文檔被讀入內(nèi)存后,要在內(nèi)存中創(chuàng)建DOM樹,以生成DOM樹上的每個(gè)N o d e對象.這時(shí)其占用的內(nèi)存的大小,要比其源文檔的容量來的大得多.當(dāng)文檔比較小的時(shí)候,這不會造成什么問題.一旦文檔大起來,處理DOM就會變得相當(dāng)費(fèi)時(shí)費(fèi)力.特別是其對于內(nèi)存的需求,也將是成倍的增長.效率低還表現(xiàn)在需要消耗大量的時(shí)間,這時(shí)因?yàn)槭褂肈OM進(jìn)行解析時(shí),將為文檔的每個(gè)element、attribute和comment都要創(chuàng)建一個(gè)對象.在DOM機(jī)制中所運(yùn)用的大量對象的創(chuàng)建和銷毀,無疑都會影響其效率.[1,2]
2.2 S A X解析方式
使用該方式對html文檔進(jìn)行解析,一般都需要先將html文檔轉(zhuǎn)化為XML文檔.因此,從html轉(zhuǎn)換為XML時(shí),轉(zhuǎn)換的效果將在很大程度上影響最終的解析效果.
S A X是XML簡易應(yīng)用程序編程接口(S i m p l eA P If o r XML)的縮寫,它并不是由W3 C官方所提出的標(biāo)準(zhǔn).其起源于互聯(lián)網(wǎng)上的XML-D E V社區(qū),是很多開發(fā)人員參與討論和開發(fā)的結(jié)果.根據(jù)討論的結(jié)果,D a v i dM e g g i n s o n于1 9 9 8年5月1 1日公布了規(guī)范的終稿.[3]
S A X最初是由D a v i dM e g g i n s o n采用J a v a語言開發(fā),之后S A X很快在J a v a開發(fā)者中流行起來.它是一種這是一種公開的、開放源代碼軟件.雖然它不是W3 C標(biāo)準(zhǔn),但它卻是一個(gè)得到了廣泛認(rèn)可的A P I.
S A X的工作原理簡單地說就是對文檔進(jìn)行順序掃描,當(dāng)掃描到文檔(d o c u ment)開始與結(jié)束、元素(e l e ment)開始與結(jié)束等地方時(shí)激活一系列事件,這些事件被推給事件處理器,然后由事件處理器提供對文檔內(nèi)容的訪問.然后繼續(xù)同樣的掃描,直至文檔結(jié)束.該處理方式稱為事件驅(qū)動型的處理方式.[4,5]
S A X方式進(jìn)行解析的優(yōu)缺點(diǎn):
優(yōu)點(diǎn) 由于以S A X方式來處理文檔時(shí),不需要將整個(gè)文件讀入內(nèi)存.而是一種讀多少處理多少、邊讀邊處理的方式.因此,其對內(nèi)存的要求較小,適合于對大型的文檔進(jìn)行處理.
缺點(diǎn) S A X采用的是單遍解析,因此不能支持隨機(jī)訪問.其次,用戶必須實(shí)現(xiàn)多個(gè)事件處理程序以便能夠處理所有到來的事件.[6]使用S A X解析器的時(shí)編碼工作會比較困難,而且很難同時(shí)訪問同一個(gè)文檔中的多處不同數(shù)據(jù).[7]當(dāng)文檔越復(fù)雜時(shí),應(yīng)用邏輯也就相應(yīng)地越復(fù)雜.
H T M L是一種顯示描述語言,它僅僅描述了web瀏覽器應(yīng)該如何在頁面上布置文字、圖形等,并沒有對I n t e m e t上最重要的東西――信息本身的含義進(jìn)行描述.通過H T M L表現(xiàn)出來的文字和圖形內(nèi)容很容易被人理解,而要計(jì)算機(jī)去理解這些標(biāo)記內(nèi)的文字的含義就很困難.[8]
本文使用的J e r i c h o H T M L P a r s e r是一個(gè)功能強(qiáng)大、操作簡單的H T M L解析器.[9]其對H T M L文檔的適應(yīng)性較好,對于結(jié)構(gòu)不好的H T M L文檔也能很好的處理.其主要是通過對標(biāo)簽的識別和文字搜索,來對H T M L中的信息進(jìn)行分析和處理.該解析器,結(jié)合了DOM和S A X的優(yōu)點(diǎn).
J e r i c h o H T M L P a r s e r不同于DOM的地方在于,其將H T M L源文件讀入內(nèi)存后,允許只對用戶感興趣的片段進(jìn)行解析和修改.并且,不需要在內(nèi)存中對整個(gè)源文件建立一個(gè)樹結(jié)構(gòu).因此,其需要的內(nèi)存和資源比較小,并且對于一些結(jié)構(gòu)比較不規(guī)范H T M L源文件,J e r i c h o H T M L P a r s e r也可以輕松的處理.
其不同于S A X的地方在于,首先,J e r i c h o H T M L P a r s e r提供了更高層次的接口供用戶直接調(diào)用,因此,用戶無需在應(yīng)用程序中逐個(gè)實(shí)現(xiàn)每個(gè)出現(xiàn)的事件所對應(yīng)的處理器.其次,其不但可以從載入的H T M L源文件中讀取信息,還能對信息進(jìn)行修改.如果有需要的話,還能對指定的信息段建立一個(gè)樹形結(jié)構(gòu),然后再對其進(jìn)行各種操作.
本文中用到的J e r i c h o H T M L P a r s e中的對象有S o u r c e、Tag、StartTag、Element、Text Extractor、H T M L Element N a m e.以下就對這些對象的功能和方法做一個(gè)簡介.
S o u r c e
J e r i c h o H T M L P a r s e r解析的第一步就是將一個(gè)H T M L文檔解析為一個(gè)S o u r c e對象.之后在從這個(gè)對象中搜索我們指定的標(biāo)簽和內(nèi)容.其常用的方法如表1所示:
表1 S o u r c e對象的主要方法
Tag
Tag對象繼承了S e g ment對象,指得是所有被“<”和“>”或“”和“>”所包含的標(biāo)簽(t a g),其常用的方法如表2所示:
表2 Tag對象的主要方法
StartTag
StartTag對象繼承了Tag對象,用于生成一對標(biāo)簽中的起始標(biāo)簽,其常用的方法如表3所示:
表3 StartTag對象的主要方法
Element
Element指的是在一對指定標(biāo)簽里邊的元素,是S e gment對象的子類,繼承了S e g m e n全部的f i n d A l l Element s()方法.其常用的方法如表4所示:
表4 Element對象的主要方法
Text Extractor
Text Extractor對象用于從H T M L標(biāo)識中抽取出文本,其常用的方法如表5所示:
表5 Text Extractor對象的主要方法
H T M L Element N a m e
H T M L Element N a m e是在H T M L4.0 1規(guī)范定義下的元素名有關(guān)的一個(gè)接口對象.
基于J e r i c h o H T M L P a r s e r設(shè)計(jì)了一個(gè)數(shù)據(jù)抽取系統(tǒng)原型,用于對淘寶網(wǎng)和百度有啊2個(gè)不同平臺上的C 2 C店鋪的銷售數(shù)據(jù)進(jìn)行抽取實(shí)驗(yàn).之后,按照召回率和準(zhǔn)確率以及抽取速度,來評價(jià)本文設(shè)計(jì)的數(shù)據(jù)抽取系統(tǒng)對此2個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)抽取的效果.
對下列多個(gè)不同的淘寶網(wǎng)店鋪的銷售記錄進(jìn)行抽取,并將抽取后的最終結(jié)果列于表6中.
對百度有啊上的店鋪,采用同樣的方法,對下列多個(gè)不同的店鋪的銷售記錄進(jìn)行抽取,并將抽取后的最終結(jié)果列于表7中.
使用有線通寬帶2 M帶寬的網(wǎng)絡(luò)環(huán)境,選擇不同的時(shí)間段和不同的線程數(shù)量,分別對淘寶和有啊上的銷售記錄進(jìn)行抽取,抽取結(jié)果如表8所示.
表6 對淘寶網(wǎng)多個(gè)不同u s e r I d的數(shù)據(jù)抽取結(jié)果
表7 對百度有啊上多個(gè)不同u s e r I d的數(shù)據(jù)抽取結(jié)果
表8 有線通數(shù)據(jù)抽取實(shí)驗(yàn)數(shù)據(jù)表
面對非結(jié)構(gòu)化的html頁面,本文設(shè)計(jì)的基于J e r ic h o H T M L P a r s e r的web數(shù)據(jù)抽取系統(tǒng)原型,可以有效的對目標(biāo)頁面上的數(shù)據(jù)進(jìn)行抽取.系統(tǒng)原型具有比較高的召回率和準(zhǔn)確率,且系統(tǒng)的數(shù)據(jù)抽取速度較為穩(wěn)定,在網(wǎng)絡(luò)帶寬和線程數(shù)量都較高的情況下,具有較高的抽取速度.基于J e r ic h o H T M L P a r s e r解析方式,可以應(yīng)用在對web上指定html頁面信息的抽取上,為進(jìn)一步對web上的信息進(jìn)行數(shù)據(jù)挖掘提供數(shù)據(jù)源.
〔1〕DOM[Z].百 度 百 科 .http://baike.baidu.com/view/14806.htm.
〔2〕W3C DOM文檔 [Z].W3C DOM 官網(wǎng).http://www.w3.org/DOM/Activity.
〔3〕Didier Martin等.XML高級編程,[M].機(jī)械工業(yè)出版社,2001.
〔4〕SAX[Z]. 百度百科.http://baike.baidu.com/view/696824.htm.
〔5〕SAX 文檔[Z].SAX 官網(wǎng).http://www.saxproject.org/copying.html.
〔6〕趙俊嵐.XML編程中的DOM與SAX技術(shù)[J].計(jì)算機(jī)工程,2004,30(2):70-72.
〔7〕張亞鵬.XML的四種解析器性能比較[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版),2007,23(2):20-21.
〔8〕雷慶,吳揚(yáng)揚(yáng).基于SAX和DOM的XML嵌套信息提取[J].計(jì)算機(jī)工程與設(shè)計(jì),2004,25(12):2308-2311.
〔9〕JerichoHTMLParser[Z].JerichoHTMLParser. 官網(wǎng) http://jerichohtml.sourceforge.net/docs/index.html.
T P 3 1 1
A
1673-260X(2010)10-0166-03