`
流浪鱼
  • 浏览: 1693889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HTML文档解析器 NekoHTML

 
阅读更多

NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档 过程中常犯的错误。

NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了 Xerces Native Interface (XNI),后者是Xerces2的实现基础。

 

现在流行的HTML解析工具主要有HTML Parser和nekohtml,我就不细介绍他们了,有兴趣的话可以自己google。个人比较喜欢用nekohtml+xerces,xerces实 际上也是一个XML的解析包,nekohtml建筑在其之上,两者搭配后可将网页解析成一颗DOM树,这样我们对于网页的操作就转化为对这棵树的操作了, 而这正是它和HTML Parser的不同之处,也是我喜欢它的原因。
     我们对网页的操作主要通过org.w3c.dom中提供的接口(nekohtml+xerces提供这些接口的实现),熟悉XML解析的朋友对这个包一定 不会陌生。这个包中用的比较多的接口有:Node、Document、Element、Text等。Node是DOM树中所有节点根接口,它的子接口有 Document、ProcessingInstruction、Element、Comment、Text等,具体的继承层次请参考java doc。正如这些接口的名字说显示的,它们对应于DOM树中相应的元素,这里我就不细说了,下面我们通过一个例子来说明它们的使用方法。
     从网页中抽取文本是一项很平常的工作,HTML Parser中提供了一个TextExtractingVisitor来实现这一点,但nekohtml没有现成这样的类,我们自己写一个也不难:

import java.io.BufferedReader;
import java.io.FileReader;

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;


public class Demo {
public static String TextExtractor(Node root){
   //若是文本节点的话,直接返回
   if (root.getNodeType() == Node.TEXT_NODE) {
    return root.getNodeValue().trim();
   }
   if(root.getNodeType() == Node.ELEMENT_NODE) {
    Element elmt = (Element) root;
    //抛弃脚本
    if (elmt.getTagName().equals("STYLE")
      || elmt.getTagName().equals("SCRIPT"))
     return "";
   
    NodeList children = elmt.getChildNodes();
    StringBuilder text = new StringBuilder();
    for (int i = 0; i < children.getLength(); i++) {
     text.append(TextExtractor(children.item(i)));
    }
    return text.toString();
   }
   //对其它类型的节点,返回空值
   return "";
}
public static void main(String[] args) throws Exception{
   //生成html parser
   DOMParser parser = new DOMParser();
   //设置网页的默认编码
   parser.setProperty(
     "http://cyberneko.org/html/properties/default-encoding ",
     "gb18030");
   //input file
   BufferedReader in = new BufferedReader(new FileReader("input.htm"));
   parser.parse(new InputSource(in));
   Document doc = parser.getDocument();
   //获得body节点,以此为根,计算其文本内容
   Node body = doc.getElementsByTagName("BODY").item(0);
   System.out.println(TextExtractor(body));
}
}

     除了提供DOM接口外,nekohtml还有一些其他功能,如格式化网页文本、确保网页格式良好(well-formed)等,具体可参见nekohtml的文档

分享到:
评论

相关推荐

    NekoHtml解析 html 文件

    NekoHtml是一个开源的、Java实现的HTML解析器,它主要被设计用来处理不规则的、现实世界中的HTML文档。这个解析器的核心是NekoParser,它能够将HTML源代码转化为DOM(Document Object Model)结构,使得开发者可以...

    nekohtml包能够解析HTML文件

    NekoHTML是一个简单地HTML扫描器和标签补偿器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的...这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。

    Java解析HTML之NekoHTML

    在Java中解析HTML时,一个常用的库是NekoHTML,它是一个开源项目,主要用于构建和解析不完整的、错误的HTML文档。本篇文章将深入探讨NekoHTML的工作原理以及如何在Java中使用它。 NekoHTML是由Apache Software ...

    html解析例子,用nekohtml写的

    NekoHTML的核心类是`org.cyberneko.html.parsers.DOMParser`,它是基于Xerces的DOM解析器,它能够将HTML文档转化为标准的W3C Document对象,这使得我们可以使用XPath或CSS选择器来查询和操作HTML元素。在提供的`Neko...

    nekohtml解析器

    NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问...这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档 过程中常犯的错误。

    NekoHtml 解析内容时需要注意的地方

    NekoHtml是一款开源的HTML解析器,它由Apache Software Foundation旗下的Xerces项目开发,主要用于处理不规范的HTML文档。NekoHtml的设计目标是能够解析那些在语法上不完全符合标准的HTML,从而帮助开发者处理网络上...

    nekohtml-1.9.13.zip

    NekoHTML是一个开源的、轻量级的Java库,它主要用作HTML解析器和XML解析器。在处理不规则或非标准格式的HTML时,NekoHTML特别有用,因为它可以将这些不规则的HTML文档转换成结构化的XML文档,从而使得其他XML工具...

    NekoHTML学习笔记.rar

    这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了Xerces ...

    NekoHTML

    NekoHTML是一个开源的Java库,主要用于解析HTML文档并将其转换为标准的XML DOM(文档对象模型)。这个库是Xerces项目的一部分,由Apache软件基金会维护。NekoHTML特别适用于处理不规范或非标准的HTML,因为它可以...

    NekoHTML学习笔记.doc

    这个解析器能投扫描 HTML 文件并“修正”许多作者(人或机器)在编写 HTML 文档过程中常犯的错误。 一、NekoHTML 的基本概念 NekoHTML 是一个基于 Java 的 HTML 扫描器,由 J. Andrew Clark 编写。它使用 Xerces ...

    nekoHtml 1.9.19 加 source 源码 html分析jar

    nekoHtml通过提供一个健壮的解析器,将非结构化的HTML文档转换为可操作的DOM(Document Object Model)树,使开发者能够方便地访问和操作HTML元素。它还支持XML规范,可以处理不完全符合标准的HTML文档,这在处理...

    NekoHTML的相关用法以及j代码包

    NekoHTML是一个开源的Java库,主要用于解析和构建XML和HTML文档。它是Xerces2 Java解析器的一部分,由Apache软件基金会开发。NekoHTML的主要功能是将不规范的HTML源代码转换为标准的XML,使得开发者可以更容易地处理...

    NeKoHTML 1.9.21

    4. `xercesImpl.jar`: NeKoHTML依赖于Xerces Java XML解析器,这个jar包包含了Xerces的实现。 5. `xml-apis.jar`: 包含了XML API的接口定义,是Xerces和其他XML解析器的公共接口。 在使用NeKoHTML时,开发者需要将`...

    nekohtml-1.9.14源码及jar包

    **nekohtml**是一个轻量级的解析器,主要功能是解析不标准的HTML或XHTML文档,将其转换为标准的DOM(Document Object Model)结构。由于互联网上的HTML文档往往存在不规范的情况,如缺失闭合标签、非法嵌套等,...

    nekohtml 帮助类

    `nekohtml` 是一个开源的Java库,用于解析HTML和XML文档,它提供了一个Xerces Lite解析器,能够处理不严格的HTML标记,使得在Java应用程序中处理网页内容变得更加容易。这个帮助类可能指的是`nekohtml`库中的一些...

    nekohtml-1.9.7.zip

    这个库的核心功能是Xerces-J,一个强大的XML解析器,但是NekoHTML增加了对HTML特定特性的理解和处理。通过使用NekoHTML,开发者可以将HTML文档转换成标准的XML文档,从而方便进行后续的处理和操作。 在描述中提到...

    nekohtml+dom4j

    HTML通常比XML松散,不遵循严格的规则,而nekohtml通过解析HTML源码,修正语法错误,添加缺失的闭合标签,使非标准的HTML文档可以被XML解析器正确处理。这对于需要对网页内容进行深入分析的程序来说是非常有用的,...

    nekohtml-1.9.18_

    3. **解析器**:NekoHTML包含一个高效的HTML解析器,能够快速有效地处理大量HTML文档。 4. **安全性**:对于可能存在的XSS(Cross-Site Scripting)攻击,NekoHTML提供了一定程度的防护,通过转义潜在的恶意脚本元素...

    nekohtml使用笔记 txt

    NekoHTML 是一款轻量级且高效的 HTML 解析器库,它可以将不规范的 HTML 文档解析为接近标准的 XML 结构,便于后续处理和分析。该库尤其适用于对性能有较高要求的应用场景。 根据描述,“透明地创建 HTML 解析器”...

Global site tag (gtag.js) - Google Analytics