Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
不得不承认,有时候使用python比c++方便很多,
就拿解析html来说,使用 Beautiful Soup 就比使用libtidy方便很多 - 当然也有可能是
Beautiful Soup封装的很厉害吧

使用Beautiful Soup的一个例子如下:
from bs4 import BeautifulSoup

soup 
= BeautifulSoup(open('List.htm'))
for a in soup.find_all('a',class_ = 'link'):
    
print (a.get('href'))
目的是找出html中class属性为link的a节点对应的href属性字符串
如果是使用c++ libtidy的话
对应的代码如下:
Bool TIDY_CALL tidyFilterCb(TidyDoc tdoc,TidyReportLevel lvl,uint line,uint col,ctmbstr mssg)
{  
    
return no;
}

void extractContent(TidyNode node,TidyDoc doc);

void parseContent(TidyNode node,TidyDoc doc)
{   
    TidyNode child;
    
for(child = tidyGetChild(node);child;child = tidyGetNext(child))
    {   
        
if(tidyNodeIsA(child))                    
            extractContent(child,doc);
        
else
            parseContent(child,doc);     
    }
}

void extractContent(TidyNode node,TidyDoc doc)
{   
    
if(yes == tidyNodeIsA(node))
    {   
        TidyAttr cls 
= tidyAttrGetCLASS(node);
        
if(cls != NULL)
        {   
            
char* value = (char*)tidyAttrValue(cls);
            
if(!strcmp(value,"link"))
            {   
                TidyAttr href 
= tidyAttrGetHREF(node);   
                
if(href != NULL)
                {
                    
char* link = (char*)tidyAttrValue(href);
                    printf(
"link:%s\n",link);
                    
return;
                }
            }
        } 
    }   
    parseContent(node,doc);
}

void tidyParseHtml(char* file)
{
    TidyDoc doc 
= tidyCreate();
    tidySetReportFilter(doc,tidyFilterCb);
    tidyParseFile(doc,file);
    TidyNode body 
= tidyGetBody(doc);
    TidyNode child;
    
for(child = tidyGetChild(body);child;child = tidyGetNext(child))
    {   
        parseContent(child,doc);
    }    
    tidyRelease(doc); 
}
还是很啰嗦的

当然下面的python代码也能完成任务:
from bs4 import BeautifulSoup

soup 
= BeautifulSoup(open('List.htm'))
list 
= soup.select('a[class="link"]')
for a in list:
    
if a.has_attr('href'):
        print (a.
get('href'))
如果想分析网页我觉得BeatifulSoup绝对是一个利器
链接:
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
posted on 2013-12-07 11:17 ccsdu2009 阅读(1352) 评论(0)  编辑 收藏 引用 所属分类: Python脚本网页搜素

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理