`

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";//错误
   
    节点的属性按照页面中实际的大小写进行书写
    如: //DIV[@class="title"]/EM[@class="right"]/A
   意思就是找到页面中div的class为title的大块,然后向下找节点为EM,同时其class为right的小块,再继续延伸找到此小块下的A节 点。

需要注意的是,你写的xpath路径必须得是连续的,比如说
<div class="title">
   <div>
      <em class="right"><a></a></em>
   </div>
</div>

这个时候如果你按照上述的xpath来找a标签的话,很显然是找不到的,因为div class=“title”下是没有em的,对于新手需要特别注意。


对于xpath的写法,可以参考 http://www.w3school.com.cn/xpath/

5.对于table的处理

需要注意的是如果你给解析器的字符串是下面的这种形式
<tbody>
   <tr>
      <td id="tag"><a href="http://blog.163.com/xing_mu_1/blog/sdfs.html">ABC</a></td>
   </tr>
</tbody>

如果我现在想要找上述内容中的td,给定XPATH //TD[@id='tag'],你会发现,程序根本无法找到这个node,原因是对于neko来说,对于一个不完整的table,他根本不会将其组装成 一个dom树,也就是说上面的内容经过解析器转换之后,就只会保留
<a href='http://blog.163.com/xing_mu_1/blog/sdfs.html'>
    ABC
</a>
这一段内容,其他的已经被neko无视掉了。
解决办法,在这段内容的前后加入一段table的闭合标签之后再放入解析器中进行解析
<table>
<tbody>
   <tr>
      <td id="tag"><a href="http://blog.163.com/xing_mu_1/blog/sdfs.html">ABC</a></td>
   </tr>
</tbody>
</table>


分享到:
评论

相关推荐

    nekohtml+xpath实例,及注意事项

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

    nekohtml+dom4j

    【nekohtml+dom4j】是一个用于处理和解析HTML及XML文档的组合工具,它在IT领域中常被用作强大的网络数据抓取和分析工具。在这个组合中,nekohtml扮演着核心角色,而dom4j则提供了强大的DOM(Document Object Model)...

    html解析例子,用nekohtml写的

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

    nekohtml-1.9.22.zip

    NekoHTML常被用于数据抓取、网页分析、自动化测试等场景,尤其是在处理非标准的、由用户生成的或者来自互联网的HTML内容时。 在Java项目中,你可以通过Maven或Gradle等依赖管理工具来引入NekoHTML,或者直接将下载...

    上传nekohtml-1.9.9.zip

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

    元搜索引擎search.zip

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

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

    这个库常用于处理不规则或非标准的HTML,比如在抓取网页数据或进行网页分析时,确保能够正确解析不完整的HTML结构。 4. **xercesImpl.jar, xml-apis.jar**: 这两个jar包是Apache Xerces项目的一部分,提供XML解析器...

    dom4j jaxen-1.zip

    当DOM4J结合JAXEN时,用户可以利用JAXEN的强大XPath解析能力,通过DOM4J的便捷API来访问和操作XML文档。 在实际应用中,首先需要将`dom4j-1.6.1.jar`和`jaxen-1.1-beta-6.jar`这两个库导入到项目中。然后,可以创建...

    jaxen-1.1-beta-7.zip

    总的来说,Jaxen是一个强大的工具,它为Java开发者提供了灵活且高效的XML数据提取方法,尤其在需要跨不同XML处理器使用XPath时,其优势更为明显。通过 **jaxen-1.1-beta-7.zip** 包中的JAR文件,我们可以轻松地在...

    Java网络爬虫jar包

    爬取的数据通常需要存储以便后续处理或分析。可以使用文件系统、数据库(如MySQL、MongoDB)或NoSQL存储(如HBase、Cassandra)。例如,JDBC用于与关系型数据库交互,而Jongo或Morphia是针对MongoDB的Java库。 5. ...

    httpunit测试包

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

    webmagic的所有jar包

    2. **webmagic-extension.jar**:这个扩展包提供了对更多特性的支持,如XPath解析器、Jsoup解析器、Cheerio解析器等,可以根据需求选择合适的HTML解析库。此外,还包含了一些实用工具类和策略类,方便开发者自定义...

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

    更复杂的爬虫可能还需要识别和处理JavaScript生成的内容,这时可能需要用到如Selenium这样的浏览器自动化工具。 5. **存储与处理**:提取的数据需要存储起来,可以是文件系统、数据库或者云存储。在Java中,JDBC...

    java常用类库中文速查表

    JXPath可以使用Xpath语法操纵符合Java类命名规范的JavaBeans。NekoHtml是一个简单的HTML扫描器和标签补偿器,用于解析HTML文档。 HTTP协议支持方面,Apache提供了高效的HTTP客户端编程工具包,支持HTTP协议最新版本...

    SSH 中jar包说明

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

Global site tag (gtag.js) - Google Analytics