如何优雅地使用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到任务队列。
编写解析函数和数据持久化函数。
启动爬虫。
例子
先来看下简单的爬虫例子,会在后面详细讲解例子。
#include<cspider/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参数可在这里查看

C语言不适合做爬虫,你还是用python吧!python爬虫的代码网上一大堆。

一个一个敲

为何不用python 写爬虫。

PHP都吹上天了

如何优雅地使用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到任务队列。
编写解析函数和数据持久化函数。
启动爬虫。
例子
先来看下简单的爬虫例子,会在后面详细讲解例子。
#include

/*
自定义的解析函数,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
", 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,欢迎反馈。

望采纳,谢谢

一边听交响乐,一边喝咖啡,一边编写你的C语言程序就比较优雅了

#13852679815# C++如何实现Python爬虫功能 - ******
#简耿# iOS开发如果之前没接触过除了c和c++(c++太难了,不花个十来年基本不可能精通)的语言,第二门语言最好的选择就是python.原因就是 1.语法简单 2.库太多,随便想要什么功能的库都找得到,简直编程界的哆啦A梦. 3.语法优美,不信?你去看看python超过两千行的代码再回头看看用oc写的超过两千行的代码,oc写的简直丑到极致(没命名空间,点语法调用和括号调用混用)

#13852679815# linux终端下如何进行C语言编译 - ******
#简耿# 1、首先在linux下判断是否安装gcc编译器,直接执行:gcc -v,判断是否安装gcc.2、然后需要在代码框内写一个简单的C源程序. 3、在程序中使用了C语言中的数学开方函数,sqrt(),所以需要引入math.h头文件. 4、写完源程序之后,我们对其进行编译,如果使用通常的编译语句,【gcc math.c -o math】进行编译,会出现错误;大概的意思就是不认识sqrt这个东西. 5、所以需要使用正确的命令:【gcc math.c -lm -o math】;这样才能编译正确.

#13852679815# python i++ ,python有这种语法吗?类似C++和java的 i++.整数自增 - ******
#简耿# 你说的是Java里的for循环吧,其实python我刚学没见过想Java一样的for循环.

#13852679815# 如何用C语言打开网页,并从网页上下载东西 - ******
#简耿# 这个似乎是做不到的,因为C语言的操作都十分底层,不能操作图形,鼠标.

#13852679815# 如何用C语言编软件? ******
#简耿# 要想用C编出一个想样的实用的软件,确实太费事了,C过于底层了,建议用Delphi,可以不敲一下键盘,不用2分钟就能编制出一个数据库应用程序,功能有编辑,增,删,改等.方法:启动delphi,选择菜单中的datebase=>form wirard下一步,下一步......不信试试.

#13852679815# 学习pythy主要是做什么的 - ******
#简耿# 阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一.它使你能够专注于解决问题而不是去搞明白语言本身.易学————就如同你即将看到的一样,Python极其容...

#13852679815# 如何用c语言写网页脚本 - ******
#简耿# 网页里能用于编写脚本的语言目前来说只有Javascript(与Java没有关系) 以前有用Applet(采用Java创建的基于HTML的小应用程序)的,但现在几乎没人再用这个了 Java,以及ASP、ASP.NET、PHP等都是服务端的语言,是由服务器处理生成HTML再传输给客户端(也就是浏览器)的 只有Javascript,是在客户端(也就是浏览器)运行的,所以称之为脚本语言

#13852679815# 各种语言写网络爬虫有什么优点缺点 - ******
#简耿# 其实都是多线程调度的问题理论上应该是用汇编语言写最好,不过最复杂,其次应该是OC语言写,因为苹果是高度软硬件结合的,里面的GCD是根据苹果电脑量身定做的,所以用OC写网络爬虫,理论上速度可以很快也可以充分发挥电脑的性...

  • 用c语言编写一个网络爬虫需要什么基础?
  • 答:5. 正则表达式基础:了解正则表达式的基本语法和用法,以便能够通过正则表达式匹配和提取网页内容。6. 数据结构和算法:了解常用的数据结构和算法,以便能够对采集到的数据进行处理和分析。然而,使用C语言编写网络爬虫需要编写大量...

  • python爬虫怎么入门?python爬虫入门介绍
  • 答:c).res是一个变量,不用像java,C语言那样声明。用的时候直接写就行了 d).标点符号。像java,C这些语言,每行代码后面都要用分号或者别的符号,作为结束标志,python不用,用了反了会出错。不过有的时候,会用标点符号...

  • 除了python可以爬虫还有哪些编程语言可以爬虫?
  • 答:(一)PHP 网络爬虫需要快速的从服务器中抓取需要的数据,有时数据量较大时需要进行多线程抓取。PHP虽然是世界上最好的语言,但是PHP对多线程、异步支持不足,并发不足,而爬虫程序对速度和效率要求极高,所以说PHP天生不是...

  • 为什么c语言不适合写爬虫
  • 答:首先,forespider的开发语言是C++,而且C++几乎没有现成的框架可以用,而火车采集器是用的C#。先从业界水平和良心来说,这个软件可以做到从底层到上层都是他们的技术人员自己写的,而非运用现成的框架结构。其次,因为抓取金融...

  • Python写爬虫都用到什么库
  • 答:二、Python网络爬虫框架Python网络爬虫框架主要包括:grab、scrapy、pyspider、cola、portia、restkit以及demiurge等。三、HTML/XML解析器?●lxml:C语言编写高效HTML/ XML处理库。支持XPath。●cssselect:解析DOM树和CSS选择器。...

  • C语言编写一个软件(如何用c语言编写一个真正的软件)
  • 答:1、首先打开pellesC,创建一个新的项目文件。2、然后输入简单的框架。3、接着用switch函数完成加减乘除操作。4、检查输入之后就可以计算结果了。这里需要添加的代码如下,之后便可以运行了。5、这里我们输入一个例子。

  • Python编程网页爬虫工具集介绍
  • 答:3、 Python-Goose Goose最早是用Java写得,后来用Scala重写,是一个Scala项目。Python-Goose用Python重写,依靠了Beautiful Soup。给定一个文章的URL, 获取文章的标题和内容很便利,用起来非常nice。以上就是Python编程网页爬虫...

  • 如何用c语言编游戏?
  • 答:用户输入:游戏需要响应用户的输入,例如键盘输入、鼠标输入等。在C语言中,你可以使用输入库来实现用户输入。常用的输入库包括SDL、GLFW等。声音和音乐:游戏中的声音和音乐是游戏体验的重要组成部分。在C语言中,你可以使用...

  • 学会了C语言都可以做什么呢
  • 答:单片机和嵌入式属于软硬件的结合,有很多使用C语言的地方;开发系统组件或服务,用于支撑上层应用;编写PHP扩展,增强PHP的功能;如果对软件某个模块(例如算法和搜索部分)的效率要求较高,也可以使用C语言来开发。

  • 如何用C语言编写一个软件?
  • 答:如果要写记分牌 最好使用的工具 visual studio 2010(推荐)微软官网有 可以下载中文版。如果只用c语言的话, 就要用win32 api编写。简介:C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的...

    为传递更多家电数码信息,若有事情请联系
    数码大全网