国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Swing 的HTML解析器的實現(xiàn)與應用

2024-08-31 00:00:00宋宇
科技資訊 2024年14期

摘要:HTML頁面解析是一切工作的基礎,通過分析HTML解析器感興趣的標簽以及超鏈接的分類,在Java的Swing包的基礎上實現(xiàn)了一個HTML解析器,用來提取HTML文檔的超鏈接和錨文本;然后把HTML解析器應用到多媒體信息檢索系統(tǒng)的搜索器Spider的開發(fā)中,通過設定若干個種子網(wǎng)站,選擇合適的搜索算法,從中篩選出包含音頻、視頻和Flash動畫的web頁面,并將其存放在數(shù)據(jù)庫中。

關鍵詞:解析器HTMLSwing超文本鏈接鏈接文本

中圖分類號:G250

ImplementationandApplicationofHTMLParserBasedonSwing

SONGYu

LibraryofNanjingUniversityofChineseMedicine,Nanjing,JiangsuProvince,210023China

Abstract:HTMLpageparsingisthefoundationofallwork.ByanalyzingthetagsandclassificationofhyperlinksthatHTMLparsersareinterestedin,anHTMLparserhasbeenimplementedbasedonJava'sSwingpackagetoextracthyperlinksandanchortextfromHTMLdocuments; Then,theHTMLparserisappliedtothedevelopmentofthesearchengineSpiderformultimediainformationretrievalsystems.Bysettingseveralseedwebsitesandselectingappropriatesearchalgorithms,webpagescontainingaudio,video,andFlashanimationsarefilteredoutandstoredinadatabase.

KeyWords:Parser;HTML;Swing;Hyperlink;Linktext

HTML是一種標記語言,其目的在于運用標記(tag)使文件達到預期的顯示效果;由于其簡單易學的特點,就算在各種Web設計語言競爭發(fā)展的今天,它在Web設計中仍然具有無法被取代的地位,受到眾多Web設計人員的青睞;很多情況下,只需要HTML文檔中的部分信息,基于這種需求,HTML的解析技術受到許多人的關注;盡管現(xiàn)在有好多現(xiàn)成類似的例子程序,但它們提取的信息未必適合需求,因此仍然需要編制符合要求的HTML解析器。

本文在Java的Swing包的基礎上,對解析Web頁面遇到的困難給以分析并提出相應的解決辦法,對其中的關鍵技術給出詳細說明,實現(xiàn)了一個用于提取超鏈接的HTML解析器;并把該解析器用用到多媒體信息檢索系統(tǒng)的搜索器Spider[1-3]的開發(fā)中。

1HTML解析器的實現(xiàn)

Java中Swing[4]包的HTML解析器類Parser是HTMLEditorKit類的內部類,本文主要就是利用Parser類實現(xiàn)對HTML解析器的構建。

1.1解析器感興趣的標簽

HTML文檔標簽[5]大致分為兩類:一類是傳輸數(shù)據(jù)的標簽,如paragraph、table等,它們顯示web站點包含的信息;第二類是基礎結構標簽(infrastructuretags),這類標簽指示瀏覽器如何從當前頁面跳轉到其他頁面,常見的有<A>、<Area>和<Form>,這類標簽需要提取。由于最終要提取出包含音頻、視頻和Flash動畫的頁面,因此還需要提取包含這些多媒體數(shù)據(jù)的標簽。在web頁面中,這些多媒體數(shù)據(jù)可以以鏈接的形式出現(xiàn),也可以嵌入Web頁面中,以鏈接形式出現(xiàn)的多媒體數(shù)據(jù)包含在標簽<A>中,嵌入Web頁面中的多媒體數(shù)據(jù)包含在標簽<object>和<embed>中。<embed>標簽是Netscape的私有標簽,用于Windows和Macintosh平臺下的NetscapeNavigator瀏覽器以及Macintosh平臺下的IE瀏覽器,這個標簽應用雖然廣泛,但并未被w3c收錄,因此使用此標簽的Web頁面將通不過w3c校驗。<object>標簽w3c推薦使用,用于Windows平臺的IE瀏覽器,但這個標簽在IE5-IE6/Win上必須下載完才能正常顯示。為了中和這兩者之間的矛盾,幾乎所有的Web設計者在嵌入多媒體數(shù)據(jù)時,同時使用這兩個標簽即把<embed>標簽嵌套放在<object>標簽內;因為這兩者包含的多媒體文件是同一個,因此在實際提取過程中,只提取一個即可;由于<embed>標簽未被w3c收錄,所以在Swing包中并不支持這個標簽,因此只通過<object>標簽來提?。ㄆ鋵嵍嗝襟w文件的路徑是包含在這個標簽的<param>標簽中);除此之外,還要提取標簽<Base>和<Frame>,各標簽的作用如表1所示。

