zoukankan      html  css  js  c++  java
  • 通过tinyxml解析百度热词榜单

    百度热词榜单

    初学TinyXml,盯上了解析百度热词榜单。通过curl获取rss地址上的数据。

    由于TinyXml不支持,所以要转换为UTF-8格式,命令为

    iconv -f gb2312 -t utf-8 baidutop.xml > baidutop.xml

    写得很烂,写的时候,心里对内存管理部分总是瞻前顾后的,真是奇怪啊。

    View Code
    #include <iostream>
    #include
    <tinyxml/tinyxml.h>
    #include
    <tinyxml/tinystr.h>

    #include
    <vector>

    using namespace std;

    struct CHrefLink
    {
    string word;
    string url;
    };

    struct CBaiDuTopKey
    {
    int rank;
    long account;

    string keyWord;
    string wordUrl;
    vector
    <CHrefLink> href;
    };



    void GetHotRank(vector <CBaiDuTopKey> & hot,const char *xml);
    void ExtraHrefLink(TiXmlElement *hrefElement,CHrefLink &link);
    void ExtraHrefLink(TiXmlElement *hrefElement,string & word,string & url);
    void ExtraKeyWords(TiXmlElement *tableColumn,vector <CHrefLink> &vKey);
    int main()
    {
    //创建一个XML的文档对象。
    TiXmlDocument *myDocument = new TiXmlDocument("baidutop.xml");
    myDocument
    ->LoadFile();

    //获得根元素
    TiXmlElement *RootElement = myDocument->RootElement();

    //输出根元素名称
    cout << RootElement->Value() << endl;

    //解析获得有用的信息
    TiXmlElement *channelElement = RootElement->FirstChildElement();
    string title = channelElement->FirstChildElement()->GetText();
    TiXmlElement
    *itemElement = (TiXmlElement *)channelElement->LastChild();


    int ttl = atoi(((TiXmlElement *)itemElement->PreviousSibling())->GetText());

    TiXmlElement
    * descriptionElement = (TiXmlElement *)(itemElement->LastChild());

    vector
    <CBaiDuTopKey> hotword;

    GetHotRank(hotword,descriptionElement
    ->GetText());



    cout
    <<"Name :"<<title<<"\t Life Time:"<<ttl<<endl;
    for(vector<CBaiDuTopKey>::iterator iter = hotword.begin();
    iter
    !=hotword.end();++iter)
    {
    cout
    <<"\nrank \t"<<(*iter).rank<<"\t amount:"<<(*iter).account;
    cout
    <<"\nkeyword\t"<<(*iter).keyWord<<"\nurl\t"<<(*iter).wordUrl;
    }
    cout
    <<endl;
    delete myDocument;
    return 0;
    }


    void GetHotRank(vector <CBaiDuTopKey> & hotVector,const char *xml)
    {
    TiXmlDocument
    *doc = new TiXmlDocument();

    int row = 0;


    doc
    ->Parse(xml);
    TiXmlElement
    *tableElement = doc->RootElement();
    //
    TiXmlElement *tableRoot = tableElement->FirstChildElement();
    if(!tableRoot)
    {
    cout
    <<"errro !"<<endl;
    return ;
    }
    //第一个元素为table的表头,剔除
    for(TiXmlElement *tableRow = tableRoot->FirstChildElement()->NextSiblingElement();
    tableRow;
    tableRow
    = tableRow->NextSiblingElement())
    {
    CBaiDuTopKey rankedword;
    TiXmlElement
    *tableColumn = tableRow->FirstChildElement();

    //关键词排名
    rankedword.rank=atoi(tableColumn->GetText());
    tableColumn
    = tableColumn->NextSiblingElement();
    //关键词
    ExtraHrefLink(tableColumn->FirstChildElement(),rankedword.keyWord,rankedword.wordUrl);
    tableColumn
    = tableColumn->NextSiblingElement();
    //搜索量
    rankedword.account=atol(tableColumn->GetText());
    //链接
    tableColumn = tableColumn->NextSiblingElement();

    hotVector.push_back(rankedword);
    }
    delete doc;
    }
    void ExtraHrefLink(TiXmlElement *hrefElement,CHrefLink &link)
    {
    link.url
    = hrefElement->FirstAttribute()->Value();
    link.word
    = hrefElement->GetText();

    }
    void ExtraHrefLink(TiXmlElement *hrefElement,string & word,string & url)
    {
    url
    = hrefElement->FirstAttribute()->Value();
    word
    = hrefElement->GetText();

    }
    void ExtraKeyWords(TiXmlElement *tableColumn,vector <CHrefLink> &vKey)
    {
    TiXmlElement
    *hrefElement = tableColumn->FirstChildElement();
    CHrefLink links;
    while(hrefElement)
    {
    ExtraHrefLink(hrefElement,links);
    vKey.push_back(links);
    hrefElement
    = hrefElement->NextSiblingElement();
    }
    }

  • 相关阅读:
    docker容器导出导入
    docker容器stop不了问题的处理
    weblogic server 后台命令启动
    查看Linux系统版本的命令
    Oracle12c修改字符集
    Oracle导出导入时客户端字符集设置
    centos7 防火墙开放端口
    docker仓库安装
    spring boot打war包的修改内容
    连接谷歌gee
  • 原文地址:https://www.cnblogs.com/westfly/p/2078961.html
Copyright © 2011-2022 走看看