C++爬虫工具之html解析库htmlcxx(附VS2019环境搭建详细过程) - Go语言中文社区

C++爬虫工具之html解析库htmlcxx(附VS2019环境搭建详细过程)


近来想用C++写一些爬虫小工具,爬虫爬取网页时,需要对html格式数据进行解析,拿到其中需要的数据,比如某个标签下的文本、图片的url等等。下面我将演示一下htmlcxx解析器的环境搭建、基本使用。

1、htmlcxx是什么?

HtmlCxx是一款简洁的,非验证式的,用C++编写的csshtml解析器。使用由KasperPeeters编写的强大的tree.h库文件,可以实现类似STLDOM树遍历和导航。可以通过解析后生成的树,逐字节地重新生成原始文档。

htmlcxx下载地址:https://sourceforge.net/projects/htmlcxx/
在这里插入图片描述
下载玩后是一个压缩包。
在这里插入图片描述

2、本地编译htmlcxx项目

上面下载的是源码,需要手动对其进行编译!

①、首先解压下载好的压缩包htmlcxx-0.86.tar.gz

②、使用vs打开htmlcxx.vcproj

在这里插入图片描述
如果提示vs版本过高,直接点击确定即可。
在这里插入图片描述
vs中打开后可以看到文件资源列表
在这里插入图片描述

③、修改color{red}运行库类型为多线程调试 DLL (/MDd)

在这里插入图片描述
在这里插入图片描述
修改 项目属性->配置属性->C/C+±>代码生成->运行库
在这里插入图片描述
保存修改并退出
在这里插入图片描述

④、编译htmlcxx项目

在这里插入图片描述

util.cc17color{red}报错util.cc文件的17行中“常量中有换行符”

在这里插入图片描述

⑤、再次尝试编译

在这里插入图片描述
0.86的版本解决这些bug即可编译成功,其他版本可能还有其他Bug。
在这里插入图片描述

3、VS中搭建环境(以vs2019为例)

这里演示的是搭建过程,建议你先新建一个空白项目, 摸索请过程,再去应用到你实际的项目中!

①、新建一个空白项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②、打开项目所在的文件资源管理位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③、在项目根路径下创建文件夹htmlcxx

在这里插入图片描述

④、在文件夹htmlcxx中创建lib、include子文件夹

在这里插入图片描述

⑤、将之前编译项目生成的lib文件夹放到测试项目的lib文件夹中

在这里插入图片描述

⑥、将htmlcxx-0.86/html下的所有头问价、ParserSax.tcc复制到include文件夹中

color{red}别复制错了、漏了,可能会报错!!!

在这里插入图片描述

⑦、编写测试用例

#include<string>
#include <iostream>
#include "htmlcxx/include/ParserDom.h"

using namespace std;
using namespace htmlcxx;
//加载htmlcxx.lib库
#pragma comment(lib,"htmlcxx/lib/htmlcxx.lib")

int main() {
	//待解析的html数据
	string html = "<div><span>hestyle</span><a href="https://hestyle.blog.csdn.net/">访问主页</a></div>";
	//有些含有中文的html解析可能报错,需要添加这句
	setlocale(LC_ALL, ".OCP");
	HTML::ParserDom parser;
	tree<HTML::Node> dom = parser.parseTree(html);
	
	//遍历文档的迭代器
	tree<HTML::Node>::iterator it = dom.begin();
	tree<HTML::Node>::iterator end = dom.end();
	//遍历整个dom
	for (; it != end; ++it) {
		//it->isTag()判断it指向的节点是否是标签
		if (it->isTag()) {
			//加载标签的属性
			it->parseAttributes();
			//it->tagName()获取标签的名字
			//it->attribute("href")返回的是pair<bool,object>,first表示的该标签是否含有该属性,second是属性值
			if (it->tagName() == "a" && it->attribute("href").first) {
				cout << "hestyle的主页:" << it->attribute("href").second << endl;
			}
		}
	}
	return 0;
}

控制台输出结果:
在这里插入图片描述
以上就是htmlcxx本地编译、vs环境搭建的主要过程,也演示了html解析的基本API,比如it->isTag()it->tagName()it->attribute("href"),其实只要知道这几个就足够了。这也真是htmlcxx的便捷、轻量特性。

更新了博客 C++ html解析库htmlcxx常见使用报错解决方法,如果你在配置过程遇到问题,可以参考一下。

更新了博客 C++ html解析库htmlcxx自封装的工具类(搜索标签),方便在解析html时搜索标签。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_41855420/article/details/104563308
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-08 10:50:51
  • 阅读 ( 1061 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