关于HtmlParser中Parser【org.htmlparser.Parser】这个类奇怪的地方...求解释【已获得解释】

昨天在使用HtmlParser解析爬虫爬下的网页时,用了其中的Parser这个对象来解析网页,但是一个奇怪的问题出现了,求解释....

@Test
public void test() {
Parser parser;
try {
parser = new Parser("http://www.163.com");
parser.setEncoding("gb2312");
NodeFilter title_filter = new TagNameFilter("title");
NodeList nodelist = parser.parse(title_filter);
System.out.println(nodelist.size());
Node title_node = nodelist.elementAt(0);
String title = title_node.toPlainTextString();// 提取title标签的文本内容
System.out.println(title.trim());
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

执行之后的结果是:网易 1

当使用parser第二次的时候,问题出现了,难道parser对象使用一次后,会执行什么内部操作?

        @Test
public void test() {
Parser parser;
try {
parser = new Parser("http://www.163.com");
parser.setEncoding("gb2312");
NodeFilter title_filter = new TagNameFilter("title");
NodeList nodelist = parser.parse(title_filter);
System.out.println(nodelist.size());
Node title_node = nodelist.elementAt(0);
String title = title_node.toPlainTextString();// 提取title标签的文本内容
System.out.println(title.trim());

// parser = new Parser("http://www.163.com");
parser.setEncoding("gb2312");
title_filter = new TagNameFilter("title");
nodelist = parser.parse(title_filter);
System.out.println(nodelist.size());
title_node = nodelist.elementAt(0);
title = title_node.toPlainTextString();// 提取title标签的文本内容
System.out.println(title.trim());
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

第一次调用仍让可以获得结果:网易,但是执行第二次调用parser来解析title的时候,就解析不出来了,获取的nodeList也是空了....

求解释。
------------------------------解释如下---------------------------------

第二次调用parser对象的时候,需要reset一下。

-----------------------------------------------------------------------

posted @ 2011-12-22 09:36  matrix1024  阅读(1400)  评论(1编辑  收藏  举报