專利名稱:一種精確提取網(wǎng)頁內(nèi)容的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體地說,尤其涉及一種精確提取網(wǎng)頁內(nèi)容的方法及系統(tǒng)。
背景技術(shù):
網(wǎng)頁數(shù)據(jù)采集技術(shù)是一種使用類似搜索引擎ROBOT的技術(shù),把互聯(lián)網(wǎng)上的文章,資料收集整理然后存儲到數(shù)據(jù)庫中以填充網(wǎng)站內(nèi)容。數(shù)據(jù)采集技術(shù)對豐富網(wǎng)站內(nèi)容,提高網(wǎng)站的流量有很大幫助。然而,現(xiàn)有技術(shù)中使用的數(shù)據(jù)采集方法大多數(shù)是使用正則表達(dá)式的方式來實(shí)現(xiàn)數(shù)據(jù)的定位和提取。使用這種方法是性能相對比較優(yōu)異,但是對于整個系統(tǒng)的維護(hù)來說卻非常不容易。要精確定位一個頁面的數(shù)據(jù),通常需要將頁面的內(nèi)容進(jìn)行分段提取,這樣寫出來的正則表達(dá)式代碼非常多,而且也難以維護(hù)。如果所要采集的頁面的標(biāo)簽稍微發(fā)生變化,那么對應(yīng)的正則表達(dá)式也需要重新調(diào)整,而整個調(diào)整卻非常耗時間。在網(wǎng)頁javascript腳本中,jquery框架所提供的標(biāo)簽選擇器能夠非常方便的篩選出頁面中的標(biāo)簽,但是它卻只能用于瀏覽器的客戶端腳本。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種精確提取網(wǎng)頁內(nèi)容的方法??蛇m用于服器端,并能通過易維護(hù)的方式精確提取網(wǎng)頁內(nèi)容。為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種精確提取網(wǎng)頁內(nèi)容的方法,經(jīng)過以下步驟實(shí)現(xiàn):
獲取URL對應(yīng)的網(wǎng)頁文檔,將所述網(wǎng)頁文檔源代碼解析成DOM結(jié)構(gòu)樹;讀取用戶輸入的篩選表達(dá)式,語法分析器加載語法表對所述篩選表達(dá)式的合法性分析并將所述篩選表達(dá)式解析成由多個詞匯組成的表達(dá)式樹;通過語義分析,將所述多個詞匯分解出篩選條件集合;所述篩選條件集合由若干個篩選條件對象組成,每個篩選條件對象由一個標(biāo)簽提取方法和若干個標(biāo)簽篩選方法組成;所述標(biāo)簽提取方法從所述DOM結(jié)構(gòu)樹中提取所述篩選條件對象指定的對象,所述標(biāo)簽篩選方法根據(jù)所述篩選條件對象附帶的標(biāo)簽過濾方法對所述標(biāo)簽提取方法所提取的對象做進(jìn)一步過濾,得出所述篩選條件對象的篩選結(jié)果,將所述篩選結(jié)果返回。進(jìn)一步地,還包括根據(jù)所述語法表的嵌套定義遍歷所述表達(dá)式樹將重復(fù)嵌套的父節(jié)點(diǎn)進(jìn)行上位合并,重組成優(yōu)化表達(dá)式樹的步驟。更進(jìn)一步地,所述重組成優(yōu)化表達(dá)式樹通過以下步驟實(shí)現(xiàn):步驟1:構(gòu)建堆棧變量STACK與結(jié)果列表LIST ;步驟2:將所述篩選表達(dá)式的節(jié)點(diǎn)壓入棧;步驟3:讀取棧頂?shù)墓?jié)點(diǎn)放入臨時變量⑶R ;
步驟4:判斷CUR的頭部標(biāo)識,當(dāng)所述頭部標(biāo)識為所述語法表所定義的非冗余節(jié)點(diǎn),將其添加到LIST中,重復(fù)第3步驟,當(dāng)其為所述語法表所定義的冗余節(jié)點(diǎn)時,繼續(xù)下一步驟;步驟5:讀取CUR當(dāng)前節(jié)點(diǎn)下的所有節(jié)點(diǎn)按照從右到左出現(xiàn)的順序依次壓入棧,然后跳轉(zhuǎn)到第3步驟繼續(xù)下一個循環(huán);步驟6:將結(jié)果列表LIST返回。進(jìn)一步地,所述標(biāo)簽提取方法是以層次關(guān)鍵字從所述DOM結(jié)構(gòu)樹中提取指定類別及關(guān)鍵字的對象。更進(jìn)一步地,所述層次關(guān)鍵字為空格、大于號、加號和波浪號;所述空格表示在給定的祖先元素下匹配所有的后代元素,所述大于號表示在給定的父元素下匹配所有的子元素,所述加號表示匹配所有緊接在prev元素后的next元素,所述波浪號表示匹配prev元素之后的所有siblings元素。進(jìn)一步地,所述解析成DOM結(jié)構(gòu)樹步驟還包括根據(jù)網(wǎng)頁文檔上所指定的<! D0CTYPE>聲明對標(biāo)簽進(jìn)行·容錯處理。更進(jìn)一步地,所述對所述篩選條件合法性分析是對所述篩選條件中的詞法與語法錯誤進(jìn)行檢測,當(dāng)出現(xiàn)錯誤時就拋出異常并終止操作。相應(yīng)地,本發(fā)明實(shí)施例還提供了一種精確提取網(wǎng)頁內(nèi)容的系統(tǒng),包括預(yù)處理模塊、表達(dá)式獲取模塊、表達(dá)式解析模塊、語義分析模塊;所述預(yù)處理模塊獲取URL對應(yīng)的網(wǎng)頁文檔,將其解析成DOM結(jié)構(gòu)樹;所述表達(dá)式獲取模塊讀取用戶輸入的篩選表達(dá)式;所述表達(dá)式解析模塊加載語法表對所述篩選表達(dá)式解析成由多個詞匯組成的表達(dá)式樹,并根根據(jù)所述語法表的嵌套定義遍歷所述表達(dá)式樹將重復(fù)嵌套的父節(jié)點(diǎn)進(jìn)行上位合并,重組成優(yōu)化表達(dá)式樹;所述語義分析模塊將所述表達(dá)式樹分解出篩選條件集合,所述篩選條件集合由若干個篩選條件對象組成,每個篩選條件對象由一個標(biāo)簽提取方法和若干個標(biāo)簽篩選方法組成;所述標(biāo)簽提取方法從所述DOM結(jié)構(gòu)樹中提取所述篩選條件對象指定的對象,所述標(biāo)簽篩選方法根據(jù)所述篩選條件對象附帶的標(biāo)簽過濾方法對所述標(biāo)簽提取方法所提取的對象做進(jìn)一步過濾,得出所述篩選條件對象的篩選結(jié)果,將所述篩選結(jié)果返回。進(jìn)一步地,所述預(yù)處理模塊還包括容錯處理單元,用于根據(jù)網(wǎng)頁文檔上所指定的<!D0CTYPE>聲明對DOM結(jié)構(gòu)樹中的標(biāo)簽進(jìn)行容錯處理。更進(jìn)一步地,所述表達(dá)式獲取模塊還包括篩選條件合法性分析單元,用于對所述篩選條件中的詞法與語法錯誤進(jìn)行檢測,當(dāng)出現(xiàn)錯誤時就拋出異常并終止操作。實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:通過將目標(biāo)網(wǎng)頁文檔生成DOM結(jié)構(gòu)樹,并對用戶輸入的篩選表達(dá)式解析成表達(dá)式樹,并通過語義分析組成多個篩選條件對象的集合,從而實(shí)現(xiàn)對DOM文檔樹節(jié)點(diǎn)的采集定位和快速篩選。使用本發(fā)明有利于提高開發(fā)效率、降低維護(hù)成本。
圖1是本發(fā)明示出一個未優(yōu)化的SelectorBlocks子樹的示意圖2是將圖1中的表達(dá)式樹優(yōu)化的結(jié)果的示意圖;圖3是實(shí)施例1中未經(jīng)優(yōu)化的表達(dá)式樹的示意圖;圖4是將實(shí)施例1的表達(dá)式樹進(jìn)行優(yōu)化后的示意圖;圖5是實(shí)施例2中未經(jīng)優(yōu)化的表達(dá)式樹的示意圖;圖6是示出可將實(shí)施例2中未經(jīng)優(yōu)化的表達(dá)式樹優(yōu)化后的結(jié)構(gòu)示圖;圖7是將實(shí)施例2的表達(dá)式樹進(jìn)行優(yōu)化后的示意圖;圖8是本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述。本發(fā)明的精確提取網(wǎng)頁的方法,是根據(jù)URL獲取得到對應(yīng)的網(wǎng)頁文檔,將該網(wǎng)頁文檔源代碼信息解析成DOM結(jié)構(gòu)樹,并根據(jù)網(wǎng)頁文檔中的〈!D0CTYPE〉聲明對標(biāo)簽進(jìn)行容錯處理。DOM結(jié)構(gòu)樹是一棵標(biāo)簽樹,反應(yīng)了網(wǎng)頁的結(jié)構(gòu)信息,為了簡化采集定位,提高開發(fā)效率,本發(fā)明引入了對用戶輸入的篩選表達(dá)式進(jìn)行優(yōu)化并且定義了標(biāo)簽提取方法來提升網(wǎng)頁內(nèi)容的精確提取。讀取用戶輸入的篩選表達(dá)式,逐個進(jìn)行解析成由多個詞匯組成的表達(dá)式樹,在解析過程中如果出現(xiàn)詞法錯誤(Lexical Error)或者語法錯誤(Syntax Error)就拋出異常,并終止操作。 例如當(dāng)語法表定義包含如下時:<SelectorBlocks>::=〈SelectorBlocks>,, ’〈Selectors〉I〈Selectors〉表示〈SelectorBlocks〉是由多個〈Selectors〉組成,在未重構(gòu)前的表達(dá)式樹會形成多個冗余嵌套的SelectorBlocks子樹,如圖1所示,這時將這些冗余嵌套的子樹進(jìn)行上位合并優(yōu)化將可使后續(xù)的語義分析步驟更為方便處理,優(yōu)化后表達(dá)式樹結(jié)構(gòu)如圖2所示的示意圖,具體優(yōu)化處理步驟為:遍歷整個表達(dá)式樹,經(jīng)以下步驟進(jìn)行表達(dá)式重組成優(yōu)化表達(dá)式樹:步驟1:構(gòu)建堆棧變量STACK與結(jié)果列表LIST ;步驟2:將所述表達(dá)式的節(jié)點(diǎn)壓入棧;步驟3:讀取棧頂?shù)墓?jié)點(diǎn)放入臨時變量⑶R ;步驟4:判斷⑶R的頭部標(biāo)識,當(dāng)所述頭部標(biāo)識為〈Selectors〉節(jié)點(diǎn)時,將其添加到LIST中,重復(fù)第3步驟,當(dāng)其為〈SelectorBlocks〉節(jié)點(diǎn)時,繼續(xù)下一步驟;步驟5:讀取QJR的所有子節(jié)點(diǎn)并篩選出〈SelectorBlocks〉和〈Selecor〉節(jié)點(diǎn),按照從右到左出現(xiàn)的順序依次壓入棧,然后跳轉(zhuǎn)到第3步驟繼續(xù)下一個循環(huán);步驟6:將結(jié)果列表LIST返回。當(dāng)生成優(yōu)化表達(dá)式樹后,對優(yōu)化表達(dá)式遍歷,分解出篩選條件集合,篩選條件集合由若干個篩選條件對象組成;篩選條件集合LIST= [Cl,C2,...,Cn];篩選條件對象Cn由一個標(biāo)簽提取方法A和多個標(biāo)簽篩選方法[Fl,F(xiàn)2,…,F(xiàn)n]組成,即:篩選條件對象Cn= [A, Fl,F(xiàn)2...Fn];其中,標(biāo)簽提取方法A是根據(jù)語法所定義的層次(hierarchy)關(guān)鍵字決定。以JQuery為例,層次的關(guān)鍵字有四種,分別為:I)空格“〈SPACE〉”表示在給定的祖先元素下匹配所有的后代元素;2)大于號“〉”表示在給定的父元素下匹配所有的子元素;3)加號“ + ”表示匹配所有緊接在prev元素后的next元素;4)波浪號“ ”表示匹配prev元素之后的所有siblings元素。要構(gòu)建篩選條件集合則必需遍歷表達(dá)式樹或優(yōu)化的表達(dá)式樹,對應(yīng)成多個篩選條件對象,最終數(shù)據(jù)如下:LIST= [Cl,C2,…,Cn]C=[A,F(xiàn)1,F2—Fn]。根據(jù)上述的過濾條件,利用標(biāo)簽提取方法A從DOM結(jié)構(gòu)樹中預(yù)先過濾出指定的篩選元素,在從結(jié)果中通過標(biāo)簽篩選方法Fn篩選網(wǎng)頁內(nèi)容。以下將給出兩個具體實(shí)施例進(jìn)行補(bǔ)充說明。實(shí)施例1:當(dāng)用戶輸入指令為“INPUT, SELECT, TEXTAREA, IMG"時,所表示的含義為查找頁面中所有的 INPUT、SELECT、TEXTAREA、IMG 標(biāo)簽。系統(tǒng)通過詞法分析將構(gòu)成如圖3所示的完整的未經(jīng)過優(yōu)的表達(dá)式樹。而在語法表〈SelectorBlocks〉塊中定義如下:〈SelectorBlocks〉::=〈SelectorBlocks>,,,〈Selectors〉!〈Selectors〉其含義表示〈SelectorBlocks〉一個或多個〈Selectors〉所組成,之間使用逗號“,”隔開。在未優(yōu)化前,語法樹中所呈現(xiàn)的節(jié)點(diǎn)是嵌套的,可表示如下:INPUT, SELECT, TEXTAREA, IMG=(INPUT, SELECT, TEXTAREA) + (IMG)INPUT, SELECT, TEXTAREA=(INPUT, SELECT) + (TEXTAREA)INPUT, SELECT=(INPUT) + (SELECT)
SELECT= (SELECT)上述的格式不利于語法分析,需要將節(jié)點(diǎn)優(yōu)化成以下利于語法分析的優(yōu)化表達(dá)式樹:INPUT, SELECT, TEXTAREA, IMG=(INPUT) + (SELECT) + (TEXTAREA) + (IMG)優(yōu)化后的表達(dá)式樹如圖4所示示意圖。通過語義分析,為每個〈selectors〉節(jié)點(diǎn)構(gòu)建出篩選條件對象:第一個〈Seletors〉節(jié)點(diǎn)構(gòu)建出的篩選條件對象Cl為:A=提取頁面中的所有標(biāo)簽;Fl=過濾出INPUT標(biāo)簽;第二個〈Seletors〉節(jié)點(diǎn)構(gòu)建出的篩選條件對象C2為:A=提取頁面中的所有標(biāo)簽;
Fl=過濾出 SELECT 標(biāo)簽;第三個〈Seletors〉節(jié)點(diǎn)構(gòu)建出的篩選條件對象C3為:A=提取頁面中的所有標(biāo)簽; Fl=過濾出 TEXTAREA 標(biāo)簽;第四個〈Seletors〉節(jié)點(diǎn)構(gòu)建出的篩選條件對象C4為:A=提取頁面中的所有標(biāo)簽;Fl=過濾出MG標(biāo)簽;執(zhí)行過濾,通過傳入文檔樹DOM的根節(jié)點(diǎn),分別傳入四個〈Selecors〉節(jié)點(diǎn)所構(gòu)建出來的篩選條件對象C中的A方法,然后執(zhí)行對應(yīng)的過濾方法F1,并將執(zhí)行后的四個結(jié)果合并,最終取出文檔中所有的INPUT、SELECT、TEXTAREA、IMG標(biāo)簽。實(shí)施例2:當(dāng)用戶輸入表達(dá)式為“DIV.a>IMG.b[alt] ”時,表示的含義為先查找頁面中有樣式名為a的DIV標(biāo)簽,然后在篩選出子元素中樣式名為b,并且包含有alt屬性的MG標(biāo)簽。系統(tǒng)通過詞法分析將構(gòu)成如圖5所示的完整的未經(jīng)過優(yōu)的表達(dá)式樹。在語法表〈Selectors〉塊中定義如下:〈Selectors〉:: =<SelectorsXHierarchySplitterXFilter>
I <HierarchySplitterXFilter><HierarchySplitter>::=' >' | ’+’ |’ ’其含義表示〈Selectors〉是由一個或多個〈Filter〉所組成,之間使用層次分割符隔開,層次分割符有三種,分別是“>”,“ +,,,“ ”。在解析jquery語法時,另外一種分割符是一個或多個空白符,遇到這種情況需要判斷該節(jié)點(diǎn)是否含有空白符,有則保留,否則將移除。對于以上節(jié)點(diǎn)可以優(yōu)化為如圖6所示示意圖,優(yōu)化后的節(jié)點(diǎn)結(jié)構(gòu)如圖7所示。通過語義分析將構(gòu)建出以下兩個篩選條件對象:篩選條件對象Cl:A=提取頁面中的所有標(biāo)簽Fl=過濾出DIV標(biāo)簽F2=過濾出包含樣式名為a的標(biāo)簽篩選條件對象C2:A=在篩選條件對象Cl所篩選出的結(jié)果中查找子元素(不包含子元素的后代)Fl=過濾出MG標(biāo)簽F2=過濾出包含樣式名為b的標(biāo)簽F3=過濾出包含屬性alt的標(biāo)簽。通過傳入DOM結(jié)構(gòu)樹的根節(jié)點(diǎn),先執(zhí)行Cl的方法A提取出所有的標(biāo)簽,然后遍歷該結(jié)果,每遍歷一個標(biāo)簽都需要調(diào)用Cl中F1、F2方法。從而取得集合R1。將Rl傳入第二個篩選條件對象C2,執(zhí)行C2的方法A提取出所有子元素,然后遍歷該結(jié)果,每遍歷一次標(biāo)簽都需要調(diào)用C2中的F1、F2、F3,從而取得最終的結(jié)果。本發(fā)明實(shí)施例提供了一種精確提取網(wǎng)頁內(nèi)容的系統(tǒng),包括預(yù)處理模塊、表達(dá)式獲取模塊、表達(dá)式解析模塊、語義分析模塊。預(yù)處理模塊從URL獲取得到對應(yīng)的網(wǎng)頁文檔,將該網(wǎng)頁文檔源代碼信息解析成DOM結(jié)構(gòu)樹,并根據(jù)網(wǎng)頁文檔中的〈!D0CTYPE〉聲明對標(biāo)簽進(jìn)行容錯處理。表達(dá)式獲取模塊讀取用戶輸入的篩選表達(dá)式,如果出現(xiàn)詞法錯誤(LexicalError)或者語法錯誤(Syntax Error)就拋出異常,并終止操作。表達(dá)式解析模塊加載語法表,根據(jù)語法表的定義將篩選表達(dá)式逐個進(jìn)行解析成由多個詞匯組成的表達(dá)式樹,并根根據(jù)所述語法表的嵌套定義遍歷所述篩選表達(dá)式樹將重復(fù)嵌套的父節(jié)點(diǎn)進(jìn)行上位合并,重組成優(yōu)化表達(dá)式樹,優(yōu)化過程上述已說明,在此不做重復(fù)說明。語義分析模塊將表達(dá)式樹或優(yōu)化的表達(dá)式樹進(jìn)行分解出篩選條件集合。所述篩選條件集合LIST由若干個篩選條件對象Cn組成,每個篩選條件對象Cn由一個標(biāo)簽提取方法A和若干個標(biāo)簽篩選方法Fn組成;所述標(biāo)簽提取方法A從所述DOM結(jié)構(gòu)樹中提取所述篩選條件對象指定的對象,所述標(biāo)簽篩選方法Fn根據(jù)所述篩選條件對象附帶的標(biāo)簽過濾方法對所述標(biāo)簽提取方法所提取的對象做進(jìn)一步過濾,得出所述篩選條件對象的篩選結(jié)果,將所述篩選結(jié)果返回。標(biāo)簽提取方法A根據(jù)層次關(guān)鍵字作為標(biāo)簽分隔符從DOM結(jié)構(gòu)樹預(yù)先提取出所述優(yōu)化表達(dá)式樹節(jié)點(diǎn)指定的篩選元素,層次關(guān)鍵字定義為“>”,“ + ”,“ ”和空白符;空白符表示在給定的祖先元素 下匹配所有的后代元素,大于號“〉”表示在給定的父元素下匹配所有的子元素,所述加號“ + ”表示匹配所有緊接在prev元素后的next元素,所述波浪號“ ”表示匹配prev元素之后的所有siblings元素。標(biāo)簽篩選方法Fn根據(jù)篩選條件對象Cn附帶的標(biāo)簽過濾方法對標(biāo)簽提取方法A所提取的對象做進(jìn)一步過濾,得出篩選條件對象Cn的篩選結(jié)果,將所述篩選結(jié)果返回。以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,具體步驟如下: 獲取URL對應(yīng)的網(wǎng)頁文檔,將所述網(wǎng)頁文檔源代碼解析成DOM結(jié)構(gòu)樹; 讀取用戶輸入的篩選表達(dá)式,語法分析器加載語法表對所述篩選表達(dá)式的合法性分析并將所述篩選表達(dá)式解析成由多個詞匯組成的表達(dá)式樹; 通過語義分析,將所述多個詞匯分解出篩選條件集合; 所述篩選條件集合由若干個篩選條件對象組成,每個篩選條件對象由一個標(biāo)簽提取方法和若干個標(biāo)簽篩選方法組成;所述標(biāo)簽提取方法從所述DOM結(jié)構(gòu)樹中提取所述篩選條件對象指定的對象,所述標(biāo)簽篩選方法根據(jù)所述篩選條件對象附帶的標(biāo)簽過濾方法對所述標(biāo)簽提取方法所提取的對象做進(jìn)一步過濾,得出所述篩選條件對象的篩選結(jié)果,將所述篩選結(jié)果返回。
2.根據(jù)權(quán)利要求1所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,還包括根據(jù)所述語法表的嵌套定義遍歷所述篩選表達(dá)式樹將重復(fù)嵌套的父節(jié)點(diǎn)進(jìn)行上位合并,重組成優(yōu)化表達(dá)式樹的步驟。
3.根據(jù)權(quán)利要求2所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,所述重組成優(yōu)化表達(dá)式樹通過以下步驟實(shí)現(xiàn): 步驟1:構(gòu)建堆棧變量STACK與結(jié)果列表LIST ; 步驟2:將所述篩選表達(dá)式的節(jié)點(diǎn)壓入棧; 步驟3:讀取棧頂?shù)墓?jié)點(diǎn)放入臨時變量CUR ; 步驟4:判斷CUR的頭部標(biāo)識,當(dāng)所述頭部標(biāo)識為所述語法表所定義的非冗余節(jié)點(diǎn),將其添加到LIST中,重復(fù)第3步驟,當(dāng)其為所述語法表所定義的冗余節(jié)點(diǎn)時,繼續(xù)下一步驟;步驟5:讀取CUR當(dāng)前節(jié)點(diǎn)下的所有節(jié)點(diǎn)按照從右到左出現(xiàn)的順序依次壓入棧,然后跳轉(zhuǎn)到第3步驟繼續(xù)下一個循環(huán); 步驟6:將結(jié)果列表LIST返回。
4.根據(jù)權(quán)利要求1所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,所述標(biāo)簽提取方法是以層次關(guān)鍵字從所述DOM結(jié)構(gòu)樹中提取指定類別及關(guān)鍵字的對象。
5.根據(jù)權(quán)利要求4所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,所述層次關(guān)鍵字為空格、大于號、加號和波浪號;所述空格表示在給定的祖先元素下匹配所有的后代元素,所述大于號表示在給定的父元素下匹配所有的子元素,所述加號表示匹配所有緊接在prev元素后的next元素,所述波浪號表示匹配prev元素之后的所有siblings元素。
6.根據(jù)權(quán)利要求1所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,所述解析成DOM結(jié)構(gòu)樹步驟還包括根據(jù)網(wǎng)頁文檔上所指定的〈!D0CTYPE〉聲明對標(biāo)簽進(jìn)行容錯處理。
7.根據(jù)權(quán)利要求1所述的精確提取網(wǎng)頁內(nèi)容的方法,其特征在于,所述對所述篩選條件合法性分析是對所述篩選條件中的詞法與語法錯誤進(jìn)行檢測,當(dāng)出現(xiàn)錯誤時就拋出異常并終止操作。
8.一種精確提取網(wǎng)頁內(nèi)容的系統(tǒng),其特征在于,包括預(yù)處理模塊、表達(dá)式獲取模塊、表達(dá)式解析模塊、語義分析模塊; 所述預(yù)處理模塊獲取URL對應(yīng)的網(wǎng)頁文檔,將其解析成DOM結(jié)構(gòu)樹; 所述表達(dá)式獲取模塊讀取用戶輸入的篩選表達(dá)式; 所述表達(dá)式解析模塊加載語法表對所述篩選表達(dá)式解析成由多個詞匯組成的表達(dá)式樹,并根據(jù)所述語法表的嵌套定義遍歷所述篩選表達(dá)式樹將重復(fù)嵌套的父節(jié)點(diǎn)進(jìn)行上位合并,重組成優(yōu)化表達(dá)式樹; 所述語義分析模塊將所述篩選表達(dá)式樹分解出篩選條件集合,所述篩選條件集合由若干個篩選條件對象組成,每個篩選條件對象由一個標(biāo)簽提取方法和若干個標(biāo)簽篩選方法組成;所述標(biāo)簽提取方法從所述DOM結(jié)構(gòu)樹中提取所述篩選條件對象指定的對象,所述標(biāo)簽篩選方法根據(jù)所述篩選條件對象附帶的標(biāo)簽過濾方法對所述標(biāo)簽提取方法所提取的對象做進(jìn)一步過濾,得出所述篩選條件對象的篩選結(jié)果,將所述篩選結(jié)果返回。
9.根據(jù)權(quán)利要求7所述的精確提取網(wǎng)頁內(nèi)容的系統(tǒng),其特征在于,所述預(yù)處理模塊還包括容錯處理單元,用于根據(jù)網(wǎng)頁文檔上所指定的〈!D0CTYPE〉聲明對DOM結(jié)構(gòu)樹中的標(biāo)簽進(jìn)行容錯處理。
10.根據(jù)權(quán)利要求7所述的精確提取網(wǎng)頁內(nèi)容的系統(tǒng),其特征在于,所述篩選表達(dá)式獲取模塊還包括表達(dá)式合法性分析單元,用于對所述篩選表達(dá)式中的詞法與語法錯誤進(jìn)行檢測,當(dāng)出現(xiàn)錯誤時就拋出異常并終止操作。
全文摘要
本發(fā)明實(shí)施例公開了一種精確提取網(wǎng)頁內(nèi)容的方法,具體步驟為獲取URL對應(yīng)的網(wǎng)頁內(nèi)容,將所述網(wǎng)頁內(nèi)容源代碼解析成DOM結(jié)構(gòu)樹;讀取用戶輸入的篩選表達(dá)式,語法分析器加載語法表將所述篩選表達(dá)式解析成由多個詞匯組成的表達(dá)式樹,通過語義分析將所述多個詞匯分解出篩選條件集合,所述篩選條件集合由若干個篩選條件對象組成,每個篩選條件對象由一個標(biāo)簽提取方法和若干個標(biāo)簽篩選方法組成。本發(fā)明實(shí)施例還公開了一種精確提取網(wǎng)頁內(nèi)容的系統(tǒng)。采用本發(fā)明,對篩選表達(dá)式的進(jìn)行語法分析重組成優(yōu)化表達(dá)式樹,并通過語義分析組成多個篩選條件對象的集合,從而實(shí)現(xiàn)對DOM文檔樹節(jié)點(diǎn)的采集定位和快速篩選。使用本發(fā)明有利于提高開發(fā)效率、降低維護(hù)成本。
文檔編號G06F17/30GK103226599SQ20131014398
公開日2013年7月31日 申請日期2013年4月23日 優(yōu)先權(quán)日2013年4月23日
發(fā)明者翁杰 申請人:翁杰