html parser 是一个解析html的java框架 ,可以将你需要的内容从网页中提取出来,可以用来做一个网页爬虫或者简单的数据提取器。
框架主页:http://htmlparser.sourceforge.net/
看了下jtidy,也是和它一样的功能,但是html parser似乎更为简便,解析起来支持中文,编码方便。
学习资源:
http://www.ibm.com/developerworks/cn/java/l-html-parser/
http://allenj2ee.javaeye.com/blog/222454
http://www.blogjava.net/amigoxie/archive/2008/01/18/176200.html
html parser主要使用一个parser来解析网页,通过过滤器filter或者visitor来访问所需要的节点,目前使用的版本为1.6。
html parser是使用递归的方式来层级选取节点,所以在使用过滤器和visitor的时候需要添加true来支持子元素的查询,否则默认就只查询当前节点。
这是最简单的代码,通过parser的构造函数传入一个需要解析的网址,生成一个parser对象。
通过parser对象,就可以解析出一系列的元素。
filter:
filter是过滤器,我们使用不同的过滤器来获得想要的不同结果。
所有的过滤器实现与NodeFilter接口。
其中最常用的为css选择器过滤器,字符串选择过滤器,节点类型选择过滤器(NodeClassFilter),标签名过滤器(TagNameFilter)等。
使用方法为:
new一个过滤器
将过滤器放入需要解析的parser或者nodeList中,true代表递归过滤,默认为false
visitor:
visitor是一个标准访问器,用来定义为访问html页面的哪一部分。
例如最常用的htmlPage
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
parser.visitAllNodesWith(visitor);
String textInPage = visitor.getTitle();
System.out.println(textInPage);
// get body
NodeList nodelist = visitor.getBody();
System.out.print(nodelist.asString().trim());
这样就可以将body分离出来
visitor默认继承与NodeVisitor
最常用的当然是htmlpage和tagfindingvisitor
其实html parser不难用,只是网页规则千变万化,解析起来有难度而已。