• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 如何优雅地使用c语言编写爬虫

如何优雅地使用c语言编写爬虫

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言爬虫代码教程,网络爬虫c语言代码,c语言写网络爬虫,c语言爬虫,c语言网络爬虫等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

大家在平时或多或少地都会有编写网络爬虫的需求。一般来说,编写爬虫的首选自然非python莫属,除此之外,java等语言也是不错的选择。选择上述语言的原因不仅仅在于它们均有非常不错的网络请求库和字符串处理库,还在于基于上述语言的爬虫框架非常之多和完善。良好的爬虫框架可以确保爬虫程序的稳定性,以及编写程序的便捷性。所以,这个cspider爬虫库的使命在于,我们能够使用c语言,依然能够优雅地编写爬虫程序。

1、爬虫的特性

配置方便。使用一句设置函数,即可定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。
程序逻辑独立。用户可以分别定义爬虫的解析函数,和数据持久化函数。并且对于解析到的新url,用户可以使用cspider提供的addUrl函数,将其加入到任务队列中。
便捷的字符串处理。cspider中提供了基于pcre的简单的正则表达式函数,基于libxml2的xpath解析函数,以及用于解析json的cJSON库。
高效的抓取。cspider基于libuv调度抓取线程和解析线程,使用curl作为其网络请求库。
2、使用cspider的步骤

  • 获取cspider_t。
  • 自定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。
  • 添加初始要抓取的url到任务队列。
  • 编写解析函数和数据持久化函数。
  • 启动爬虫。

3、例子

先来看下简单的爬虫例子,会在后面详细讲解例子。

#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);
}

</div>

例子讲解

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)即可启动爬虫。

赶快使用cspider爬虫框架来编写爬虫吧!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何优雅地使用c语言编写爬虫
  • 如何将C语言代码转换为应用程序(也就是编译)

相关文章

  • 2017-05-28C语言之free函数以及野指针介绍
  • 2017-05-28c语言中static和extern的用法详细解析
  • 2017-05-28C++中用new创建二维数组和指针数组实例代码
  • 2017-05-28深入解析Linux下\r\n的问题
  • 2017-05-28剖析C++的面向对象编程思想
  • 2017-05-28C 语言基础教程(我的C之旅开始了)[二]
  • 2017-05-28C++获得本机所有网卡的IP和MAC地址信息的实现方法
  • 2017-05-28VC++植物大战僵尸中文版修改器实现代码
  • 2017-05-28浅析C#与C++相关概念的比较
  • 2017-05-28c语言指针之二级指针示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入C中常用的三种排序方法总结以及探讨分析
    • C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
    • C++ CTreeview的checkbox使用方法
    • c语言实现把文件中数据读取并存到数组中
    • C++中的vector容器对象学习笔记
    • C++多线程编程简单实例
    • 浮点数在计算机中存储方式是怎样的
    • Visual C++中Tab View的多种实现方法
    • C++使用一个栈实现另一个栈的排序算法示例
    • C++实现顺序排序算法简单示例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有