使用libtidy解析html文档的小例子一个
2012-02-13 14:57
387 查看
#ifndef PARSEPAGE_HPP #define PARFSPAGE_HPP #include <string> #include <vector> #include <tidy/buffio.h> #include <tidy/fileio.h> #include <tidy/tidy.h> #include <tidy/tidyenum.h> #include <tidy/platform.h> //! 解析html页面 class ParsePage { public: typedef std::vector<std::string> String; public: ParsePage(int rank = 0,const std::string& cur = ""):rank(rank),cur(cur) { doc = tidyCreate(); root = tidyGetRoot(doc); } ~ParsePage() { tidyRelease(doc); } public: //! 解析给定文件 bool LoadFile(const char* file) { return 1 == tidyParseFile(doc,file); } //!解析给定内存 bool LoadBuffer(const char* buffer) { return 1 == tidyParseString(doc,buffer); } //! 内容解析 void Check() { CheckHref(root); } //! 获取链接 int GetLinkNumber()const{return links.size();} std::string GetLinkByIndex(int index){return links.at(index);} private: void DoHref(TidyAttr attr); void CheckHref(TidyNode node); private: TidyDoc doc; TidyNode root; std::string cur; int rank; String links; }; #endif //! ccsdu2004
libtidy是一个开源的用来诊断,分析,生成html文档的一个库
下面的例子是使用libtidy获取页面链接的例子
代码如下:
#include <boost/algorithm/string.hpp> #include "parsepage.hpp" void ParsePage::DoHref(TidyAttr attr) { std::string href(tidyAttrValue(attr)); //! 邮箱地址 if(boost::algorithm::starts_with(href,"mailto:")) { } //! 链接地址 else { if(boost::algorithm::starts_with(href,"http:")) { size_t itr = href.find_last_of('#'); if(itr != std::string::npos) { href = href.substr(0,itr); } } else { if(boost::algorithm::contains(href,"#")) return; } links.push_back(href); } } void ParsePage::CheckHref(TidyNode node) { TidyNode child; for(child = tidyGetChild(node);child;child = tidyGetNext(child)) { TidyAttr attr = tidyAttrGetHREF(child); if(attr) { DoHref(attr); } CheckHref(child); } }这个对象比较简单 调用Check之后所有的页面链接在links中
相关文章推荐
- 使用libtidy解析html文档的小例子一个
- 使用LIBTIDY解析HTML文档的小例子一个
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用 jsoup 对 HTML 文档进行解析和操作
- 【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies
- 使用 jsoup 对 HTML 文档进行解析和操作
- 一个删选数据的例子,使用GROUP、DISTINCT实例解析
- 使用 jsoup 对 HTML 文档进行解析和操作
- jQuery 1.7 正式版已经可以下载使用。jQuery是一个JavaScript库,它简化了HTML文档遍历,事件处理,动画和为网络快速发展的Ajax交互。jQuery 1.7 版本加入了新的事件API .on() 和 .off(),提
- 使用DOM4J解析XML的一个例子
- 使用 XPath 解析 HTML 文档
- .net HTMLParser详细使用说明 强大的Filter类 解析HTML文档如此简单
- 一个简单的使用jdom解析xml例子
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用 jsoup 对 HTML 文档进行解析和操作
- ML的DOM解析 Java实现 使用递归解析一个XML文档