1、org.htmlparser
?
??? 定义了htmlparser的一些基础类。其中最为重要的是Parser类。
??? Parser是htmlparser的最核心的类,其构造函数提供了如下:Parser.createParser (String html, String charset)、 Parser ()、Parser (Lexer lexer, ParserFeedback fb)、Parser (URLConnection connection, ParserFeedback fb)、Parser (String resource, ParserFeedback feedback)、 Parser (String resource)
? 各构造函数的具体用法及含义可以查看其代码,很容易理解。
? Parser常用的几个方法:
- ??elements获取元素
??? Parser parser = new Parser (”http://www.google.com")/;
??? for (NodeIterator i = parser.elements (); i.hasMoreElements (); )
????? processMyNodes (i.nextNode ());
- parse (NodeFilter filter):通过NodeFilter方式获取
- visitAllNodesWith (NodeVisitor visitor):通过Nodevisitor方式
- extractAllNodesThatMatch (NodeFilter filter):通过NodeFilter方式
2、org.htmlparser.beans
??? 对Visitor和Filter的方法进行了封装,定义了针对一些常用html元素操作的bean,简化对常用元素的提取操作。
??? 包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。
3、org.htmlparser.nodes
??? 定义了基础的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。
4、org.htmlparser.tags
??? 定义了htmlparser的各种tag。
5、org.htmlparser.filters
??? 定义了htmlparser所提供的各种filter,主要通过extractAllNodesThatMatch (NodeFilter filter)来对html页面指定类型的元素进行过滤,包括:AndFilter、CssSelectorNodeFilter、 HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、 IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、 NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter
6、org.htmlparser.visitors
?? 定义了htmlparser所提供的各种visitor,主要通过visitAllNodesWith (NodeVisitor visitor)来对html页面元素进行遍历,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、 ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、 TextExtractingVisitor、UrlModifyingVisitor
?
7、org.htmlparser.parserapplications
?? 定义了一些实用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,这几个类也可以作为htmlparser使用样例。
8、org.htmlparser.tests
?? 对各种功能的单元测试用例,也可以作为htmlparser使用的样例。
?
htmlparser对html页面处理的算法
?
主要是如下几种方式
- 采用Visitor方式访问Html
try { Parser parser = new Parser(); parser.setURL(”http://www.google.com")/; parser.setEncoding(parser.getEncoding()); NodeVisitor visitor = new NodeVisitor() { public void visitTag(Tag tag) { logger.fatal(”testVisitorAll() Tag name is :” + tag.getTagName() + ” \n Class is :” + tag.getClass()); } }; parser.visitAllNodesWith(visitor); } catch (ParserException e) { e.printStackTrace(); }
?
- 采用Filter方式访问html
try { NodeFilter filter = new NodeClassFilter(LinkTag.class); Parser parser = new Parser(); parser.setURL(”http://www.google.com")/; parser.setEncoding(parser.getEncoding()); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < list.size(); i++)