1.2超鏈接解析與分類

該解析器重點解析的信息是超鏈接,超鏈接包括鏈接地址URL和鏈接文本,其中鏈接地址URL包括兩類:絕對URL和相對URL。絕對URL是包含首頁域名的完整的網(wǎng)址,帶有http和www的鏈接,唯一確定一個頁面,而相對URL是不完整的,它依賴于它所在的頁面,要想解析相對URL,必須將它轉換為絕對URL。

頁面中的超鏈接反映的是頁面相互之間的邏輯關系,按照不同的標準和目的,可以區(qū)分為不同的類別。本文根據(jù)需要,把超鏈接分為站內鏈接和站外鏈接。對于站內鏈接又分為四類:(1)下行鏈,目標頁面是當前頁面的下級頁面;(2)上行鏈,目標頁面是當前頁面的上級頁面;這兩種類型是定義在Web站點邏輯層次結構的垂直方向上的,統(tǒng)稱為垂直鏈;(3)水平鏈,目標頁面和當前頁面處于同一目錄;(4)交叉鏈,目標頁面和當前頁面不在同一路徑上。從以上描述可以看出,這種分類方法是根據(jù)頁面的物理結構來區(qū)分的。超鏈接分類如圖1所示。

2.3實現(xiàn)過程

(1)建立TCP連接:首先通過DNS解析獲取改頁面對應的IP地址,然后通過URLConnection建立與TCP連接,這個過程包括3次握手,以確保連接的可靠性。

(2)發(fā)起HTTP請求:向服務器發(fā)送HTTP請求,請求中包含請求行、請求頭和請求正文。請求行描述了客戶端的請求方式、請求的資源名稱以及使用的HTTP協(xié)議版本號。

(3)服務端進行HTTP響應:服務器接收到請求后,返回一個HTTP響應,該響應由狀態(tài)碼、響應頭和實體內容組成。狀態(tài)碼用于表示服務器對請求的處理結果,如2xx表示請求成功,4xx表示客戶端發(fā)生錯誤等。如果成功,將網(wǎng)頁HTML代碼通過輸入流讀入閱讀器Reader中。

(4)調用解析器HTMLEditorKit.Parser對象的parse()方法,對HTML文檔進行實際地解析。

(5)當遇到<A>、<Area>、<Map>等包含鏈接地址的標簽,則提取出該標簽的屬性HREF值。

(6)同時提取該鏈接的錨文本,以作為該鏈接的內容描述,并確保鏈接URL值與錨文本之間的一一對應關系。

(7)將所有提取出來的鏈接URL和錨文本一并存入數(shù)據(jù)庫中。

2HTML解析器的系統(tǒng)應用

