近日在研究爬虫相关的东东,用到 HTML Parser,其他的都不说了,网上多的是,对自定义的 tag 有点心得体会,来说说。
一、HTML 简单介绍
用百度百科的话来说:
htmlparser 是一个纯的java写的html解析的库,它不依赖于其它的 java 库文件,主要用于改造或
提取 html。它能超高速解析 html,而且不会出错。
毫不夸张地说,htmlparser 就是目前最好的 html 解析和分析的工具。
无论你是想抓取网页数据还是改造 html 的内容,用了 htmlparser 绝对会忍不住称赞。
用其官方自己的话来说:
HTML Parser is a Java library used to parse HTML in either a linear or nested fashion. Primarily used for transformation or extraction, it features filters, visitors, custom tags and easy to use JavaBeans. It is a fast, robust and well tested package.
二、对于 IFrame 这类常见的 tag,奇怪 HTML Parser 居然会没有(我用的是目前最新的 htmlparser-2.0.jar),网上找了一堆,都似乎没有个好办法,自己慢慢看其 Java Doc 尝试,居然还弄出来了。
首先新建个 Java 工程,创建目录结构 org/htmlparser/tags,并把从官网下载的 htmlparser-2.0.jar 添加到工程,反编译一下 FrameTag.class,参照编写 IFrameTag.java,完整内容如下:
然后编译这个类得到 IFrameTag.class 文件,再用 WinRAR 或者 7Zip 打开官方的 jar 包,把自己编译好的这个 IFrameTag.class 放到 jar 包目录 org.htmlparser.tags 下,这个就得到了一个完整的 jar 包。这时候就可以删除我们工程里自定义的目录结构 org/htmlparser/tags 了。
接下来就是怎么使用了,通常使用可以使用 OrFilter 的组合,通过 extractAllNodesThatMatch 来提取节点。不过在这之前,需要先小小修改一下代码,否则这个自定义的 tag 还是不起作用的。在调用
之后,还需要设置一下(这才是关键)
只有这样,后面通过 extractAllNodesThatMatch 的才能正确提取到这个 tag。
Good luck!
参考文献:
1、HTML Parser 官方主页:http://htmlparser.sourceforge.net/
2、HTML Parser 官方文档:http://htmlparser.sourceforge.net/javadoc/index.html
3、HTML Parser 百度百科:http://baike.baidu.com/view/1174491.htm