HTMLParser使用詳解(1)

黄舟
發布: 2016-12-29 15:49:06
原創
2681 人瀏覽過

在研究搜尋引擎的開發中,對於HTML網頁的處理是核心的一個環節。網路上有很多開源的程式碼,對於Java來說,HTMLParser是比較著名並且廣泛應用的一個。 HTMLParser的首頁是http://htmlparser.sourceforge.net/,最後的更新是2006年9月的1.6版。不過沒關係,HTML的內容已經很久沒有太大的改變了,HTMLParser處理起來基本上沒有任何問題。 HTMLParser具有小巧,快速的優點,缺點是相關文件比較少(英文的也少),許多功能需要自己摸索。對於初學者還是要花一些功夫的,而一旦上手以後,會發現HTMLParser的結構設計很巧妙,非常實用,基本你的各種需求都可以滿足。
這裡我根據自己這幾個月來的經驗,寫了一點入門的東西,希望能對新學習HTMLParser的朋友們有所幫助。 (不過當年高考本人語文只比及格高一分,所以文法方面的問題還希望大家多多擔待)

HTMLParser的核心模組是org.htmlparser.Parser類,這個類實際完成了對於HTML頁面的分析工作。這個類別有下面幾個建構子:

public Parser ();
public Parser (Lexer lexer, ParserFeedback fb);
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;
public Parser (String resource, ParserFeedback feedback) throws ParserException;
public Parser (String resource) throws ParserException;
public Parser (Lexer lexer);
public Parser (URLConnection connection) throws ParserException;
和一个静态类 public static Parser createParser (String html, String charset);
登入後複製

對於大多數使用者來說,使用最多的是透過一個URLConnection或是一個保存有網頁內容的字串來初始化Parser,或是使用靜態函數來產生一個Parser對象。 ParserFeedback的程式碼很簡單,是針對除錯和追蹤分析過程的,一般不需要改變。而使用Lexer則是個相對比較進階的話題,放到以後再討論吧。
這裡比較有趣的一點是,如果需要設定頁面的編碼方式的話,不使用Lexer就只有靜態函數一個方法了。對於大多數中文頁面來說,好像這是應該用得比較多的方法。

下面是初始化Parser的例子。

/**
* @author www.baizeju.com
*/
package com.baizeju.htmlparsertester;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import org.htmlparser.visitors.TextExtractingVisitor;
import org.htmlparser.Parser;
/**
* @author www.baizeju.com
*/
public class Main {
private static String ENCODE = "GBK";
private static void message( String szMsg ) {
try{ System.out.println(new String(szMsg.getBytes(ENCODE), System.getProperty("file.encoding"))); } catch(Exception e ){}
}
public static String openFile( String szFileName ) {
try {
BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) );
String szContent="";
String szTemp;
while ( (szTemp = bis.readLine()) != null) {
szContent+=szTemp+"/n";
}
bis.close();
return szContent;
}
catch( Exception e ) {
return "";
}
}
public static void main(String[] args) {
String szContent = openFile( "E:/My Sites/HTMLParserTester.html");
try{
//Parser parser = Parser.createParser(szContent, ENCODE);
//Parser parser = new Parser( szContent );
Parser parser = new Parser( (HttpURLConnection) (new URL("http://127.0.0.1:8080/HTMLParserTester.html")).openConnection() );
TextExtractingVisitor visitor = new TextExtractingVisitor();
parser.visitAllNodesWith(visitor);
String textInPage = visitor.getExtractedText();
message(textInPage);
}
catch( Exception e ) { 
}
}
}
登入後複製

加重的部分測試了幾種不同的初始化方法,後面的顯示了結果。大家看到能Parser出內容就可以了,如何操作訪問Parser的內容我們在後面討論。

 以上就是HTMLParser使用詳解(1)的內容,更多相關內容請關注PHP中文網(www.php.cn)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板