本文目录一览:
- 1、有哪些 C++ 的 JSON 库比较好
- 2、如何优雅地使用c语言编写爬虫
- 3、cjson嵌套多少层
- 4、c语言的cjson怎样处理转义
- 5、有没有谁在stm32上使用过cJSON库
- 6、c语言 解析json字符串
有哪些 C++ 的 JSON 库比较好
我现在用的是cJSON这个JSON库,在github上可以下载到,是开源的,Windows和Linux系统开发都可以用。而且是最轻量级的JSON库,下载下来之后再解压,只需要将里面的cJSON.c和cJSON.h这两个文件复制到你的项目(源码)目录就可以了(需要调用cJSON的那个代码文件要加上一句#include "cJSON.h")。使用起来也超简单,通过阅读cJSON.h中的函数注释和github上面的说明你就会知道怎么用。
如何优雅地使用c语言编写爬虫
前言
大家在平时或多或少地都会有编写网络爬虫的需求。一般来说,编写爬虫的首选自然非python莫属,除此之外,java等语言也是不错的选择。选择上述语言的原因不仅仅在于它们均有非常不错的网络请求库和字符串处理库,还在于基于上述语言的爬虫框架非常之多和完善。良好的爬虫框架可以确保爬虫程序的稳定性,以及编写程序的便捷性。所以,这个cspider爬虫库的使命在于,我们能够使用c语言,依然能够优雅地编写爬虫程序。
爬虫的特性
配置方便。使用一句设置函数,即可定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。
程序逻辑独立。用户可以分别定义爬虫的解析函数,和数据持久化函数。并且对于解析到的新url,用户可以使用cspider提供的addUrl函数,将其加入到任务队列中。
便捷的字符串处理。cspider中提供了基于pcre的简单的正则表达式函数,基于libxml2的xpath解析函数,以及用于解析json的cJSON库。
高效的抓取。cspider基于libuv调度抓取线程和解析线程,使用curl作为其网络请求库。
使用cspider的步骤
获取cspider_t。
自定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。
添加初始要抓取的url到任务队列。
编写解析函数和数据持久化函数。
启动爬虫。
例子
先来看下简单的爬虫例子,会在后面详细讲解例子。
#includecspider/spider.h
/*
自定义的解析函数,d为获取到的html页面字符串
*/
void p(cspider_t *cspider, char *d, void *user_data) {
char *get[100];
//xpath解析html
int size = xpath(d, "//body/div[@class='wrap']/div[@class='sort-column area']/div[@class='column-bd cfix']/ul[@class='st-list cfix']/li/strong/a", get, 100);
int i;
for (i = 0; i size; i++) {
//将获取到的电影名称,持久化
saveString(cspider, get[i]);
}
}
/*
数据持久化函数,对上面解析函数中调用的saveString()函数传入的数据,进行进一步的保存
*/
void s(void *str, void *user_data) {
char *get = (char *)str;
FILE *file = (FILE*)user_data;
fprintf(file, "%s\n", get);
return;
}
int main() {
//初始化spider
cspider_t *spider = init_cspider();
char *agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0";
//char *cookie = "bid=s3/yuH5Jd/I; ll=108288; viewed=1130500_24708145_6433169_4843567_1767120_5318823_1899158_1271597; __utma=30149280.927537245.1446813674.1446983217.1449139583.4; __utmz=30149280.1449139583.4.4.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/login; ps=y; ue=965166527@qq.com; dbcl2=58742090:QgZ2PSLiDLQ; ck=T9Wn; push_noty_num=0; push_doumail_num=7; ap=1; __utmb=30149280.0.10.1449139583; __utmc=30149280";
//设置要抓取页面的url
cs_setopt_url(spider, "so.tv.sohu.com/list_p1100_p20_p3_u5185_u5730_p40_p5_p6_p77_p80_p9_2d1_p101_p11.html");
//设置user agent
cs_setopt_useragent(spider, agent);
//cs_setopt_cookie(spider, cookie);
//传入解析函数和数据持久化函数的指针
cs_setopt_process(spider, p, NULL);
//s函数的user_data指针指向stdout
cs_setopt_save(spider, s, stdout);
//设置线程数量
cs_setopt_threadnum(spider, DOWNLOAD, 2);
cs_setopt_threadnum(spider, SAVE, 2);
//FILE *fp = fopen("log", "wb+");
//cs_setopt_logfile(spider, fp);
//开始爬虫
return cs_run(spider);
}
例子讲解
cspider_t *spider = init_cspider();获取初始的cspider。cs_setopt_xxx这类函数可以用来进行初始化设置。其中要注意的是: cs_setopt_process(spider,p,NULL);与cs_setopt_save(spider,s,stdout);,它们分别设置了解析函数p和数据持久化函数s,这两个函数需要用户自己实现,还有用户自定义的指向上下文信息user_data的指针。
在解析函数中,用户要定义解析的规则,并对解析得到的字符串可以调用saveString进行持久化,或者是调用addUrl将url加入到任务队列中。在saveString中传入的字符串会在用户自定义的数据持久函数中得到处理。此时,用户可以选择输出到文件或数据库等。
最后调用cs_run(spider)即可启动爬虫。
具体的API参数可在这里查看
总结
赶快使用cspider爬虫框架来编写爬虫吧!如果在使用过程中发现bug,欢迎反馈。
望采纳,谢谢
cjson嵌套多少层
四五层。cjsonN是C语言写的一个JSON解析库程序。该程序为更好的方便用户的使用,提高用户的办事效率,所以该程序是嵌套四五层的。并且该程序凭借其极高的办事效率受到很多用户的喜欢青睐。
c语言的cjson怎样处理转义
的JSON数据格式有问题,所有Name键的值后面少了单引号, 应该修改形如这样格式的字符
有没有谁在stm32上使用过cJSON库
源码编译一次就可以了。以后都可以不用编译的。你知道make这个工具不,只要没有被修改,文件就不会变编译。你用的是mdk还是iar?如果是mdk你只要按编译工具栏的中间那个键就是make;最右边的是编译所有文件这个就比较费时;最左边的是检查当前文件的语法。
我的等级不让插入图片如果有什么不明白的,给我留言。
c语言 解析json字符串
你好,你用json-c库,编译通过了吗?我是在ubuntu里使用json-c库,但是无法编译通过,报错 undefined reference to 'json_tokener_parse',类似的函数没定义的错误,你是怎么调用的json-c库?请教一下,谢谢!