將第二部分設計的HTML解析器應用到多媒體信息檢索系統(tǒng)的搜索器Spider的開發(fā)中。首先給定若干種子網(wǎng)站,然后利用本文第二部分構造的HTML解析器、按照寬度優(yōu)先的爬行策略遍歷每個種子網(wǎng)站,提取出種子網(wǎng)站里所有包含音頻、視頻、Flash動畫的網(wǎng)頁。由于該搜索器剛開始做,所以目前只是在功能上的實現(xiàn),效率不是太高,爬行策略會在接下來的研究中繼續(xù)優(yōu)化。該系統(tǒng)大體包括5個模塊:種子鏈接初始化模塊、HTML解析模塊、爬行模塊、目標網(wǎng)頁提取模塊、存儲模塊。

在該系統(tǒng)中,HTML解析模塊在本文的第二部分有詳細的說明,在此就不在展開敘述,該部分重點對該系統(tǒng)的其他4個模塊的作用與實現(xiàn)進行闡述。

2.1種子鏈接初始化模塊

種子鏈接的提供一般有3種方法。第一種是手工尋找,這種方法由于有了人的判斷與篩選,選擇出的種子鏈接的質量比較高,它一般包含較多的目標頁面;其缺點也是顯而易見,這種方法耗時耗力。第二種方法是通過元搜索引擎來提供,這種方法與第一種方法相反,雖然省去了人工的找尋階段,但其提供的種子鏈接的質量沒有保證。第三種方法是允許用戶把他們自己的網(wǎng)站提交,經確認后加入種子鏈接列表,這種方法一般作為一種輔助手段,來配合前兩種方法進行。由于目前這個系統(tǒng)還在試驗階段,并為投入運行,因此手工選擇了20個包含音頻、視頻、Flash動畫較多的網(wǎng)站進行測試,在以后會加入其他兩種方法來進行種子鏈接的初始化。

2.2爬行模塊

在這一模塊,利用第二部分設計的HTML解析器,提取出頁面的所有鏈接,通過對鏈接進行過濾,只保留與網(wǎng)頁文本的鏈接,然后按照寬度優(yōu)先的訪問策略依次遍歷所有鏈接。在此,為了盡量避免遍歷到無關鏈接,對鏈接的訪問進行控制,指訪問其內部鏈接,而對外部鏈接暫時不考慮(但會在以后的研究中對其價值進行判斷,據(jù)此來決定此鏈接的取舍)。其判斷方法如下:將超鏈接的URL地址與源網(wǎng)頁的URL地址進行比較,如果兩地址只是在最后一個“/”間隔符后面的字符不同,則此鏈接為內部鏈接,稱此鏈接與源鏈接有“親族”關系,按照與源鏈接的遠近,又將這種“親族”關系細分為“父子”關系(指在物理存儲上該鏈接位于源鏈接所在目錄的一個子目錄中)和“兄弟”關系(指在物理存儲上該鏈接與源鏈接處在同一目錄下),若該鏈接與源鏈接不是“親族”關系,將其舍棄;通過這種處理后,每個種子鏈接將形成一棵“鏈接樹”,通過這棵樹對該網(wǎng)站的鏈接進行大體分類,每個類別下的網(wǎng)頁存在某種程度的相關性,為將來尋找目標頁面提供了便利;多個種子鏈接將形成多棵“鏈接樹”,它們共同形成“超鏈接樹林”;

為了避免對鏈接的重復訪問,為每個鏈接設置了訪問狀態(tài),通過訪問狀態(tài)把所有的鏈接分為4個隊列:(1)等待隊列,處于該隊列的鏈接表示等待被訪問,訪問狀態(tài)為W;(2)運行隊列,處于該隊列的鏈接表示正在被訪問,訪問狀態(tài)為R;(3)完成隊列,處于該隊列的鏈接表示已經被訪問完畢,訪問狀態(tài)為C;(4)錯誤隊列,處于該隊列的鏈接表示在訪問過程中發(fā)生錯誤,訪問狀態(tài)為E;在任一時刻,一個鏈接只能屬于一個隊列,稱之為鏈接狀態(tài),一個鏈接的鏈接狀態(tài)轉換如圖2所示。

2.3目標網(wǎng)頁提取模塊

