最近学习了下htmlparser,用这东西解析html还是蛮好用的,为了防止以后忘掉,现总结一下。
首先 ,介绍下HTMLParser的核心类,org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。主要的构造函数如下:
public Parser (); public Parser (String resource) throws ParserException; public Parser (String resource, ParserFeedback feedback) throws ParserException; public Parser (URLConnection connection) throws ParserException; public Parser (URLConnection connection, ParserFeedback fb) throws ParserException; public Parser (Lexer lexer); public Parser (Lexer lexer, ParserFeedback fb);
另外 ,该类还提供了一个静态方法,用来
public static Parser createParser (String html, String charset);
对于大多数使用者来说,使用最多的是通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer则是一个相对比较高级的话题,放到以后再讨论吧。
常见的创建Parser的方法, 如下:
方法一:.通过url提取网络上的网页
//使用public Parser();构造函数 Parser parser = new Parser(); parser.setURL("http://www.yahoo.com.cn"); //使用public Parser (URLConnection connection) throws ParserException;构造函数 Parser parser = new Parser( (HttpURLConnection) (new URL("http://www.baidu.com")).openConnection() ); org.htmlparser.http.ConnectionManager manager = org.htmlparser.lexer.Page.getConnectionManager(); Parser parser = new Parser(manager.openConnection("http://www.baidu.com")); parser.setEncoding("GB2312");
方法二: 提取本地网页文件 (通过读文件把网页文件转化成字符串)
//使用静态方法 Parser parser=Parser.createParser(html,charset);
HtmlParserUtils.java公用类
该文件是自己编写的一个可复用的类,专门用来创建Parser对象,这里提供出来是为了方便后面的例子使用,代码如下:
package com.javaeye.suo.htmlparser; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.htmlparser.Parser; import org.htmlparser.http.ConnectionManager; import org.htmlparser.lexer.Page; import org.htmlparser.util.ParserException; public class HtmlParserUtils { public static Parser getParserWithUrlStr(String urlStr, String encoding) { Parser parser = new Parser(); try { parser.setURL(urlStr); parser.setEncoding(encoding); } catch (ParserException e) { e.printStackTrace(); return null; } return parser; } public static Parser getParserWithUrlConn(String urlStr, String encoding) { Parser parser = null; try { URL url = new URL(urlStr); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); parser = new Parser(urlConn); parser.setEncoding(encoding); return parser; } catch (ParserException e1) { e1.printStackTrace(); return null; } catch (MalformedURLException e1) { e1.printStackTrace(); return null; } catch (IOException e1) { e1.printStackTrace(); return null; } } //推荐使用下面这个方法,效率比较高。 public static Parser getParserWithUrlConn2(String urlStr, String encoding) { Parser parser = null; try { ConnectionManager manager = Page.getConnectionManager(); parser = new Parser(manager.openConnection(urlStr)); parser.setEncoding(encoding); return parser; } catch (ParserException e) { e.printStackTrace(); return null; } } public static Parser createParser(String htmlContent, String encoding){ Parser parser = Parser.createParser(htmlContent,encoding); return parser; } }