###项目的地址在
https://github.com/luohaha/CSpider ,欢迎大伙来尝试。
大家在平时或多或少地都会有编写网络爬虫的需求。一般来说,编写爬虫的首选自然非 python 莫属,除此之外, java 等语言也是不错的选择。选择上述语言的原因不仅仅在于它们均有非常不错的网络请求库和字符串处理库,还在于基于上述语言的爬虫框架非常之多和完善。良好的爬虫框架可以确保爬虫程序的稳定性,以及编写程序的便捷性。所以,这个 cspider 爬虫库的使命在于,我们能够使用 c 语言,依然能够优雅地编写爬虫程序。
###爬虫的特性
1. 配置方便。使用一句设置函数,即可定义 user agent , cookie , timeout , proxy 以及抓取线程和解析线程的最大数量。
2. 程序逻辑独立。用户可以分别定义爬虫的解析函数,和数据持久化函数。并且对于解析到的新 url ,用户可以使用 cspider 提供的 addUrl 函数,将其加入到任务队列中。
3. 便捷的字符串处理。 cspider 中提供了基于 pcre 的简单的正则表达式函数,基于 libxml2 的 xpath 解析函数,以及用于解析 json 的 cJSON 库。
4. 高效的抓取。 cspider 基于 libuv 调度抓取线程和解析线程,使用 curl 作为其网络请求库。
###使用 cspider 的步骤
1. 获取 cspider_t 。
2. 自定义 user agent , cookie , timeout , proxy 以及抓取线程和解析线程的最大数量。
3. 添加初始要抓取的 url 到任务队列。
4. 编写解析函数和数据持久化函数。
5. 启动爬虫。
###例子(抓取优酷电影第一页的所有电影名称)
```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 ,欢迎反馈。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/243241
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.