如果需要在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="sdfs.html">ABC</a></td>
</tr>
</tbody>
如果我现在想要找上述内容中的td,给定XPATH //TD[@id='tag'],你会发现,程序根本无法找到这个node,原因是对于neko来说,对于一个不完整的table,他根本不会将其组装成一个dom树,也就是说上面的内容经过解析器转换之后,就只会保留
<a href='sdfs.html'>
ABC
</a>
这一段内容,其他的已经被neko无视掉了。
解决办法,在这段内容的前后加入一段table的闭合标签之后再放入解析器中进行解析
<table>
<tbody>
<tr>
<td id="tag"><a href="sdfs.html">ABC</a></td>
</tr>
</tbody>
</table>
分享到:
相关推荐
博客链接中提到的是作者Tivonhou在iteye上的博客文章,虽然具体内容无法查看,但通常这类文章可能会涵盖如何使用NekoHtml解析HTML文件、解决常见问题、优化性能,以及与其他解析库对比等方面的知识。 在压缩包...
例如,如果你需要从一个HTML页面中提取特定的信息,你可以先用NekoHTML解析页面,然后通过DOM API来查询和提取所需的数据。此外,由于NekoHTML能够处理不规范的HTML,它在处理网络上那些格式不正确的页面时具有优势...
NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档 过程中常...
NekoHTML是一个简单地HTML扫描器和标签补偿器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的...
在Java中解析HTML时,一个常用的库是NekoHTML,它是一个开源项目,主要用于构建和解析不完整的、错误的HTML文档。本篇文章将深入探讨NekoHTML的工作原理以及如何在Java中使用它。 NekoHTML是由Apache Software ...
`Neko.java`可能是另一个类,它封装了NekoHTML解析器的主要逻辑,提供了更方便的API供`Caipiao.java`调用。 在`README.txt`中,作者很可能详细解释了如何运行这些示例程序,包括必要的依赖和步骤。如果你遇到任何...
在使用NekoHTML时,首先需要将其添加到项目依赖中。对于Java项目,这通常意味着将JAR文件包含在类路径中。1.9.13版本的NekoHTML可能不支持最新的Java版本,因此在使用前需要确认其与项目的兼容性。 在解析HTML时,...
使用 NekoHTML 需要下载 nekohtml-latest.zip,并将其添加到 CLASSPATH 中。然后,使用 JAXP 实例化解析器对象时,可以透明地创建 HTML 解析器。也可以使用 org.cyberneko.html.parsers 包的 DOM 和 SAX 解析器类来...
1. **错误容忍**:NekoHTML能处理各种语法错误和不完整的HTML标记,这使得它能在遇到网页结构混乱的情况时依然能解析出有意义的内容。 2. **结构化内容**:通过构建DOM树,NekoHTML将HTML文档转化为一种结构化表示...
nekoHtml的核心组件是NekoHTML解析器,它基于一个称为“词法分析器”(Tokenizer)的组件,该组件将HTML文本分解成一系列标记(Tokens)。这些标记随后由解析器转换为DOM节点。此外,nekoHtml还包括了一个名为...
3. 在处理JavaScript生成的动态内容时,NekoHTML无能为力,因为它是静态HTML解析器,无法执行JavaScript代码。 总的来说,NekoHTML是Java开发中处理HTML文档的一个实用工具,尤其适合那些需要将不规范HTML转换为...
NekoHTML技术预研说明,如何进行HTML页面解析,网页信息抽取
`NekoHTML`的核心解析工作由NekoHTML解析器执行,而`NekoHelper`可能就是为这个解析器提供辅助功能的工具类。 在使用`nekohtml`时,开发人员可以利用这些帮助类来实现以下功能: 1. **解析不规范的HTML**:由于`...
使用NeKoHTML时,开发者首先需要创建一个`DOMParser`实例,然后配置解析器以处理HTML或XHTML,接着设置输入源,最后调用`parse`方法解析HTML文本。解析完成后,`parse`方法会返回一个`Document`对象,供开发者进行...
- 数据爬虫:在抓取和分析网页内容时,nekohtml可以处理不规则的HTML,提取所需数据。 - HTML预览:在编辑器或IDE中,nekohtml可以用于预览不完整的或半格式化的HTML代码。 - Web服务:对于需要处理用户提交的...
首先,NekoHTML解析HTML文档,提取出有意义的内容,然后Lucene将这些内容建立索引,使得用户能够快速搜索到所需信息。这种组合在网站爬虫、内容管理系统和数据分析等领域非常常见。 总的来说,"nekohtml-1.9.7.zip...
NekoHTML is written using the Xerces Native Interface (XNI) that is the foundation of the Xerces2 implementation. This enables you to use the NekoHTML parser with existing XNI tools without ...
NekoHTML是一个简单地HTML扫描器和标签补偿器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的...
- **错误处理**:NekoHTML 在遇到错误或不完整的标签时,会尝试恢复并继续解析,提供更稳定的解析结果。 2. **XPath 使用**: - **选取节点**:XPath 通过路径表达式来选取 XML(或 HTML)文档中的节点,例如选取...