`
Dustin
  • 浏览: 314691 次
  • 性别: Icon_minigender_1
  • 来自: 广州/成都
社区版块
存档分类
最新评论

NekoHTML 和 XPath

阅读更多

  如果需要在HTML页面中提取数据,那么NekoHTML 是个不错的工具。因为HTML跟XML不一样,可能存在一些格式不完整的元素,譬如没有end tag的table等,这个时候,NekoHTML是个很尽责的清道夫和修理工,可以帮助我们整理这些缺陷数据,最终生成一个DOM Tree。  得到DOM Tree话,使用XPath就可以轻松获取所需数据了:-)

  下面是几个需要注意的问题:

1、如何使用NekoHTML?

     必须在 Java Build Path里加入 nekohtml.jar , xercesImpl.jar 以及xalan.jar。下载的NekoHTML目录中并没有xercesImpl.jar和xalan.jar,需要自己下载。

 

2、如何获取XPath?

    当然大家可以把网页的代码下下来,然后使用“人工智能”的方式获取,但是过程确实让人眼花缭乱、心力交瘁。使用FireBug吧,可以自动生成XPath。

    updated:

    Firebug生成的XPath中如果含有TBODY标签,需要把TBODY去掉,否则不能正确获取网页的内容。如Firebug生成的XPath为/html/body/table/tbody/tr,那么则需要修改为/html/body/table/tr。

 

4、如何正确结合NekoHTML和XPath?

    XPath的Tag必须大写。如

    String divXpath = "//DIV";//正确

    String divXpath = "//div";//错误

 

 下面举个例子,提取当当网图书的ISBN信息:

DOMParser parser = new DOMParser();
    try {
    	   //设置网页的默认编码
    	   parser.setProperty("http://cyberneko.org/html/properties/default-encoding","gb2312");
    	   /*The Xerces HTML DOM implementation does not support namespaces 
    	   and cannot represent XHTML documents with namespace information. 
    	   Therefore, in order to use the default HTML DOM implementation with NekoHTML's 
    	   DOMParser to parse XHTML documents, you must turn off namespace processing.*/
    	   parser.setFeature("http://xml.org/sax/features/namespaces", false);

    	   String strURL = "http://product.dangdang.com/product.aspx?product_id=9317290";
    	   BufferedReader in = new BufferedReader(
    			   new InputStreamReader(
    					   new URL(strURL).openStream()));
    	   parser.parse(new InputSource(in));
    	   in.close();
    	  } catch (Exception e) {
    	   e.printStackTrace();
    	  }
    	  Document doc = parser.getDocument();
    	  // tags should be in upper case
    	  String productsXpath = "/HTML/BODY/DIV[2]/DIV[4]/DIV[2]/DIV/DIV[3]/UL[@class]/LI[9]";
    	  NodeList products;
    	  try {
    	      products = XPathAPI.selectNodeList(doc, productsXpath);
    	      System.out.println("found: " + products.getLength());
    	      Node node = null;
    	      for(int i=0; i< products.getLength();i++)
    	      {
    	    	  node = products.item(i);
    	    	  System.out.println( i + ":\n" + node.getTextContent());
    	      }
    	  }catch (TransformerException e) {
    	      e.printStackTrace();
    	  } 

 

一些有用的链接:

1、Java HTML Parser 比较

2、java XPATH

3、XPath定位

5
0
分享到:
评论
3 楼 tan8888 2012-05-10  
NekoHTML 还是兼容太差,有一些网页还是无法用Xpath来提取
2 楼 malajisi 2011-12-12  
import org.apache.xpath.XPathAPI;
products = XPathAPI.selectNodeList(doc, productsXpath); 

请问我的Eclipse import的XPathAPI包为什么有错?XPathAPI.selectNodeList就无法调用。。。谢谢~
1 楼 hzh86316 2010-06-18  
我在用NekoHTML对HTML进行处理时,所有类似&amp;的字符实体引用都不能正确解析,输出都是?。应该怎么解决呢?
我已经将http://cyberneko.org/html/features/scanner/notify-builtin-refs设置为true了。

相关推荐

    nekohtml+xpath实例,及注意事项

    标题 "nekohtml+xpath 实例,及注意事项" 指涉的是使用 nekohtml 库结合 XPath 表达式进行 HTML 解析和查询的技术。NekoHTML 是一个开源的 Java 库,它允许开发者解析和构建不完整的或错误的 HTML 文档。XPath 则是...

    元搜索引擎search.zip

    应用领域:1、采集人物信息2、采集电子报纸3、使用NekoHTML和XPath解析百度搜索返回结果4、使用JSoup和CSSPath解析百度搜索返回结果5、使用Google AJAX API获取谷歌搜索结果 标签:search

    nekohtml+dom4j

    【nekohtml+dom4j】是一个用于处理和解析HTML及XML文档的组合工具,它在IT领域中常被用作强大的网络数据抓取...配合XPath和相关的库文件,开发者可以轻松地处理复杂网页结构,提取所需信息,进一步进行数据分析和处理。

    搜索引擎核心技术与实现

    - **从HTML文件中提取文本**:涵盖了字符集编码识别、网页编码转换、使用正则表达式和HTMLParser进行数据提取、结构化信息提取、网页DOM结构分析、使用NekoHTML和XPath提取信息、网页去噪和结构相似度计算、提取标题...

    html解析例子,用nekohtml写的

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

    nekohtml-1.9.22.zip

    之后,你可以通过DOM API遍历和修改这个`Document`,或者使用XPath表达式来查找和提取特定的元素或内容。 总的来说,NekoHTML是一个强大的工具,它为Java开发者提供了一种可靠的方式来处理HTML和XML文档,无论这些...

    上传nekohtml-1.9.9.zip

    - **数据提取**:在抓取或处理网页数据时,可以先用NekoHTML解析HTML,然后使用XPath或DOM操作提取所需信息。 - **测试工具**:在开发Web应用时,可以利用NekoHTML来验证HTML模板是否正确生成。 在使用"nekohtml-...

    kantan.xpath:Scala的XPath包装器

    上提供了文档和教程,但对于那些正在寻找一些快速示例的用户而言: import kantan . xpath . _ // Basic kantan.xpath types.import kantan . xpath . implicits . _ // Implicit operators and literals.import ...

    内含httpunit、js、nekohtml、resolver、servlet等多个jar包

    Xerces是Java平台上的一个强大的XML处理工具,它实现了W3C的DOM、SAX和XPath规范。xml-apis.jar包含了XML API的基本接口,而xercesImpl.jar则包含了具体的实现。 5. **serializer.jar**: 这个jar包包含了XML序列化...

    dom4j jaxen-1.zip

    本文将围绕“XPath与XML解析”这一主题,深入探讨DOM4J和JAXEN这两个Java库如何协同工作,帮助开发者高效地处理XML文档。 DOM4J是Java社区中流行的XML处理库,它提供了一个全面且灵活的API来操作XML文档。该库基于...

    jaxen-1.1-beta-7.zip

    它提供了一个独立于特定XML API的XPath实现,可以在DOM、DOM4J、JDOM、XOM、NekoHTML等多种不同的XML模型上工作,极大地增强了XML处理的灵活性。这种跨平台的特性使得开发人员能够在不更换XML解析器的情况下,依然...

    Java网络爬虫jar包

    此外,还有其他库如HTMLUnit和NekoHTML,它们更接近浏览器的解析行为。 3. **CSS选择器与XPath**: 为了定位特定的HTML元素,CSS选择器和XPath表达式非常有用。Jsoup支持CSS选择器,而XPath可以在JDOM或DOM4J等XML...

    httpunit测试包

    1. **xercesImpl.jar**:Xerces是一个开源的XML解析器,它实现了W3C的DOM、SAX2和XPath API。在HttpUnit中,Xerces用于解析HTTP响应中的XML内容,确保正确理解和处理XML结构的数据。 2. **js.jar**:这是Rhino ...

    webmagic的所有jar包

    7. **xom.jar** 和 **nekohtml.jar**:这两个库主要用于XML和HTML的解析。XOM提供了一个简单、一致且类型安全的API来处理XML,而NekoHTML则是用于HTML解析的库。 8. **commons-lang3.jar**,**commons-io.jar** 和 ...

    [搜索链接]Java网络爬虫(蜘蛛)源码.zip

    Java中常用的HTML解析库有Jsoup和NekoHTML。这些库能解析HTML标签,提取文本内容,识别DOM元素,以及处理CSS选择器等。 4. **数据提取器**:数据提取器根据需求从HTML中抽取特定信息,如文章标题、作者、发布时间等...

    java常用类库中文速查表

    NekoHtml是一个简单的HTML扫描器和标签补偿器,用于解析HTML文档。 HTTP协议支持方面,Apache提供了高效的HTTP客户端编程工具包,支持HTTP协议最新版本。Apache提供了一个基于JavaMailAPI的简化版,用于发送Email的...

    SSH 中jar包说明

    - **作用**:支持DOM、SAX以及XPath等多种方式处理XML文档,方便进行数据交换和解析。 #### 11. **ehcache-1.1.jar** - **用途**:EHCache是一个广泛使用的高性能纯Java实现的二级缓存框架。 - **作用**:通过内存...

Global site tag (gtag.js) - Google Analytics