C++ 解析html

本文参考:
HTML解析库Gumbo的使用(一)
c++解析html

C++解析网页常用的库:htmlcxx,基于gumbo的html解析库

htmlcxx经过实测发现对于html解析不友好,例如无法解析",以及部分网页解析出错。

下面是基于gumbo的html解析库的实测用例:
git:https://github.com/jeflib/cjhtmlparser

  • 通过标签的id查找指定标签:find("a#123"),查找标签
  • 通过标签的class查找指定标签:find("a.123"),查找标签
  • 查找指定标签:find("a"),查找标签
std::string content("

wrong linksome link

"
); printf("%s\r\n", content.c_str()); CDocument doc; doc.parse(content); CSelection c = doc.find("a"); printf("\r\n*****************find(\"a\")**********************************\r\n"); for (int i = 0; i < c.nodeNum(); ++i) { CNode nd = c.nodeAt(i); std::string ref = nd.ownText(); printf("find label:%s,href:%s\r\n", nd.tag().c_str(), ref.c_str()); } printf("\r\n*****************find(\"a#123\")**********************************\r\n"); c = doc.find("a#123"); for (int i = 0;i < c.nodeNum();++i) { CNode nd = c.nodeAt(i); std::string ref = nd.ownText(); printf("find label:%s id=\"123\",href:%s\r\n", nd.tag().c_str(), ref.c_str()); } printf("\r\n*****************find(\"a.special\")**********************************\r\n"); c = doc.find("a.special"); for (int i = 0; i < c.nodeNum(); ++i) { CNode nd = c.nodeAt(i); std::string ref = nd.ownText(); printf("find label:%s class=\"special\",href:%s\r\n", nd.tag().c_str(), ref.c_str()); }

C++ 解析html_第1张图片

你可能感兴趣的:(C++,随笔,c++,爬虫,html解析)