HTML Parser 对 IFrame 的处理[网站美工]
本文“HTML Parser 对 IFrame 的处理[网站美工]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
近日在研究爬虫相关的东东,用到 HTML Parser,其他的都不说了,网上多的是,对自定义的 tag 有点心得领会,来说说.
1、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.
2、关于 IFrame 这类常见的 tag,奇特 HTML Parser 竟然会没有(我用的是目前最新的 htmlparser-2.0.jar),网上找了一堆,都仿佛没有个好办法,自己渐渐看其 Java Doc 尝试,竟然还弄出来了.
首先新建个 Java 工程,成立目录构造 org/htmlparser/tags,并把从官网下载的 htmlparser-2.0.jar 增添到工程,反编译一下 FrameTag.class,参照编写 IFrameTag.java,完好内容以下:
- package org.htmlparser.tags;
- import org.htmlparser.lexer.Page;
- import org.htmlparser.nodes.TagNode;
- public class IFrameTag extends TagNode
- {
- private static final String[] mIds = { "IFRAME" };
- public String[] getIds()
- {
- return mIds;
- }
- public String getFrameLocation()
- {
- String ret = super.getAttribute("SRC");
- if (null == ret)
- ret = "";
- else if (null != super.getPage()) {
- ret = super.getPage().getAbsoluteURL(ret);
- }
- return ret;
- }
- public void setFrameLocation(String url)
- {
- super.setAttribute("SRC", url);
- }
- public String getFrameName()
- {
- return super.getAttribute("NAME");
- }
- public String toString()
- {
- return "IFRAME TAG : IFrame " + getFrameName() + " at " + getFrameLocation() + "; begins at : " + super.getStartPosition() + "; ends at : " + super.getEndPosition();
- }
- }
然后编译这个类得到 IFrameTag.class 文件,再用 WinRAR 大概 7Zip 翻开官方的 jar 包,把自己编译好的这个 IFrameTag.class 放到 jar 包目录 org.htmlparser.tags 下,这个就得到了一个完好的 jar 包.这时刻便可以删除我们工程里自定义的目录构造 org/htmlparser/tags 了.
接下来就是怎么利用了,普通利用可以利用 OrFilter 的组合,通过 extractAllNodesThatMatch 来提取节点.不过在这之前,需求先小小改正一下代码,不然这个自定义的 tag 还是不起作用的.在调用
- org.htmlparser.Parser hpHtmlParser = org.htmlparser.Parser.createParser(sHtmlContent, sCharSet);
之后,还需求设置一下(这才是关键)
- PrototypicalNodeFactory pnfPrototypicalNodeFactory = new PrototypicalNodeFactory();
- pnfPrototypicalNodeFactory.registerTag(new IFrameTag());
- hpHtmlParser.setNodeFactory(pnfPrototypicalNodeFactory);
只有这样,背面通过 extractAllNodesThatMatch 的才能精确提取到这个 tag.
Good luck!
以上是“HTML Parser 对 IFrame 的处理[网站美工]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |