1. 程式人生 > >Java Lucene (9):HTMLParser與html頁面解析

Java Lucene (9):HTMLParser與html頁面解析

java lucene 技術(9):HTMLParser與html頁面解析

HTMLParser 是一個開源的Java庫,它提供了介面,支援線性和巢狀HTML文字。在實際的專案中只需要將htmlparser.jar 匯入classpath中,就可以使用HTMLParser提供的API了。

HTML3種類型的節點:RemarkNode:html中的註釋,TagNode:標籤節點,TextNode:文字節點。HTMLParser將讀取的二進位制資料流,進行編碼轉換、詞法分析等操作,生成樹形層次結構的Node節點集合。下面的程式說明了一個範例html頁面被HTMLParser解析的結果。

程式9_1:

Parser parser =

new Parser ("E:/t.html");

parser.setEncoding("UTF-8");

NodeList list = parser.parse (null);

String str = list.toString();

System.out.println (str);

其中t.html原始碼如下:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>北京龍捲風科技</title>

</head>

<body>

<p>

龍捲風科技_優秀的資訊檢索平臺

網址http://www.tornado.cn

</p>

</body>

</html>

列印結果如下:

Txt (0[0,0],1[0,1]): ?Tag (1[0,1],7[0,7]): html

Txt (7[0,7],9[1,0]): /n

Tag (9[1,0],15[1,6]): head

Txt (15[1,6],17[2,0]): /n

Tag (17[2,0],86[2,69]): meta http-equiv="Content-Type" content="text/html; ch...

Txt (86[2,69],88[3,0]): /n

Tag (88[3,0],95[3,7]): title

Txt (95[3,7],102[3,14]): 北京龍捲風科技

End (102[3,14],110[3,22]): /title

Txt (110[3,22],112[4,0]): /n

End (112[4,0],119[4,7]): /head

Txt (119[4,7],121[5,0]): /n

Tag (121[5,0],127[5,6]): body

Txt (127[5,6],129[6,0]): /n

Tag (129[6,0],132[6,3]): p

Txt (132[6,3],177[9,0]): /n龍捲風科技_優秀的資訊檢索平臺/n網址:http://www.tornado.cn/n

End (177[9,0],181[9,4]): /p

Txt (181[9,4],183[10,0]): /n

End (183[10,0],190[10,7]): /body

Txt (190[10,7],192[11,0]): /n

End (192[11,0],199[11,7]): /html

Txt (199[11,7],201[12,0]): /n

下面建立一個測試類,實現從html頁面中提取文字內容資訊。

程式9-2

publicclass SimpleHtmlparser {

publicstaticvoid main(String args[]) throws ParserException{

Parser parser;

String body = "";

parser = new Parser(args[0]);

parser.setEncoding("UTF-8");

HtmlPage htmlpage = new HtmlPage(parser);

parser.visitAllNodesWith(htmlpage);

body = htmlpage.getBody().toHtml();

Parser nodesParser;

NodeList nodeList = null;

nodesParser = Parser.createParser(body, "UTF-8");

NodeFilter textFilter = new NodeClassFilter(TextNode.class);

try

{

nodeList = nodesParser.parse(textFilter);

}

catch (ParserException e)

{

e.printStackTrace();

}

if (null == nodeList)

{

System.out.println(" ");

}

Node[] nodes = nodeList.toNodeArray();

StringBuffer result = new StringBuffer();

for (int i = 0; i < nodes.length; i++)

{

Node nextNode = (Node) nodes[i];

String content = "";

if (nextNode instanceof TextNode)

{

TextNode textnode = (TextNode) nextNode;

content = textnode.getText();

}

result.append(" ");

System.out.println(content);

}

}

}

 

經過測試,發現HTMLParser雖然可以較好的提取html頁面文字資訊,但對javascript標籤的處理不好,另外對樣式表<style>也不能較好的清除掉。