`

HTML parser选型测试

    博客分类:
  • CMS
阅读更多
内容管理(cms)常常需要将网站频道的摘要(summery)合并到父频道的封面,引入HTML parser,
 可以结构化方式操作HTML内容,使网页内容的提取、重构变得容易。
 以下链接列出了相关的java opensource项目
 http://www.open-open.com/30.htm
 根据网友的评论,将htmlcleaner、htmlparser、nekohtml列入候选。
 以附件html作为测试用例,按照常见的getElementsByTagName提取Body,
 以getElementById获取id为'content6'的script
 测试编码如下:
java 代码
 
  1. static public String Neko(String path) throws SAXException, IOException{  
  2.     DOMParser parser = new DOMParser();  
  3.     //InputSource in = new InputSource(new Reader());  
  4.     parser.parse(TPPath+path);  
  5.     Document doc=parser.getDocument();  
  6.     org.w3c.dom.NodeList nl = doc.getElementsByTagName("body");  
  7.     System.out.println(printNode(nl.item(0)));  
  8.     System.out.println("----------------------------------------");  
  9.     org.w3c.dom.Element n = doc.getElementById("content6");  
  10.     System.out.println(printNode(n));  
  11.     return "";  
  12. }  
  13. static public String htmlparser(String path) throws ParserException{  
  14.     // one of several constructors  
  15.     Parser p = new Parser(TPPath+path);  
  16.     NodeList nl=p.parse(new TagNameFilter("body"));  
  17.     System.out.println(nl.elementAt(0).toHtml());  
  18.     System.out.println("----------------------------------------");  
  19.     Parser p2 = new Parser(TPPath+path);  
  20.     NodeList nl2=p2.parse(new HasAttributeFilter("id","content6"));  
  21.     System.out.println(nl2.elementAt(0).toHtml());  
  22.     return "";  
  23. }  
  24. static public String htmlcleaner(String path) throws Exception{  
  25.     // one of several constructors  
  26.     HtmlCleaner cleaner = new HtmlCleaner(new File(TPPath+path));  
  27.     org.w3c.dom.Document doc = cleaner.createDOM();  
  28.     org.w3c.dom.NodeList nl = doc.getElementsByTagName("body");  
  29.     System.out.println(printNode(nl.item(0)));  
  30.     System.out.println("----------------------------------------");  
  31.     org.w3c.dom.Element n=doc.getElementById("content6");  
  32.     System.out.println(printNode(n));  
  33.     return "";  
  34. }  
一个打印dom节点的辅助方法如下:
java 代码
 
  1. public static String printNode(Node node) {  
  2.     StringBuffer sbuf=new StringBuffer();  
  3.     String nn=node.getNodeName();  
  4.     boolean btag=true;  
  5.     if(nn.equals("#text")) btag=false;  
  6.     if(btag){  
  7.       if(node.hasAttributes()){  
  8.       NamedNodeMap attrs=node.getAttributes();  
  9.       StringBuffer abuf= new StringBuffer();  
  10.       for(int i=0,len=attrs.getLength(); i<len; i++){  
  11.           Node attr=attrs.item(i);  
  12.           abuf.append(" "+attr.getNodeName()+"=\""+attr.getNodeValue()+"\"");  
  13.       }  
  14.       sbuf.append("<"+nn+abuf.toString()+">");  
  15.       }else  sbuf.append("<"+nn+">");  
  16.     }  
  17.     if(node.hasChildNodes()){  
  18.      Node child = node.getFirstChild();  
  19.      sbuf.append(child.getNodeValue());  
  20.      while (child != null) {  
  21.          sbuf.append(printNode(child));  
  22.          child = child.getNextSibling();  
  23.      }  
  24.     }  
  25.     if(btag)  
  26.       sbuf.append("</"+nn+">");  
  27.     return sbuf.toString();  
  28. }  

 测试结果如下:
                   getElementsByTagName        getElementById
htmlcleaner         抛出异常java.lang.NoSuchFieldError: fRecognizedFeatures
htmlparser         在分析到script中的字符串包含"</b>"出现逻辑错误,将该</b>误判为script结束
nekohtml            pass                        pass

nekohtml入选。
分享到:
评论
1 楼 chen4w 2007-08-14  
从数据库表中直接获取的数据形式上可能并不满足要求,你看sina新闻的摘要,标题字数都对仗得那么好,没有人工干预恐怕很难做到

相关推荐

    html_parser.zip_Parser_html_html parser_html_parser_zip

    在给定的"html_parser.zip"压缩包中,我们可以推测包含了一个使用Delphi7或Delphi XE2编写的HTML解析库或者示例代码。Delphi是一种强大的Object Pascal编程环境,常用于开发Windows应用程序。 HTML解析器的核心功能...

    HTML-Parser-3.51.rar_html parser_parser perl_perl html

    `HTML-Parser`是Perl中一个专门用于解析HTML的模块,它使得程序员能够有效地解析和操作HTML文档。 标题中的"HTML-Parser-3.51.rar"表明这是一个关于HTML-Parser 3.51版本的压缩包,通常包含了该模块的源代码、文档...

    table_parser类及测试文件

    在这个测试文件中,开发者可能会创建一个包含示例HTML表格的字符串,然后使用`table_parser`类进行解析,验证其功能是否正常。测试通常包括不同场景的覆盖,如空表格、多列数据、带有嵌套表格的复杂结构等。 值得...

    Python-html5parser一个用于Python基于C的快速HTML5解析

    Python中的`html5-parser`库是一个高效的HTML5解析器,它使用C语言编写,从而提供了比纯Python解析更快的速度。这个库是为了解决在处理大量HTML数据时,需要快速、准确地解析文档的需求。在Python开发中,尤其是在...

    html_parser.rar_Parser_delphi html parser_html parser

    本压缩包"html_parser.rar"包含了一个用Delphi语言编写的HTML解析器,它利用了汇编内联技术来提高性能。Delphi是一种基于Object Pascal的高效能、面向对象的编程语言,常用于开发Windows桌面应用。 在解析HTML时,...

    html-parser.js

    对html进行转换,适用爬虫/小程序富文本显示等;对html进行转换,适用爬虫/小程序富文本显示等对html进行转换,适用爬虫/小程序富文本显示等对html进行转换,适用爬虫/小程序富文本显示等

    前端开源库-html-react-parser

    **前端开源库-html-react-parser** 在前端开发领域,高效地处理HTML字符串并将其转换为React组件是常见的需求。`html-react-parser`就是这样一个强大的开源库,它专门用于将HTML字符串解析成React元素,使得开发者...

    enju parser enju parser

    enju parser enju parser

    html parser 应用ie的内置parser可以解析动态脚本html

    在IT行业中,HTML解析器广泛应用于网页抓取、数据挖掘、自动化测试等领域。本文将深入探讨如何利用微软IE浏览器的内置解析器——MSHTML库,来创建一个能够解析动态脚本和HTML的自定义解析器。 标题提到的"html ...

    html-dom-parser:HTML到DOM解析器

    html-dom-parser 在服务器(Node.js)和客户端(浏览器)上均可使用HTML到DOM解析器: HTMLDOMParser(string[, options])解析器将HTML字符串转换为描述DOM树JavaScript对象。例子const parse = require ( '...

    gumbo-parser-0.10.1_Parser_

    在自动化测试中,可以模拟浏览器解析HTML,检查页面的结构是否正确。 值得注意的是,gumbo-parser并不直接提供DOM操作的功能,它仅负责解析HTML到DOM树的构建。如果你需要进行DOM操作,可能需要结合其他库(如...

    jericho html Parser

    **jericho HTML Parser** 是一个Java库,专门用于解析HTML文档。它被设计用来处理不规范的HTML,即那些在语法上可能不完全符合HTML标准的实际网页。在处理这种复杂性和不可预测性方面,jericho HTML Parser表现出了...

    前端开源库-html-dom-parser

    HTML DOM Parser是一款重要的前端开源库,它主要用于将HTML字符串转换为DOM(Document Object Model)对象。DOM是HTML和XML文档的结构化表示,允许开发者通过JavaScript或其他编程语言对文档进行动态操作。这款库的...

    Html_Parser.zip_Parser_java parser

    HTML解析在IT行业中是一项至关重要的技能,特别是在网页抓取、数据挖掘和自动化测试等领域。`Html_Parser.zip` 是一个第三方的HTML解析库,可能是为了帮助开发者更有效地处理和解析HTML文档。在这个压缩包中,包含了...

    Laravel开发-php-simple-html-dom-parser

    而"php-simple-html-dom-parser"是一个PHP库,专门用于处理和解析HTML文档,它提供了类似jQuery的API,使得操作HTML文档变得简单直观。这个包的Laravel版本则将这个强大的解析器集成到Laravel框架中,让开发者可以更...

    python html parser

    Python HTML Parser是一个强大的工具,用于在Python环境中解析HTML和XML文档。这个库使得开发者能够方便地提取和操作网页上的数据,特别是在进行网络爬虫或数据挖掘项目时非常有用。本篇将详细介绍Python中的...

Global site tag (gtag.js) - Google Analytics