Java网页解析

 介绍

今天给大家推荐一款最好的网页解析类库—HtmlCleaner。至少是目前为止最好的Java解析库。

         与HtmlCleaner结缘是在年初的时候,因为一项工作需要解析Html页面,所以我在网上遍寻Html解析库。

网上口碑极佳的是HTML Parser这个库,我试了一下,速度极慢,处理一个比较大的网页需要几百毫秒,更要命的是,有些网页解析不了!

经过千辛万苦,我终于找到了籍籍无名的HtmlCleanner。一见之下,惊为天人!

HtmlCleanner

HtmlCleaner极其短小精悍,源码一共只有260KB,并且速度惊人,只需要10毫秒左右就可以处理完HtmlParser需要300毫秒处理的Html页面。

而且,根据我对网上随机的网页进行的测试,没有一个对付不了的。

打开HtmlCleaner的javadoc,常常的一串接口和类。别怕,那些都不用您操心。我们只需要关心HtmlCleaner这个类就可以了。

HtmlCleaner库的使用极其简便,只需要调用HtmlCleaner类的几个方法即可。

         典型的使用过程如下:

HtmlCleaner cleaner = new HtmlCleaner(...);     // one of few constructors

      cleaner.setXXX(...)                             // optionally, set cleaner's behaviour

      clener.clean();                                 // calls cleaning process

        clean方法就完成了对Html页面的解析。

      cleaner.writeXmlXXX(...);                       // writes resulting XML to string, file or any output stream

      // cleaner.createDOM();                         // creates DOM of resulting xml

        DomSerializer类的实例的createDOM方法可以返回org.w3c.dom.Document对象。不错,这就是Java标准的xml文档的表示。然后,你就可以使用任何第三方库来处理xml文档了。

      // cleaner.createJDom();                        // creates JDom of resulting xml

         你也可以生成JDom对象,用JDom处理。

 

         下面是我用HtmlCleaner写的一个方法

public Document convertHtmlToXML(URL url){

       // create an instance of HtmlCleaner

       HtmlCleaner cleaner = new HtmlCleaner();

        

       // take default cleaner properties

       CleanerProperties props = cleaner.getProperties();

       TagNode tagNode=null;

       Document document=null;

       try {

           tagNode = cleaner.clean(url);

           document= new DomSerializer(props, true).createDOM(tagNode);

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (ParserConfigurationException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return document;

}

         得到Document之后,可以使用dom4j等xml处理库进行处理。

HtmlCleanner实现方法

         查看HtmlCleanner的源码可以看到,HtmlCleanner的设计思想非常简单,就是使用正则表达式解析Html页面。

         而它的数据容器类TagNode也和我设计OXmlEd库的想法类似。也是简单的把XML当做一个树的结构。不过TagNode类要比我的INode接口复杂一些,多了不少东东。我的INode接口内容很少,因为我不关心注释。

         我的OXmlEd后来根据HtmlCleaner做了更新,这样,您可以使用OXmlEd库来直接操纵HtmlCleaner解析的Html页面的内容了。但最近很忙,一直没有整理,过几天再上传OXmlEd的新版本吧。OXmlEd库的介绍在

http://blog.csdn.net/shendl/archive/2007/08/23/1755218.aspx

         Host站点在:http://sourceforge.net/projects/oxmled/

总结

         HtmlCleanner库写得非常好,由此可见,一个好的设计思想胜过一切。开源库中良莠不齐,这很正常,HtmlCleaner是我寻获的一把利器,现在转送给诸君。

你可能感兴趣的:(java,Web,html解析)