HtmlParser学习笔记(一)-- 创建Parser对象

      最近学习了下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;
	}

}
 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值