大家在平时或多或少地都会有编写网络爬虫的需求。一般来说,编写爬虫的首选自然非 python 莫属,除此之外, java 等语言也是不错的选择。选择上述语言的原因不仅仅在于它们均有非常不错的网络请求库和字符串处理库,还在于基于上述语言的爬虫框架非常之多和完善。良好的爬虫框架可以确保爬虫程序的稳定性,以及编写程序的便捷性。所以,这个 cspider 爬虫库的使命在于,我们能够使用 c 语言,依然能够优雅地编写爬虫程序。
#include<cspider/spider.h>
void p(cspider_t *cspider, char *d, void *user_data) {
char *get[100];
int size = xpath(d, "//div[@id='listofficial']/div[@class='yk-row yk-v-80']/div[@class='yk-col3']/div[@class='p p-small']/div[@class='p-meta pa']/div[@class='p-meta-title']/a/@title", get, 100);
int i;
for (i = 0; i < size; i++) {
saveString(cspider, get[i]);
}
}
void s(void *str, void *user_data) {
char *get = (char *)str;
FILE *file = (FILE*)user_data;
fprintf(file, "%s\n", get);
return;
}
int main() {
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";
cs_setopt_url(spider, "http://www.youku.com/v_olist/c_96_s_0_d_0_g_0_a_0_r_0_u_0_pt_0_av_0_ag_0_sg_0_mt_0_lg_0_q_0_pr_0_h_0_p_1.html");
cs_setopt_useragent(spider, agent);
//指向自定义的解析函数,和数据持久化函数
cs_setopt_process(spider, p, NULL);
cs_setopt_save(spider, s, stdout);
//设置抓取线程数量,和数据持久化的线程数量
cs_setopt_threadnum(spider, DOWNLOAD, 2);
cs_setopt_threadnum(spider, SAVE, 2);
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 ,这两个函数需要用户自己实现。在解析函数中,用户要定义解析的规则,并对解析得到的字符串可以调用 saveString 进行持久化,或者是调用 addUrl 将 url 加入到任务队列中。在 saveString 中传入的字符串会在用户自定义的数据持久函数中得到处理。此时,用户可以选择输出到文件或数据库等。
最后调用 cs_run(spider)即可启动爬虫。
具体的 API 参数可在 https://github.com/luohaha/CSpider 查看
赶快使用 cspider 爬虫框架来编写爬虫吧!如果在使用过程中发现 bug ,欢迎反馈。
1
jise 2015-12-14 15:06:08 +08:00 1
试了一下,感觉还不错,用起来很方便。。来赞一个。。。
|
2
luohaha OP 多谢支持啊
|
3
pepsin 2015-12-15 19:03:06 +08:00
看起来很不错呀
|
7
hustlike 2016-01-25 12:38:05 +08:00
依赖太多了
|