版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、簡述通過 Java 解析 HTML 文檔簡述通過 Java 解析 HTML 文檔2011-04-01 09:14:05摘要JAVA語言是目前Internet上大型的WEB應用程序開發(fā)時使用得最熱門的編程語言, 本文從實踐的角度重點闡述 Java 語言中輸入流類 StreamTokenizer 在編寫HTML文件分析程序中的應用。關(guān)鍵詞:java htmlStreamTokenzer HtmlTokenizer Applet計算機摘要 JAVA 語言是目前Internet 上大型的 WEB 應用程序開發(fā)時使用得最熱門的編程語言,本文從實踐的角度重點闡述Java 語言中輸入流類StreamToke
2、nizer在編寫 HTML 文件分析程序中的應用。關(guān)鍵詞: java html StreamTokenzer HtmlTokenizer Applet計算機信息技術(shù)已經(jīng)滲透到人們生活的方方面面,網(wǎng)絡信息已成為我們?nèi)粘P畔⒅饕獊碓粗?。而這些信息時如何在這神奇的網(wǎng)絡上體現(xiàn)出的呢,這些網(wǎng)站是如何用機器語言編輯的等等。 弄明白這些的方法很多, 在這將通過 java 簡單解析 html 文件,并舉實例進行說明。1 Java 語言的概述1.1 Java 語言的主要特點Java 語言是一種適用于網(wǎng)絡編程的語言,它的基本結(jié)構(gòu)與C+ 極為相似,但卻簡單得多。它集成了其它一些語言的特點和優(yōu)勢,又避開了它們的不足
3、之處。Java 的主要特點有:簡單性、平臺獨立性、面向?qū)ο蟮募夹g(shù)、多線程、動態(tài)性、安全性、高性能、分布性、強大性、解釋性、可移植性等。1.2 Java 解析 Html 工具Java HTML Parser提供了一組Tag 對象,這些對象可以深入解析一棵可搜索的結(jié)構(gòu)樹。HtmlRipper是一個 Java 包能夠按照預先定義好的規(guī)則設置來從 Web 頁中抽取動態(tài)數(shù)據(jù).Cobra 是一個 HTML 工具包。它包含一個純Java HTMLDOM分析器和一個頁面表現(xiàn)引擎。Cobra 支持HTML4,Javascript和 CSS2 。Java Mozilla Html Parser能夠?qū)?html 解
4、析成 JavaDocument對象。它是一個基于Mozilla Html解析器封裝的Html 解析類庫。因此能夠為開發(fā)人員提供一個瀏覽器質(zhì)量的HTML 解析器。1.3 Java Applet通常翻譯為 Java 小應用程序, 也稱 Java 小程序, 它不是能獨立運行的 Java 程序,而是通過支持 Java 瀏覽器來運行的Java 程序。在 Java 語言剛剛出現(xiàn)的時候, Java 最吸引人的就是 JavaApplet ,用來創(chuàng)建 WWW 上的頁面。2 HTML 語言剖析HTML 全名為 Hyper Text Markup Language,中文譯為超文本標記語言,這是創(chuàng)建網(wǎng)頁的腳本語言,它
5、提供了精簡而有力的文本定義,使我們可以設計出多姿多彩的超媒體文本Hypermedia Document ),通過 HTTP ( Hyper Text Teansfer Protocol )通信協(xié)議,是的 HTML 文本可以在全球互聯(lián)網(wǎng)( World Wide Web ,WWW )上進行跨平臺的文件交換。HTML 文件為純文本的文件格式,可以用任何文本編輯器或者用 FrontPage 、 Dreamweaver等 Web 開發(fā)制作工具來編輯。至于文件中的文字、字體、字體大小、段落、圖片、表格及超級鏈接, 甚至是文本名稱都是以不同意的標記( Tags )來描述,以此來定義文件的結(jié)構(gòu)與文件間的邏輯關(guān)
6、聯(lián)。簡而言之, HTML 是以標記來描述文件中的多媒體信息。3 Web 與 HTML 互聯(lián)關(guān)系Web 服務器的核心是對HTML 文件中的各標記 ( Tag )作出正確的分析,一種編程語言的解釋程序也是對源文件中的保留字進行分析再做解釋的。實際應用中,我們也常常會遇到需要對某一特定類型文件進行關(guān)鍵字分析的情況,比如,需要將某個 HTML 文件下載并同時下載與之相關(guān)的.gif 、.class等文件, 此時就要求對HTML 文件中的標記進行分離,找出所需的文件名及目錄。利用Java 的輸入流類StreamTokenizer進行 HTML 文件的分析,效果較好。在此,我們要實現(xiàn)從已知的 Web 頁面下
7、載 HTML 文件,對其進行分析后,下載該頁面中包含的 HTML 文件(如果在 Frame 中)、圖像文件和 Class ( Java Applet )文件。程序?qū)崿F(xiàn)4.1 編寫嵌入 java 小程序字節(jié)碼文件的 html 文檔通過 html 的標記符可以把編譯形成的字節(jié)碼文件 app2.class 嵌入到 html 文檔中。其最基本的形式為:其中,code 屬性指明了所要加載的字節(jié)碼文件, 它與網(wǎng)頁在同一個文件夾下: width 和 height 屬性分別給出了 Applet 顯示區(qū)域的寬和高,單位為像素。使用 Windows的記事本,鍵入下面的html 源文件:并將網(wǎng)頁文件保存在字節(jié)按在的
8、目錄下,文件名可任意命名,例如page.htm 。這樣就把小程序字節(jié)碼文件App2.class嵌入到網(wǎng)頁 page1.htm中。4.2 利用 Java 實現(xiàn) HTML 的編輯首先要有一個編輯框,這個編輯框其實就是一個可編輯狀態(tài)的網(wǎng)頁,我們用 iframe 來建立編輯框。并且在加上javascript代碼來指定HtmlEdit有編輯功能:var editor;editor =document.getElementById(HtmlEdit).contentWindow;/只需鍵入以下設定,iframe 立刻變成編輯器。/但是 IE 與 FireFox 有點不同,為了兼容FireFox ,所以必須
9、創(chuàng)建一個新的document 。字體特效 加粗方法一function addBold()editor.focus(); /所有字體特效只是使用execComman()就能完成。/字體特效 加粗方法二function addBold()editor.focus(); /獲得選取的焦點function insertHTML(html)none) ;4.3 對某個令牌流進行分析之前,首先應對該令牌流的語法表進行設置,在本例中,即是讓程序分出哪個單詞是HTML的標記。class HtmlTokenizer extends好論文 123StreamTokenizer /定義各標記,這里的標記僅是本例中必
10、須的,可根據(jù)需要自行擴充static int HTML_TEXT=-1;static int HTML_UNKNOWN=-2;static int HTML_EOF=-3;static int HTML_IMAGE=-4;static int HTML_FRAME=-5;static int HTML_BACKGROUND=-6;static int HTML_APPLET=-7;boolean outsideTag=true; /判斷是否在標記之中/構(gòu)造器,定義該令牌流的語法表。public HtmlTokenizer(BufferedReader r) super(r);this.rese
11、tSyntax(); /重置語法表this.wordChars(0,255); /令牌范圍為全部字符this.ordinaryChar(標記兩邊的分割符this.ordinaryChar(); /end of constructor public int nextHtml() int token; / 令牌tryswitch(token=this.nextToken()case StreamTokenizer.TT_EOF:/如果已讀到流的盡頭,則返回TT_EOFreturn HTML_EOF;case 進入標記字段outsideTag=false;return nextHtml();case
12、 : / 出標記字段outsideTag=true;return nextHtml();case StreamTokenizer.TT_WORD:/若當前令牌為單詞,判斷是哪個標記if (allWhite(sval)return nextHtml(); /過濾其中空格else if(sval.toUpperCase().indexOf(FRAME)!=-1 & !outsideTag) /標記 FRAMEreturn HTML_FRAME;else if(sval.toUpperCase().indexOf(IMG) !=-1 & !outsideTag) / 標記 IMG return HT
13、ML_IMAGE;else if(sval.toUpperCase().indexOf(BACKGROUND)!=-1 & !outsideTag) /標記 BACKGROUNDreturn HTML_BACKGROUND;else if(sval.toUpperCase().indexOf(APPLET) !=-1 & !outsideTag) / 標記 APPLET return HTML_APPLET;default: /end of nextHtmlprotected boolean allWhite(String s)/過濾所有空格/實現(xiàn)略/ end of allWhite /end
14、 of class5 程序調(diào)試心得5.1 Java 是嚴格區(qū)分大小寫的, 但 html 標記語言并不區(qū)分別大小寫,因此除嵌入的字節(jié)碼文件名大小寫必須與編譯后的文件名一致外,其他標記符大小寫都可以。5.2 對某個令牌流進行分析之前,首先應對該令牌流的語法表進行設置5.3 懂得了在一程序中如何引用自定義的類中的方法和變量,在程序開頭加入 import 類名;在程序中加入類名實例 =new 類名 (); 然后使用實例 .方法(),實例 .變量即可。5.4 htmlparser用于對 html 頁面進行解析很實用,它是一個功能比較強大的工具。本文對 Java 解析 HTML 文檔的過程作了簡單闡述,并
15、通編寫嵌入 java 小程序字節(jié)碼文件的 html 文檔、利用 Java 實現(xiàn) HTML 的編輯及 StreamTokenzer 建立了深入的分析。 Java實現(xiàn)對 Html 文檔的分析具有快速性、簡單性等特點,當然在其實現(xiàn)過程中必將存在著一些不足之處,以后將會慢慢改進。但是,隨著計算機語言的發(fā)展,對網(wǎng)絡更加的人性化的迫切要求, java 技術(shù)隨速發(fā)展必將成最受歡迎的計算機網(wǎng)絡編輯語言之一。HTML 解析器2011-04-03 10:05:53今天已經(jīng)是有做HTML 解析器的想法好幾天了,一開始是一個朋友要我?guī)兔μ幚硐聫木W(wǎng)頁上的表格中獲取信息,然后分項保存到數(shù)據(jù)庫中,實現(xiàn)數(shù)據(jù)本地化。一開始就打
16、算好好做一個,以后也可以通用, 經(jīng)過一個多星期的資料收集和試驗,現(xiàn)在分析器的雛形已經(jīng)出來了。在一開始的時候打算直接用.NET 中字符處理的方法來做,但過于復雜和麻煩,而且效率不高; 然后有想到把HTML 當做 XML 用 XML 相關(guān)的類來解析,但HTML 的語法比較松散;還試過SgmlReader ,這個東西的解析也不夠滿意。最后覺得用正則表達式來做(我學習了5 天,已經(jīng)深入到自動機的理論), 選用的原因:一、效率高;二、容錯性好。應為 HTML 沒有 XML 那樣嚴格的語法規(guī)范, HTML 要松散些。但正則表達式有個缺點,如果要匹配最近的正則表達式要相當復雜,而且我也沒有研究出來。我的解決
17、辦法是象Table用 Match 匹配出文字, 然后用 Match 的 index 獲得匹配的位置,再用 SubString 方法取得值字符串。 效果還不錯哦。 現(xiàn)在遇到的問題:如果 Table 中包含 Table 那么對 TR 的分解將出來錯誤。這個解析器只是作為個人愛好去研究,陸陸續(xù)續(xù)的投入精力, 持續(xù)了很長時間, 這期間發(fā)生了很多的事情。我在上海落腳很長時間后才又繼續(xù)開發(fā),并把項目命名為Wittiness 。項目的目的:構(gòu)建一個Web 信息挖掘機,能夠高效方便的從網(wǎng)頁中截取到需要的信息。構(gòu)建思路是:解析HTML 標記- 構(gòu)建層次對象- 查詢獲取承載了需要信息的對象 - 按對象層次輸出結(jié)果其中難度比較大的就是解析標記和查詢獲取對象。解析標記我用過了正則表達式,字符串判斷,SgmlReader ,最好覺得 SgmlReader 用起來簡單,效率也高。查詢獲取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度建筑起重機械安全標準制定與實施合同3篇
- 二零二五年度加氣站設備維修與技術(shù)培訓服務合同3篇
- 二零二五年度房屋買賣居間合同中介機構(gòu)責任與義務規(guī)范
- 二零二五年度小學生閱讀理解家教合同3篇
- 2025年度智能家電全面維修服務合同模板2篇
- 二零二五年度教務主任任期目標責任聘用合同3篇
- 二零二五年度建筑公司勞動合同范本:勞動合同續(xù)簽條件及程序3篇
- 二零二五年度海外工程勞務輸出合同3篇
- 二零二五年度辦公室改造與企業(yè)文化塑造合同3篇
- 二零二五年度城市排水系統(tǒng)PPP項目合作合同協(xié)議
- 2024年三年級英語教學工作總結(jié)(修改)
- 咖啡廳店面轉(zhuǎn)讓協(xié)議書
- 期末(試題)-2024-2025學年人教PEP版英語六年級上冊
- 鮮奶購銷合同模板
- 申論公務員考試試題與參考答案(2024年)
- DB4101T 9.1-2023 反恐怖防范管理規(guī)范 第1部分:通則
- 2024-2030年中國公安信息化建設與IT應用行業(yè)競爭策略及投資模式分析報告
- 2024年加油站場地出租協(xié)議
- 南寧房地產(chǎn)市場月報2024年08月
- 2024年金融理財-擔保公司考試近5年真題附答案
- 高中語文古代文學課件:先秦文學
評論
0/150
提交評論