`

nekohtml的简单使用

    博客分类:
  • HTML
阅读更多

     做了一段时间的网页解析的工作,有了些体会,写出来和大家分享。
     现在流行的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代码片段展示如何创建NekoParser实例,加载HTML文件,然后遍历和操作生成的DOM树。测试用例则可能包含了各种格式的HTML...

    NekoHTML学习笔记.doc

    使用 NekoHTML 需要下载 nekohtml-latest.zip,并将其添加到 CLASSPATH 中。然后,使用 JAXP 实例化解析器对象时,可以透明地创建 HTML 解析器。也可以使用 org.cyberneko.html.parsers 包的 DOM 和 SAX 解析器类来...

    Java解析HTML之NekoHTML

    下面是一个简单的示例,演示如何使用NekoHTML查找所有的`&lt;a&gt;`标签: ```java import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters....

    NekoHTML学习笔记.rar

    NekoHTML是一个简单地HTML扫描器和标签补偿器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。...NekoHTML的开发使用了Xerces Native Interface (XNI),后者是Xerces2的实现基础。

    nekohtml+dom4j

    这对于需要对网页内容进行深入分析的程序来说是非常有用的,因为它使得处理HTML就像处理XML一样简单。 dom4j是另一个Java库,它提供了一种灵活的方式来操作XML文档。DOM(Document Object Model)是一种国际标准,...

    nekohtml包能够解析HTML文件

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

    nekohtml+xpath实例,及注意事项

    文件名 "NekoGetStart.java" 暗示可能包含一个简单的 NekoHTML 使用入门示例,而 "MyNameSpaceContext.java" 可能是自定义的命名空间上下文类,用于处理带有命名空间的 HTML 文档。如果你想要深入理解这些知识点,...

    html2image 2.0.3 用于简单的html转图片

    &lt;artifactId&gt;nekohtml &lt;version&gt;1.9.14 &lt;groupId&gt;xml-apis &lt;artifactId&gt;xml-apis &lt;version&gt;1.4.01 &lt;groupId&gt;org.xhtmlrenderer &lt;artifactId&gt;flying-saucer-core &lt;version&gt;9.0.6 &lt;groupId&gt;...

    XSS脚本注入拦截框架 antisamy

    从外部视角看,AntiSamy的结构相对简单。其功能基于一个XML策略文件。首先,策略文件被读取并转换成Policy对象,该对象随后被传递给AntiSamy,用于解析和过滤输入数据。为了帮助完成解析和过滤任务,AntiSamy集成了...

    HttpClient 登录163邮箱

    这里使用了`nekohtml.jar`,这是一个用于解析HTML和XML文档的库,可以帮助解析和构建DOM树。 6. **Cookie管理** HttpClient通过`CookieStore`和`CookiePolicy`管理cookies。当收到包含Set-Cookie头的响应时,...

    htmlunit用到的jar包

    `slf4j-simple`是SLF4J的一个简单实现,用于输出基本的日志信息。 8. **xercesImpl** 和 **xml-apis**: 这两个jar包是Xerces XML解析器的实现和API,它们在解析XML文档时发挥作用。 在Java项目中使用HTMLUnit时,...

    htmlunit涉及的所有jar包

    SLF4J-api是接口,slf4j-simple是简单实现。 9. **guava-x.x.x.jar**:Google的Guava库提供了许多Java集合框架的扩展,如新的集合类型、函数式编程工具和并发工具等,HTMLUnit可能使用了其中的一些功能。 10. **...

    Java编写的网页浏览器

    在这个简单的网页浏览器中,开发者可能会使用Swing,因为它相对简单且包含丰富的组件,如JFrame(窗口)、JButton(按钮)、JLabel(标签)等,用于构建浏览器的基本界面,如地址栏、后退/前进按钮、书签等。...

    jaxen-1.1-beta-7.zip

    以下是一个简单的示例,展示了如何使用Jaxen来选取XML文档中的节点: ```java import org.jaxen.*; import org.dom4j.*; // 加载XML文档 Document document = DocumentHelper.parseText("&lt;root&gt;&lt;element&gt;Value...

    html转pdf的架包

    - **HTML解析**:Flying Saucer使用开源的开源的HTML解析器如NekoHTML或Jsoup来解析HTML源码,确保正确理解HTML结构。 - **CSS支持**:Flying Saucer 支持大部分CSS2.1和部分CSS3属性,但可能不支持所有现代浏览器的...

    selenium及依赖jar包(java)

    6. **nekohtml-1.9.21.jar**:NekoHTML是一个简单的HTML解析器,允许将不规范的HTML代码转换成标准的XML文档结构。Selenium可能使用它来解析和分析网页内容。 7. **SeleniumTest-1.jar**:这可能是一个自定义的测试...

    httpunit测试包

    8. **nekohtml.jar**:NekoHTML是一个开源的HTML解析器和DOM构建器,它可以解析HTML文档并生成一个可操作的DOM树。这对于处理HTML内容以及进行断言检查非常有用。 9. **rhino-patch.txt**:这可能是Rhino ...

    网页浏览器开发含代码和程序

    开发一个简单的Java浏览器,你需要理解和使用Java的Swing或JavaFX库来创建图形用户界面(GUI),这些库提供了用于创建窗口、按钮、文本框等UI元素的类。 在描述中提到,这个项目适合Java初学者,这意味着它可能包含...

Global site tag (gtag.js) - Google Analytics