使用html parser

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 = new Parser( " http://www.baidu.com " );

 

这是最简单的代码,通过parser的构造函数传入一个需要解析的网址,生成一个parser对象。

通过parser对象,就可以解析出一系列的元素。

 

filter:

filter是过滤器,我们使用不同的过滤器来获得想要的不同结果。

所有的过滤器实现与NodeFilter接口。

其中最常用的为css选择器过滤器,字符串选择过滤器,节点类型选择过滤器(NodeClassFilter),标签名过滤器(TagNameFilter)等。

使用html parser_第1张图片

使用方法为:

new一个过滤器

  
  
NodeFilter filter = new CssSelectorNodeFilter( " .cp_kind " );

将过滤器放入需要解析的parser或者nodeList中,true代表递归过滤,默认为false

 

  
  
NodeList allProductList = nodeList.extractAllNodesThatMatch(filter, true );

 

 

 

visitor:

visitor是一个标准访问器,用来定义为访问html页面的哪一部分。

例如最常用的htmlPage

 

代码
   
   
HtmlPage visitor = new HtmlPage(parser);

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

使用html parser_第2张图片

最常用的当然是htmlpage和tagfindingvisitor

 

其实html parser不难用,只是网页规则千变万化,解析起来有难度而已。

你可能感兴趣的:(parser)