這一模塊的作用是在爬行模塊形成的“超鏈接樹林”中尋找包含音頻、視頻、Flash動畫的頁面,目前采用的方法比較簡單:依次取出“超鏈接樹林”中的每個鏈接進行訪問,通過本文第二部分構造的HTML解析器獲得每個鏈接頁面中的所有鏈接,如果所有的這些鏈接中有以音頻、視頻、Flash動畫的擴展名結尾的鏈接,將該鏈接對應的頁面提取出來作為目標頁面。這種方法簡單易行,并且不會漏掉目標頁面,即查全率比較高;但其缺點也很明顯,因為這種方法要對每個鏈接都要判斷一遍,所以效率太低,即查準率太低。下一步會對這一模塊重點進行改進,對每一鏈接的價值根據(jù)頁面內容和鏈接結構等提示性信息進行判斷,根據(jù)鏈接的價值大小,決定是否訪問此鏈接及訪問的順序。

2.4存儲模塊

在這一模塊,采用Access數(shù)據(jù)庫分五個表對數(shù)據(jù)進行存儲,第一張表是SeedLink,這張表用來存放種子鏈接,其結構如圖3所示。

第二張表是CrawlerLink這張表用來存放中間鏈接,即從種子鏈接中得到的所有內部鏈接,也就是在爬行模塊中提到的“超鏈接樹林”中的所有鏈接,之所以也把中間鏈接也存儲在數(shù)據(jù)庫中而沒有放到內存中,是因為隨著鏈接的增多,在內存中存放鏈接時,其運行效率會逐漸下降,其結構如圖4所示。

第三張表是Video,第四張表是Audio,第五章表是Flash,這3張表是用來存放包含視頻、音頻和動畫的頁面信息,其結構相似,表Video的結構如圖5所示。

3結語

對HTML文檔進行解析是好多與網(wǎng)頁進行交互系統(tǒng)的基礎,由于各個系統(tǒng)的目的不同,對網(wǎng)頁元素的提取也各不相同,因此不存在一個通用的HTML解析器,因此本文構造了一個用來提取網(wǎng)頁鏈接及鏈接文本的HTML解析器,并把此解析器應用到多媒體信息檢索系統(tǒng)的搜索器Spider的開發(fā)中,目前該系統(tǒng)尚處在實驗階段,只是在功能上的實現(xiàn),對爬行算法并未進行優(yōu)化,在下一步的工作中,將在爬行算法上進一步研究。

參考文獻

[1]劉曉旭.主題網(wǎng)絡爬蟲研究綜述[J].電腦知識與技術,2024,20(8):97-99.

[2]郭婺,郭建,張勁松,等.基于Python的網(wǎng)絡爬蟲的設計與實現(xiàn)[J].信息記錄材料,2023,24(4):159-162.

[3]古志敏,吳明珠.基于Python網(wǎng)絡爬蟲設計與實現(xiàn)[J].電腦編程技巧與維護,2023(9):163-166.

[4]王勇,洪進,杜蘭蘭,等.基于JavaSwing的找點軟件設計與實現(xiàn)[J].現(xiàn)代計算機,2022,28(16):96-100.

[5]楊大為,王詩念,包立巖,等.基于文本及HTML標簽密度的網(wǎng)頁正文提取[J].沈陽理工大學學報,2022,41(4):14-19.

民乐县| 建水县| 崇左市| 深州市| 贡觉县| 都江堰市| 昭通市| 克山县| 习水县| 庄河市| 万年县| 巩留县| 集安市| 福安市| 儋州市| 巴中市| 丹凤县| 九龙县| 丽江市| 桂平市| 威信县| 美姑县| 萍乡市| 克什克腾旗| 偏关县| 凯里市| 淮安市| 温泉县| 湖口县| 遵化市| 仁布县| 乐清市| 瑞昌市| 鹤庆县| 玉环县| 合江县| 平陆县| 北安市| 科技| 密云县| 平潭县|