当前位置:七道奇文章资讯网站建设网站美工
日期:2009-12-15 11:53:00  来源:本站整理

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,完好内容以下:

 
  1. package org.htmlparser.tags;   
  2.   
  3. import org.htmlparser.lexer.Page;   
  4. import org.htmlparser.nodes.TagNode;   
  5.   
  6. public class IFrameTag extends TagNode   
  7. {   
  8.   private static final String[] mIds = { "IFRAME" };   
  9.   
  10.   public String[] getIds()   
  11.   {   
  12.     return mIds;   
  13.   }   
  14.   
  15.   public String getFrameLocation()   
  16.   {   
  17.     String ret = super.getAttribute("SRC");   
  18.     if (null == ret)   
  19.       ret = "";   
  20.     else if (null != super.getPage()) {   
  21.       ret = super.getPage().getAbsoluteURL(ret);   
  22.     }   
  23.     return ret;   
  24.   }   
  25.   
  26.   public void setFrameLocation(String url)   
  27.   {   
  28.     super.setAttribute("SRC", url);   
  29.   }   
  30.   
  31.   public String getFrameName()   
  32.   {   
  33.     return super.getAttribute("NAME");   
  34.   }   
  35.   
  36.   public String toString()   
  37.   {   
  38.     return "IFRAME TAG : IFrame " + getFrameName() + " at " + getFrameLocation() + "; begins at : " + super.getStartPosition() + "; ends at : " + super.getEndPosition();   
  39.   }   
  40. }  

然后编译这个类得到 IFrameTag.class 文件,再用 WinRAR 大概 7Zip 翻开官方的 jar 包,把自己编译好的这个 IFrameTag.class 放到 jar 包目录 org.htmlparser.tags 下,这个就得到了一个完好的 jar 包.这时刻便可以删除我们工程里自定义的目录构造 org/htmlparser/tags 了.

接下来就是怎么利用了,普通利用可以利用 OrFilter 的组合,通过 extractAllNodesThatMatch 来提取节点.不过在这之前,需求先小小改正一下代码,不然这个自定义的 tag 还是不起作用的.在调用

 
  1. org.htmlparser.Parser hpHtmlParser = org.htmlparser.Parser.createParser(sHtmlContent, sCharSet);  

 之后,还需求设置一下(这才是关键)

 
  1. PrototypicalNodeFactory pnfPrototypicalNodeFactory = new PrototypicalNodeFactory();   
  2. pnfPrototypicalNodeFactory.registerTag(new IFrameTag());   
  3. hpHtmlParser.setNodeFactory(pnfPrototypicalNodeFactory);  

  只有这样,背面通过 extractAllNodesThatMatch 的才能精确提取到这个 tag.

  Good luck!


  以上是“HTML Parser 对 IFrame 的处理[网站美工]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • html底子知识
  • 简单的HTML标签让64位的Windows 7蓝屏
  • 从SQL中的一个表中导出HTML文件表格
  • <b>解析器错误信息: 无法辨认的配置节"xhtmlConformance"办理办法</b>
  • <b>java嵌入HTML</b>
  • 用Java实现HTML文件替换数据库存储数据
  • <b>Java里面去掉网页里的HTML标志的办法</b>
  • 论坛、聊天室中滤除HTML标志
  • Struts1.x系列教程(5):HTML标签库
  • [JAVA100例]018、操纵HTML语言
  • Struts标签库中的HTML标签
  • Struts HTML标签库大全
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .