xuyongping 发表于 2013-2-4 19:50:42

Htmlparser

htmlparser
  htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或
  提取html。它能超高速解析html,而且不会出错。
  毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。
  无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。


取得一段html代码里面所有的链接C#版本,java版本类似:
  string htmlcode = "<HTML><HEAD><TITLE>AAA</TITLE></HEAD><BODY>" + ...... + "</BODY></HTML>";
  Parser parser = Parser.CreateParser(htmlcode, "GBK");
  HtmlPage page = new HtmlPage(parser);
  try
  { parser.VisitAllNodesWith(page);}
  catch (ParserException e1)
  { e1 = null;}
  NodeList nodelist = page.Body;
  NodeFilter filter = new TagNameFilter("A");
  nodelist = nodelist.ExtractAllNodesThatMatch(filter, true);
  for (int i = 0; i < nodelist.Size(); i++)
  {
  LinkTag link=(LinkTag) nodelist.ElementAt(i);
  System.Console.Write(link.GetAttribute("href") + "\n");
  }

有效的链接:http://www.yeeach.com/2008/05/19/htmlparser%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/







主要是如下几种方式

采用Visitor方式访问Html
try {
    Parser parser = new Parser();
    parser.setURL(”http://www.google.com”);
    parser.setEncoding(parser.getEncoding());
    NodeVisitor visitor = new NodeVisitor() {
      public void visitTag(Tag tag) {
            logger.fatal(”testVisitorAll()Tag name is :”
                  + tag.getTagName() + ” \n Class is :”
                  + tag.getClass());
      }

    };

    parser.visitAllNodesWith(visitor);
} catch (ParserException e) {
    e.printStackTrace();
}

采用Filter方式访问html
try {

    NodeFilter filter = new NodeClassFilter(LinkTag.class);
    Parser parser = new Parser();
    parser.setURL(”http://www.google.com”);
    parser.setEncoding(parser.getEncoding());
    NodeList list = parser.extractAllNodesThatMatch(filter);
    for (int i = 0; i < list.size(); i++) {
      LinkTag node = (LinkTag) list.elementAt(i);
      logger.fatal(”testLinkTag() Link is :” + node.extractLink());
    }
} catch (Exception e) {
    e.printStackTrace();
}

采用org.htmlparser.beans方式
另外htmlparser 还在org.htmlparser.beans中对一些常用的方法进行了封装,以简化操作,例如:

Parser parser = new Parser();

LinkBean linkBean = new LinkBean();
linkBean.setURL(”http://www.google.com”);
URL[] urls = linkBean.getLinks();

for (int i = 0; i < urls.length; i++) {
    URL url = urls;
    logger.fatal(”testLinkBean() -urlis :” + url);
}
页: [1]
查看完整版本: Htmlparser