一種提取網(wǎng)頁正文的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)頁文字信息處理領(lǐng)域,特別是一種提取網(wǎng)頁正文的方法。
【背景技術(shù)】
[0002]在輿情監(jiān)測和分析領(lǐng)域中,都會(huì)涉及到網(wǎng)頁正文內(nèi)容提取。而輿情檢測和分析最有價(jià)值的對(duì)象便是網(wǎng)頁的正文部分,大多數(shù)情況下,為了便于分析,需要從網(wǎng)頁中提取有價(jià)值的正文信息,排除不需要的干擾信息。可以說正文提取的好壞,直接影響了分析結(jié)果的好壞。
[0003]中國發(fā)明專利CN 102779169 A公開了一種基于HTML標(biāo)簽的網(wǎng)頁正文提取方法包括以下步驟:(1)中央處理器將網(wǎng)頁的HTML代碼以文本形式讀入寄存器中,并將寄存器中的字符全部小寫化,便于后面的字符匹配;(2)中央處理器通過掃描寄存器,將HTML網(wǎng)頁劃分為Head和Body量大區(qū)域塊;(3)中央處理器調(diào)用凈化處理單元,通過以下3個(gè)環(huán)節(jié)對(duì)寄存器進(jìn)行凈化:
[0004]一、刪除head區(qū)域塊中與網(wǎng)頁標(biāo)題無關(guān)的內(nèi)容,
[0005]二、確定body區(qū)域塊中網(wǎng)頁正文標(biāo)題的位置,
[0006]三、刪除body區(qū)域塊中與網(wǎng)頁正文無關(guān)的內(nèi)容;
[0007](4)中央處理器調(diào)用轉(zhuǎn)義字符轉(zhuǎn)換處理單元,把寄存器里面的轉(zhuǎn)義字符轉(zhuǎn)化成正常字符;(5)中央處理器依次在存儲(chǔ)器中保存寄存器中網(wǎng)頁信息,即為提取的網(wǎng)頁正文部分。
[0008]html文件即超文本傳輸語言文件,其結(jié)構(gòu)有便簽和內(nèi)容構(gòu)成,而從html中提取含有價(jià)值信息的正文,需要了解html的結(jié)構(gòu),熟悉網(wǎng)頁展現(xiàn)正文的普遍規(guī)律。基于這些規(guī)律可以通過標(biāo)簽的普遍用途來提取正文,比如title或hl,h2標(biāo)簽一般用作標(biāo)題,P —般表示正文段落,根據(jù)標(biāo)簽的含義去提取正文。因?yàn)檎牡腜標(biāo)簽會(huì)有多個(gè),便簽中還會(huì)包含其他標(biāo)簽,因此這種正文提取的方法不夠完整全面。有的正文提取是根據(jù)標(biāo)簽的長度來確定包含正文的標(biāo)簽,這種方式的缺點(diǎn)在于正文是由多個(gè)標(biāo)簽包含的。這種方式的提取只能取到正文的某個(gè)標(biāo)簽,所以正文不能取全。
【發(fā)明內(nèi)容】
[0009]本發(fā)明需要解決的技術(shù)問題提供一種處理速度快且準(zhǔn)確率高的提取網(wǎng)頁正文的方法。
[0010]為解決上述的技術(shù)問題,本發(fā)明一種提取網(wǎng)頁正文的方法包括以下步驟:
[0011]步驟SlOl:網(wǎng)頁源代碼獲取,獲取html的頁面源代碼;步驟S102:解析并遍歷標(biāo)簽,通過html解析器解析頁面源代碼獲得標(biāo)簽并遍歷每個(gè)標(biāo)簽;步驟S103:標(biāo)簽內(nèi)容長度判斷,對(duì)每個(gè)標(biāo)簽的內(nèi)容長度進(jìn)行判斷,遍歷標(biāo)簽內(nèi)容長度后,確定標(biāo)簽內(nèi)容長度最長的標(biāo)簽;步驟S104:提取標(biāo)簽內(nèi)容,取出標(biāo)簽最長的標(biāo)簽內(nèi)容,取出的內(nèi)容就是需要提取的正文內(nèi)容。
[0012]進(jìn)一步的,所述步驟S102中用來解析html頁面源代碼的html解析器采用jsoup工具。
[0013]進(jìn)一步的,所述步驟S102中遍歷每個(gè)標(biāo)簽采用遞歸遍歷每個(gè)標(biāo)簽。
[0014]進(jìn)一步的,所述步驟S103還包括以下步驟:
[0015]步驟S1031:判斷標(biāo)簽內(nèi)容長度,判斷標(biāo)簽的內(nèi)容長度是否最長,如果最長則進(jìn)入步驟S1032,如果不是則進(jìn)入步驟S1033 ;步驟S1032:存儲(chǔ)本標(biāo)簽,存儲(chǔ)標(biāo)簽內(nèi)容長度最長的標(biāo)簽、標(biāo)簽長度L、標(biāo)志為本標(biāo)簽;步驟S1033:判斷本標(biāo)簽是否有子元素,如果有則進(jìn)入步驟S1034,如果沒有則進(jìn)入步驟S1039 ;步驟S1034:標(biāo)簽子元素,對(duì)每個(gè)子元素進(jìn)行標(biāo)簽形成不同的子標(biāo)簽;步驟S1035:相同子標(biāo)簽內(nèi)容長度相加,將相同子標(biāo)簽的內(nèi)容長度相加;步驟S1036:判斷子標(biāo)簽內(nèi)容相加長度是否最長,將子標(biāo)簽內(nèi)容長度相加與當(dāng)前最長標(biāo)簽長度L相比較,判斷是否比最長標(biāo)簽長度L長,如果是則進(jìn)入步驟S1037,如果否則進(jìn)入步驟S1038 ;步驟S1037:存儲(chǔ)子標(biāo)簽,存儲(chǔ)內(nèi)容長度較大的子標(biāo)簽的標(biāo)簽、子標(biāo)簽的父標(biāo)簽以及標(biāo)志為子標(biāo)簽;步驟S1038:判斷子標(biāo)簽是否全部遍歷相加,如果是則進(jìn)入步驟S1039,如果否則返回步驟S1035 ;步驟S1039:判斷本標(biāo)簽是否全部遍歷,如果是則進(jìn)入步驟S104,如果否則返回步驟S1031。
[0016]更進(jìn)一步的,所述步驟S104中如果存儲(chǔ)的結(jié)果子標(biāo)簽標(biāo)志為子標(biāo)簽的,提取這個(gè)標(biāo)簽的子標(biāo)簽的所有內(nèi)容;如果子標(biāo)簽標(biāo)志沒有子標(biāo)簽的,則提取標(biāo)簽的內(nèi)容。
[0017]采用上述方法后,由于網(wǎng)頁的正文是由多個(gè)標(biāo)簽包含的,通過遍歷每個(gè)標(biāo)簽,將相同標(biāo)簽的內(nèi)容長度相加,再跟其他單個(gè)標(biāo)簽的長度相比較,最長的標(biāo)簽便是需要提取的正文內(nèi)容,本發(fā)明既能保證處理速度,提取的準(zhǔn)確率也高。
【附圖說明】
[0018]下面將結(jié)合附圖和【具體實(shí)施方式】對(duì)本作進(jìn)一步詳細(xì)的說明。
[0019]圖1為本發(fā)明一種提取網(wǎng)頁正文方法的流程圖。
【具體實(shí)施方式】
[0020]如圖1所示,本發(fā)明一種提取網(wǎng)頁正文的方法,包括以下步驟,
[0021]步驟SlOl:網(wǎng)頁源代碼獲取,獲取html的頁面源代碼,這是本領(lǐng)域技術(shù)人員都理解,在這里就不贅述了。
[0022]步驟S102:解析并遍歷標(biāo)簽,本實(shí)施方式采用jsoup工具解析頁面源代碼獲得標(biāo)簽并遍歷每個(gè)標(biāo)簽?,F(xiàn)在網(wǎng)頁的正文都是由一個(gè)或多個(gè)P、div、span以及a標(biāo)簽組成的,例如一個(gè)標(biāo)簽下的包含多個(gè)P標(biāo)簽,這些P標(biāo)簽包含正文的內(nèi)容。為了提取需要的正文內(nèi)容,將這些P標(biāo)簽的內(nèi)容長度相加,再跟其他單個(gè)標(biāo)簽的長度相比較,最長的標(biāo)簽便是需要提取的正文內(nèi)容。
[0023]步驟S103:標(biāo)簽內(nèi)容長度判斷,對(duì)每個(gè)標(biāo)簽的內(nèi)容長度進(jìn)行判斷,遍歷標(biāo)簽內(nèi)容長度后,確定標(biāo)簽內(nèi)容長度最長的標(biāo)簽。由于標(biāo)簽包括本標(biāo)簽和子標(biāo)簽,所以在判斷標(biāo)簽長度時(shí)需要區(qū)分本標(biāo)簽和子標(biāo)簽,具體步驟如下:
[0024]步驟S1031:判斷標(biāo)簽內(nèi)容長度,對(duì)每個(gè)標(biāo)簽進(jìn)行判斷,如果這個(gè)標(biāo)簽的內(nèi)容長度最長,則通過步驟S1032存儲(chǔ)這個(gè)標(biāo)簽、這個(gè)標(biāo)簽的長度L以及標(biāo)志為本標(biāo)簽,在存儲(chǔ)時(shí)設(shè)置標(biāo)志位,可以通過設(shè)置標(biāo)志位O表示本標(biāo)簽,標(biāo)志位I表示子標(biāo)簽,當(dāng)然也可以是其他。如果不是則進(jìn)入步驟S1033,判斷這個(gè)本標(biāo)簽是否有子元素,如果沒有則進(jìn)入步驟S1039。
[0025]通過步驟S1033判斷當(dāng)前本標(biāo)簽是否有子元素,如果有的話則進(jìn)入步驟S1034對(duì)每個(gè)子元素進(jìn)行標(biāo)簽形成不同子標(biāo)簽,常見的標(biāo)簽有P、span、div和a標(biāo)簽,本實(shí)施方式中本標(biāo)簽包含3個(gè)P標(biāo)簽和8個(gè)div標(biāo)簽。然后通過步驟S1035分別計(jì)算3個(gè)P標(biāo)簽的內(nèi)容相加的長度和8個(gè)div標(biāo)簽的內(nèi)容相加的長度,然后通過步驟S1036與當(dāng)前存儲(chǔ)的標(biāo)簽內(nèi)容長度L進(jìn)行比較。如果3個(gè)P標(biāo)簽的內(nèi)容相加的長度或8個(gè)div標(biāo)簽的內(nèi)容相加的長度大于存儲(chǔ)的標(biāo)簽內(nèi)容長度L,則進(jìn)入步驟S1037存儲(chǔ)這個(gè)P標(biāo)簽、P標(biāo)簽的父標(biāo)簽以及標(biāo)志為子標(biāo)簽,并用3個(gè)P標(biāo)簽的內(nèi)容相加的長度LI或8個(gè)div標(biāo)簽的內(nèi)容相加的長度L2替換原來的標(biāo)簽內(nèi)容長度L。當(dāng)進(jìn)入下一個(gè)循環(huán)判斷本標(biāo)簽或者子標(biāo)簽的長度是否最長時(shí),就是與LI或者L2相比較。如果3個(gè)P標(biāo)簽的內(nèi)容相加的長度或8個(gè)div標(biāo)簽的內(nèi)容相加的長度小于存儲(chǔ)的標(biāo)簽內(nèi)容長度L,返回步驟S1038判斷子標(biāo)簽是否全部通過遍歷相加。本實(shí)施方式中存在P標(biāo)簽和div標(biāo)簽,先對(duì)3個(gè)P標(biāo)簽的內(nèi)容相加的長度比較,比較完后返回步驟S1035將8個(gè)div標(biāo)簽內(nèi)容長度相加再通過步驟S1036進(jìn)行新一輪比較。步驟S1039是用來判斷本標(biāo)簽是否全部遍歷的,本實(shí)施方式中本標(biāo)簽共N個(gè),初次通過步驟S1031判斷本標(biāo)簽內(nèi)容長度時(shí)初始化i = 0,當(dāng)判斷完一次本標(biāo)簽和本標(biāo)簽的所有子標(biāo)簽后i++,直至i = N遍歷結(jié)束。
[0026]如圖1所示,如果當(dāng)前存儲(chǔ)的標(biāo)志位標(biāo)志為本標(biāo)簽,則通過步驟S104提取本標(biāo)簽中的內(nèi)容;如果當(dāng)前存儲(chǔ)的標(biāo)志為子標(biāo)簽,則通過步驟S104提取子標(biāo)簽的內(nèi)容。以3個(gè)P標(biāo)簽的內(nèi)容相加的長度LI最長為例,就將子標(biāo)簽P標(biāo)簽中的所有內(nèi)容提出出來,提取出來的內(nèi)容就是需要的網(wǎng)頁正文內(nèi)容。
[0027]當(dāng)然,也可以采用其他適用的html解析器,這樣的變換均落在本發(fā)明的保護(hù)范圍之內(nèi)。
[0028]雖然以上描述了本發(fā)明的【具體實(shí)施方式】,但是本領(lǐng)域熟練技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說明,可以對(duì)本實(shí)施方式作出多種變更或修改,而不背離發(fā)明的原理和實(shí)質(zhì),本發(fā)明的保護(hù)范圍僅由所附權(quán)利要求書限定。
【主權(quán)項(xiàng)】
1.一種提取網(wǎng)頁正文的方法,其特征在于,包括以下步驟: 步驟SlOl:網(wǎng)頁源代碼獲取,獲取html的頁面源代碼; 步驟S102:解析并遍歷標(biāo)簽,通過html解析器解析頁面源代碼獲得標(biāo)簽并遍歷每個(gè)標(biāo)簽; 步驟S103:標(biāo)簽內(nèi)容長度判斷,對(duì)每個(gè)標(biāo)簽的內(nèi)容長度進(jìn)行判斷,遍歷標(biāo)簽內(nèi)容長度后,確定標(biāo)簽內(nèi)容長度最長的標(biāo)簽; 步驟S104:提取標(biāo)簽內(nèi)容,取出標(biāo)簽最長的標(biāo)簽內(nèi)容,取出的內(nèi)容就是需要提取的正文內(nèi)容。
2.按照權(quán)利要求1所述的一種提取網(wǎng)頁正文的方法,其特征在于:所述步驟S102中用來解析html頁面源代碼的html解析器采用jsoup工具。
3.按照權(quán)利要求1所述的一種提取網(wǎng)頁正文的方法,其特征在于:所述步驟S102中遍歷每個(gè)標(biāo)簽采用遞歸遍歷每個(gè)標(biāo)簽。
4.按照權(quán)利要求1所述的一種提取網(wǎng)頁正文的方法,其特征在于,所述步驟S103還包括以下步驟: 步驟S1031:判斷標(biāo)簽內(nèi)容長度,判斷標(biāo)簽的內(nèi)容長度是否最長,如果最長則進(jìn)入步驟S1032,如果不是則進(jìn)入步驟S1033 ; 步驟S1032:存儲(chǔ)本標(biāo)簽,存儲(chǔ)標(biāo)簽內(nèi)容長度最長的標(biāo)簽、標(biāo)簽長度L、標(biāo)志為本標(biāo)簽; 步驟S1033:判斷本標(biāo)簽是否有子元素,如果有則進(jìn)入步驟S1034,如果沒有則進(jìn)入步驟 S1039 ; 步驟S1034:標(biāo)簽子元素,對(duì)每個(gè)子元素進(jìn)行標(biāo)簽形成不同的子標(biāo)簽; 步驟S1035:相同子標(biāo)簽內(nèi)容長度相加,將相同子標(biāo)簽的內(nèi)容長度相加; 步驟S1036:判斷子標(biāo)簽內(nèi)容相加長度是否最長,將子標(biāo)簽內(nèi)容長度相加與當(dāng)前最長標(biāo)簽長度L相比較,判斷是否比最長標(biāo)簽長度L長,如果是則進(jìn)入步驟S1037,如果否則進(jìn)入步驟S1038 ; 步驟S1037:存儲(chǔ)子標(biāo)簽,存儲(chǔ)內(nèi)容長度較大的子標(biāo)簽的標(biāo)簽、子標(biāo)簽的父標(biāo)簽以及標(biāo)志為子標(biāo)簽; 步驟S1038:判斷子標(biāo)簽是否全部遍歷相加,如果是則進(jìn)入步驟S1039,如果否則返回步驟S1035 ; 步驟S1039:判斷本標(biāo)簽是否全部遍歷,如果是則進(jìn)入步驟S104,如果否則返回步驟S1031。
5.按照權(quán)利要求4所述的一種提取網(wǎng)頁正文的方法,其特征在于:所述步驟S104中如果存儲(chǔ)的結(jié)果子標(biāo)簽標(biāo)志為子標(biāo)簽的,提取這個(gè)標(biāo)簽的子標(biāo)簽的所有內(nèi)容;如果子標(biāo)簽標(biāo)志沒有子標(biāo)簽的,則提取本標(biāo)簽的內(nèi)容。
【專利摘要】本發(fā)明涉及網(wǎng)頁文字信息處理領(lǐng)域,特別是一種提取網(wǎng)頁正文的方法,包括以下步驟:步驟S101:網(wǎng)頁源代碼獲取,獲取html的頁面源代碼;步驟S102:解析并遍歷標(biāo)簽,通過html解析器解析頁面源代碼獲得標(biāo)簽并遍歷每個(gè)標(biāo)簽;步驟S103:標(biāo)簽內(nèi)容長度判斷,對(duì)每個(gè)標(biāo)簽的內(nèi)容長度進(jìn)行判斷,遍歷標(biāo)簽內(nèi)容長度后,確定標(biāo)簽內(nèi)容長度最長的標(biāo)簽;步驟S104:提取標(biāo)簽內(nèi)容,取出標(biāo)簽最長的標(biāo)簽內(nèi)容,取出的內(nèi)容就是需要提取的正文內(nèi)容。采用上述方法后,由于網(wǎng)頁的正文是由多個(gè)標(biāo)簽包含的,通過遍歷每個(gè)標(biāo)簽,將相同標(biāo)簽的內(nèi)容長度相加,再跟其他單個(gè)標(biāo)簽的長度相比較,最長的標(biāo)簽便是需要提取的正文內(nèi)容,發(fā)明既能保證處理速度,提取的準(zhǔn)確率也高。
【IPC分類】G06F17-30
【公開號(hào)】CN104573097
【申請(qǐng)?zhí)枴緾N201510047773
【發(fā)明人】趙亮
【申請(qǐng)人】湖南蟻坊軟件有限公司
【公開日】2015年4月29日
【申請(qǐng)日】2015年1月30日