注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

HTMLParser解析HTML实例  

2009-12-03 12:40:20|  分类: htmlparser |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

开发中经常会用到对html文件的解析,特别是在做爬虫的时候,更是会很频繁的用到对html的解析

htmlparser工具包,提供了对html进行解析的便利工程方法

下在是使用htmlparser对html进行解析的实例.


import org.htmlparser.Attribute;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.tags.ScriptTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
public class dfdasfads
{
   public static void main(String[] args) throws ParserException
{
        StringBuffer sb = new StringBuffer();
        sb.append(""p1\">"s2\" name=\"s22\">vvv
\r\n
.>\r\n
..>");
        System.out.println(new dfdasfads().getFilterBody(sb.toString()));
    }
    public String getFilterBody(String strBody)
{
        // 一、 htmlparser 处理提交
        Parser parser = Parser.createParser(strBody, "utf-8");
        NodeList list;
        String reValue = strBody;      
 try
{
            list = parser.parse(null);
            visitNodeList(list);
            reValue = list.toHtml();
       } catch (ParserException e1)
{
            e1.printStackTrace();
        }
        return reValue;
    }
    /** *//**
     * 移除所有标签的Id属性
     * @param list 标签集合
     */
     private void visitNodeList(NodeList list)
{
        System.out.println(">>>visitNodeList(list)");
        for (int i = 0; i < list.size(); i++)
{
            Node node = list.elementAt(i);
            if (node instanceof ScriptTag)
{
                list.remove(i);
                continue;
            } else if (node instanceof Tag)
{
                Tag _tag = (Tag) node;
                _tag.removeAttribute("id");
            }
            NodeList children = node.getChildren();
      if (children != null && children.size() > 0)
{
                visitNodeList(children);
            }
        }
        System.out.println("<<");
    }

}
62
 

FilterBody.java
import org.htmlparser.Attribute;
import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.tags.ScriptTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
 18public class FilterBody
{
   public static void main(String[] args) throws ParserException
{
        String sttt = ""true\" src=\"http://vhead.blog.sina.com.cn/player/outer_player.swf\" quality=\"high\" bgcolor=\"#ffffff\" width=\"424\" height=\"404\" name=\"vsplayer\" align=\"middle\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />";
        System.out.println(new FilterBody().getFilterBody(sttt));
    }
  public String getFilterBody(String strBody)
{
        // 一、 htmlparser 处理提交
        Parser parser = Parser.createParser(strBody, "utf-8");
        NodeList list;
        String reValue = strBody;
 try
{
            list = parser.parse(null);
            visitNodeList(list);
            reValue = list.toHtml();
        } catch (ParserException e1)
{
        }
        return reValue;
    }
    // 递归
    private void visitNodeList(NodeList list)
{
        for (int i = 0; i < list.size(); i++)
{
            Node node = list.elementAt(i);
           if (node instanceof Tag)
{
                if (node instanceof ScriptTag)
{
                    list.remove(i);
                    continue;
                }
                Tag _tag = (Tag) node;
                _tag.removeAttribute("id");
                _tag.removeAttribute("onload");
                _tag.removeAttribute("alt");
                String tagName = _tag.getTagName();
                if (tagName == null)
                    tagName = "";
                else
                    tagName = tagName.trim().toUpperCase();
                visitTag((Tag) node);
            }
            NodeList children = node.getChildren();
            if (children != null && children.size() > 0)
                visitNodeList(children);
        }
     }
    // 获取tag
    private void visitTag(Tag tag)
{
        String tagName = tag.getTagName();
 if (tagName != null && tagName.equalsIgnoreCase("embed"))
{
            tag.setEmptyXmlTag(false);
            tag.setAttribute("AllowNetworking", "\"none\"");
            tag.setAttribute("AllowScriptAccess", "never", '"');
            tag.setEmptyXmlTag(true);
        }
        Vector attrs = tag.getAttributesEx();
      for (int i = 0; i < attrs.size(); i++)
{
            Object obj = attrs.elementAt(i);
     if (obj != null && obj instanceof Attribute)
{
                visitAttribute((Attribute) obj, tag);
            }
        }
    }
    // 获取tag属性
   private void visitAttribute(Attribute attribute, Tag tag)
{

        String attName = attribute.getName();
        if (attName == null)
            attName = "";
        else
            attName = attName.trim().toLowerCase();
        String tagName = tag.getTagName();
        if (tagName == null)
            tagName = "";
        else
            tagName = tagName.trim().toLowerCase();
        String tagValue = tag.getText();
        if (tagValue == null)
            tagValue = "";
        else
            tagValue = tagValue.trim().toLowerCase();
        String attribValue = attribute.getValue();
        if (attribValue == null)
            attribValue = "";
        else
            attribValue = attribValue.trim().toLowerCase();
    }

}

  评论这张
 
阅读(3592)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017