本技術(shù)屬于網(wǎng)頁內(nèi)容處理,尤其涉及一種網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法、裝置、系統(tǒng)及存儲介質(zhì)。
背景技術(shù):
1、現(xiàn)階段,隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,網(wǎng)頁信息已基本成為人類獲取新聞以及信息的的主要方式。
2、網(wǎng)頁信息主要依靠html、css、script技術(shù)進行內(nèi)容數(shù)據(jù)的傳輸和展示,html的標簽多樣、使用靈活,導致網(wǎng)頁結(jié)構(gòu)復(fù)雜、多變,不同網(wǎng)站上的頁面內(nèi)容結(jié)構(gòu)差異較大,想通過共性的方式獲取或提取網(wǎng)頁內(nèi)容,并對內(nèi)容進行結(jié)構(gòu)化解析,難度較大。
3、傳統(tǒng)的頁面解析基本使用xpath或正則表達式。xpath是一種用于在xml和html文檔中選擇節(jié)點的語言,它可以通過路徑表達式在xml/html文檔中導航和定位特定的元素節(jié)點。正則表達式,適合簡單的文本匹配和提取,處理不復(fù)雜的html結(jié)構(gòu)或者從文本中提取簡單格式的數(shù)據(jù)。這兩種方式都需要使用者具備一定的專業(yè)知識,并且熟悉相關(guān)的語法以及編程能力。對只是使用的用戶來說,專業(yè)度較高、提取內(nèi)容以及結(jié)構(gòu)化方式不直觀。而且這兩種方式,針對性較強,不能動態(tài)匹配以及處理不同結(jié)構(gòu)的頁面數(shù)據(jù)。
技術(shù)實現(xiàn)思路
1、本技術(shù)的目的,在于提供一種網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法、裝置、系統(tǒng)及存儲介質(zhì),通過降低節(jié)點深度和整合節(jié)點的優(yōu)化方法,進一步簡化樹形結(jié)構(gòu),實現(xiàn)了從網(wǎng)頁中提取結(jié)構(gòu)化數(shù)據(jù)并保存到數(shù)據(jù)庫中的目標。
2、為了達成上述目的,本技術(shù)的解決方案是:
3、第一方面,本技術(shù)實施例提供一種網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法,包括:
4、獲取模板url,請求模板url的url地址,得到第一html標簽;解析第一html標簽,將第一html標簽轉(zhuǎn)化為document對象,提取document對象中的elements對象集合;
5、去除elements對象集合中的非解析標簽,得到過濾后的elements對象集合,非解析標簽包括link、script和style標簽;
6、對過濾后的elements對象集合進行循環(huán),并為過濾后的elements對象集合中的每一個對象設(shè)置currentid值,currentid值為每一個對象對應(yīng)循環(huán)的序號;
7、定義tag對象并組裝list<tag>集合,構(gòu)建樹形結(jié)構(gòu)對象;
8、解析樹形結(jié)構(gòu)對象,生成樹形結(jié)構(gòu)對象數(shù)據(jù),樹形結(jié)構(gòu)對象數(shù)據(jù)包括節(jié)點數(shù)據(jù),對節(jié)點數(shù)據(jù)進行篩選和命名,形成模板數(shù)據(jù)和模板數(shù)據(jù)的屬性名,將模板數(shù)據(jù)保存至模板數(shù)據(jù)庫中;
9、解析同類站點內(nèi)容,匹配模板數(shù)據(jù),若無法匹配模板數(shù)據(jù),則解析失敗,并進行記錄;根據(jù)模板數(shù)據(jù)的屬性名匹配第二html標簽,若第二html標簽包括href屬性或src屬性,則判斷href屬性或src屬性的值是文件還是外聯(lián),如果是文件,則根據(jù)第二html標簽中的鏈接下載文件;如果是外聯(lián),則保存第二html標簽中的鏈接;
10、將過濾后的elements對象集合中每個對象的currentid值、樹形結(jié)構(gòu)對象數(shù)據(jù)以及解析同類站點內(nèi)容時得到的文件或鏈接,結(jié)合模板數(shù)據(jù)的屬性名,組裝成結(jié)構(gòu)化對象數(shù)據(jù),并將結(jié)構(gòu)化對象數(shù)據(jù)保存至采集數(shù)據(jù)庫。
11、根據(jù)本技術(shù)實施例的上述方法,還可以具有以下附加技術(shù)特征:
12、進一步的,tag對象包括id屬性、parentid屬性、name屬性、text屬性、src屬性和href屬性。
13、進一步的,在解析樹形結(jié)構(gòu)對象之前,方法還包括通過預(yù)設(shè)規(guī)則降低樹形結(jié)構(gòu)對象中的節(jié)點深度。
14、進一步的,樹形結(jié)構(gòu)對象中包括樹節(jié)點,通過預(yù)設(shè)規(guī)則降低樹形結(jié)構(gòu)對象中的節(jié)點深度,包括:
15、判斷樹節(jié)點是否存在子節(jié)點,當不存在子節(jié)點時,則為末端節(jié)點,當末端節(jié)點的text、src和href同時為空時,刪除該節(jié)點對象,并沿著層級結(jié)構(gòu)向上追溯,迭代處理。
16、進一步的,從末端節(jié)點逆向溯源,當該節(jié)點個數(shù)為1,并且包含的內(nèi)容和父節(jié)點直接獲取的純文本內(nèi)容相同時,去除該節(jié)點,使用其父節(jié)點,并沿著層級結(jié)構(gòu)向上追溯,迭代處理;
17、當該節(jié)點及其同級節(jié)點的數(shù)量和每個節(jié)點的內(nèi)容量滿足如下公式時:
18、
19、其中,表示父節(jié)點的值,表示子節(jié)點的個數(shù),表示預(yù)設(shè)閾值,表示父節(jié)點的值除以子節(jié)點的個數(shù)小于預(yù)設(shè)閾值,表示最大子節(jié)點的值,表示最小子節(jié)點的值;
20、表示所有的子節(jié)點都不包括數(shù)字,對于每個節(jié)點,通過表示該節(jié)點包括數(shù)字,若,則包括數(shù)字,若,則不包括數(shù)字;
21、將此節(jié)點及其同級節(jié)點的內(nèi)容進行整合,并入其父節(jié)點中,采用其父節(jié)點的原有內(nèi)容,并沿著層級結(jié)構(gòu)向上追溯,迭代處理。
22、進一步的,定義tag對象并組裝list<tag>集合,構(gòu)建樹形結(jié)構(gòu)對象,包括:
23、tag對象包括id、parentid、name、text、src、href屬性,其中,
24、id表示標簽id,id值等于currentid值;
25、parentid表示父標簽id,parentid值等于父標簽的currentid值,若不存在父標簽,則parentid值為0;
26、name表示標簽名稱;
27、src表示當前標簽的src屬性值,若不存在該屬性,則src屬性值為null;
28、href表示當前標簽的href屬性值,若不存在該屬性,則href屬性值為null。
29、進一步的,根據(jù)list<tag>集合、id和parentid構(gòu)建為list<tree<string>>樹形結(jié)構(gòu)對象。
30、第二方面,本技術(shù)實施例提供一種網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理裝置,包括:
31、元素獲取模塊,被配置為用于獲取模板url,請求模板url的url地址,得到第一html標簽;解析第一html標簽,將第一html標簽轉(zhuǎn)化為document對象,提取document對象中的elements對象集合;
32、過濾循環(huán)模塊,被配置為用于去除elements對象集合中的非解析標簽,得到過濾后的elements對象集合,非解析標簽包括link、script和style標簽;對過濾后的elements對象集合進行循環(huán),并為過濾后的elements對象集合中的每一個對象設(shè)置currentid值,currentid值為每一個對象對應(yīng)循環(huán)的序號;
33、樹形結(jié)構(gòu)模塊,被配置為用于定義tag對象并組裝list<tag>集合,構(gòu)建樹形結(jié)構(gòu)對象;解析樹形結(jié)構(gòu)對象,生成樹形結(jié)構(gòu)對象數(shù)據(jù),樹形結(jié)構(gòu)對象數(shù)據(jù)包括節(jié)點數(shù)據(jù),對節(jié)點數(shù)據(jù)進行篩選和命名,形成模板數(shù)據(jù)和模板數(shù)據(jù)的屬性名,將模板數(shù)據(jù)保存至模板數(shù)據(jù)庫中;
34、解析處理模塊,被配置為用于解析同類站點內(nèi)容,匹配模板數(shù)據(jù),若無法匹配模板數(shù)據(jù),則解析失敗,并進行記錄;根據(jù)模板數(shù)據(jù)的屬性名匹配第二html標簽,若第二html標簽包括href屬性或src屬性,則判斷href屬性或src屬性的值是文件還是外聯(lián),如果是文件,則根據(jù)第二html標簽中的鏈接下載文件;如果是外聯(lián),則保存第二html標簽中的鏈接;
35、結(jié)構(gòu)化模塊,被配置為用于將過濾后的elements對象集合中每個對象的currentid值、樹形結(jié)構(gòu)對象數(shù)據(jù)以及解析同類站點內(nèi)容時得到的文件或鏈接,結(jié)合模板數(shù)據(jù)的屬性名,組裝成結(jié)構(gòu)化對象數(shù)據(jù),并將結(jié)構(gòu)化對象數(shù)據(jù)保存至采集數(shù)據(jù)庫。
36、第三方面,本技術(shù)實施例提供了一種網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理系統(tǒng),系統(tǒng)包括處理器和存儲器,存儲器中存儲有計算機程序,計算機程序由處理器加載并執(zhí)行,以實現(xiàn)如本技術(shù)實施例第一方面提供的網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法。
37、第四方面,本技術(shù)實施例提供了一種計算機可讀存儲介質(zhì),存儲介質(zhì)中存儲有計算機程序,計算機程序被處理器執(zhí)行時,用于實現(xiàn)如本技術(shù)實施例第一方面的網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法。
38、采用本技術(shù)實施例提供的網(wǎng)頁內(nèi)容結(jié)構(gòu)化處理方法,與現(xiàn)有技術(shù)相比,具有如下有益技術(shù)效果:
39、本技術(shù)實施例通過獲取模板url并解析html標簽,將非結(jié)構(gòu)化的網(wǎng)頁內(nèi)容轉(zhuǎn)化為結(jié)構(gòu)化的數(shù)據(jù)。這一過程中,通過去除非解析標簽(如link、script和style等)和設(shè)置currentid值等步驟,有效簡化了數(shù)據(jù)提取的復(fù)雜度,提高了數(shù)據(jù)提取的效率。
40、本技術(shù)實施例通過定義tag對象并組裝list<tag>集合,構(gòu)建樹形結(jié)構(gòu)對象,該方法實現(xiàn)了對網(wǎng)頁內(nèi)容的層次化表示。這種層次化的數(shù)據(jù)結(jié)構(gòu)不僅便于理解和分析網(wǎng)頁內(nèi)容,還有助于優(yōu)化數(shù)據(jù)存儲和查詢效率。同時,通過預(yù)設(shè)規(guī)則降低樹形結(jié)構(gòu)對象中的節(jié)點深度,進一步簡化了數(shù)據(jù)結(jié)構(gòu),減少了存儲空間的占用。
41、本技術(shù)實施例在解析同類站點內(nèi)容時,通過匹配模板數(shù)據(jù)來確保數(shù)據(jù)解析的準確性。若無法匹配模板數(shù)據(jù),則進行記錄并采取相應(yīng)的處理措施。此外,在解析html標簽時,根據(jù)href屬性或src屬性的值判斷是文件還是外聯(lián),并分別進行下載或保存鏈接的處理,進一步增強了數(shù)據(jù)解析的準確性和完整性。
42、本技術(shù)實施例使用戶直接從生成的json樹形結(jié)構(gòu)中選擇需要的數(shù)據(jù),并進行字段命名,無需具備專業(yè)的html或編程知識。這種直觀的操作方式大大降低了用戶的學習成本和使用門檻;根據(jù)實際需求自由組合和修改模板節(jié)點,這種高度的靈活性使得該方法能夠適應(yīng)各種復(fù)雜的網(wǎng)頁結(jié)構(gòu)和解析需求。