Hunter的大杂烩 技术学习笔记

August 30, 2008

html parser对比

Filed under: 技术话题 — hunter @ 4:17 pm

对比 htmlcxx (c++)和 htmlparser(java) :

1. 功能上htmlparser会更强大一些,提供了filter/http下载等能力,还有vistor模式等等,灵活强大;而htmlcxx主要是一个分析库,有html/css两个分析器,可以将内容分析为dom类型的节点树,以提供遍历的能力,还可以分析节点的属性,相比之下也比较灵活;

2.  两者在分析tag方面的能力相差不大,性能上,感觉htmlcxx速度比htmlparser快很多(不知道是不是我的elicpse导致的);

范例:

//htmlcxx_test.cc
 tree tr;

 HTML::ParserDom parser;
 parser.parse(sFileBuffer);
 tr = parser.getTree();
 
 tree::iterator it = tr.begin();


 while(it++ != tr.end())
 {
  if (!it->isTag())
   continue;
  if (it->tagName().compare(“a”) == 0)
  {
   it->parseAttributes();
   cout < < "a:href:" << it->attribute(“href”).second < < endl;   }   else if (it->tagName().compare(“script”) == 0)
  {
   it->parseAttributes();
   cout < < "script:src:" << it->attribute(“src”).second < < endl;   }   else if (it->tagName().compare(“img”) == 0)
  {
   it->parseAttributes();
   cout < < "img:src:" << it->attribute(“src”).second < < endl;   }   else if (it->tagName().compare(“link”) == 0)
  {
   it->parseAttributes();
   cout < < "link:href:" << it->attribute(“href”).second < < endl;    //std::cout <<"show:"<< it->text() < < endl;       } //htmlparser_test.java    Parser parser = new Parser(args[0]);    //parser.setInputHTML(file);    NodeList tags = parser.parse(new myFilter()); //        = parser.extractAllNodesThatMatch();        SimpleNodeIterator iter = tags.elements();        while(iter.hasMoreNodes())        {         TagNode tag = (TagNode)iter.nextNode();         if (tag.getTagName().equalsIgnoreCase("a") ||          tag.getTagName().equalsIgnoreCase("link") )         {          System.out.println("a|link:" + tag.getAttribute("href"));         }         else if (tag.getTagName().equalsIgnoreCase("img") ||              tag.getTagName().equalsIgnoreCase("script") )         {          System.out.println("img|script:" + tag.getAttribute("src"));         }        }   =============================== 其他一些类似库: 1. htcheck 主要是一个破link检测工具,里面有一个htparser库,可惜写的有些糟糕,又没有例子,难以啃下;

2. htmlparser1.0 代码风格相当不错,似乎是mozilla一位贡献者的作品,可惜需要安装qt,而且功能较少,只能分析link

3. htmlpaser_v200  一个分布式引擎的开源组件,可惜是.net的

4. HTMLReader 来自codeproject的htmlreader,似乎主要是用来加亮语法

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress