您的位置:

c语言爬虫用法,C语言 爬虫

本文目录一览:

我想用c编写一个爬虫程序,可是看完一本c语言教程后,还是觉得只会编写一些计算类的小代码,要学会编写

想做爬虫程序不是学完语言就行了,是要学很多东西的,你可以查一查大学计算机专业有哪些课程。

做爬虫可以学学java语言。

《网络机器人Java编程指南》

开源的爬虫产品

;os=0sort=viewp=1

爬虫里printf(res)有什么作用?和print(res.text)有什么区别?

很多计算机语言都可以写爬虫,这两个都有打印输出的意思,下面那个应该是xpath清洗后转字符串,python爬虫就是这样,不明白你说的是那个语言写的爬虫。

怎么在DOS下用C语言写网络爬虫

获取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);

}

为什么c语言不适合写爬虫

有更加成熟的一种爬虫脚本语言,而非框架。是通用的爬虫软件ForeSpider,内部自带了一套爬虫脚本语言。

从一个专业C++程序猿的角度说,网上流传的各种Java爬虫,Python爬虫,Java需要运行于C++开发的虚拟机上,Python只是脚本语言,采集效率和性能如何能与强大的C++相提并论?C++直接控制系统的底层,对内存空间的控制和节省都是其他语言无法竞争的。首先,forespider的开发语言是C++,而且C++几乎没有现成的框架可以用,而火车采集器是用的C#。先从业界水平和良心来说,这个软件可以做到从底层到上层都是他们的技术人员自己写的,而非运用现成的框架结构。

其次,因为抓取金融行业的数据,数据量大,动态性强,而采集对象一般反爬虫策略又很严格。所以,专门建立团队开发不现实。请外包人员开发太贵。买现成的软件,要考虑性价比。因为很多数据需要登录,需要验证码,是JS生成的数据,是ajax,是https协议,有加密的key,有层层的验证机制等等,分析市面上所有找得到的爬虫软件,没有找到其他一家可以完全把我们列表上的网站采集下来的软件。forespider功能强大,这是很重要的一点。

第三,forespider在台式机上运行一天可以采400万条数据,在服务器上一天可以采8000万条数据。这样一来,数据更新速度明显比以前快了几十倍。从前抓一个7500万的网站需要好几个月,等抓完数据早都变化的不成样子了,这是很多爬虫的痛处。但是现在的更新速度只有两三天。forespider的性能强大,这也是非常好的一点。

第四,其实完全可视化的采集也不需要计算机专业的。大致学习了之后就可以上手采。而且forespider关于数据的管理做的很好。一是软件可以集成数据库,在采集之前就可以建表。二是数据可以自动排重,对于金融这样数据更新要求很高的行业,就特别合适。

c语言能干什么 C语言的这些用处你知道吗

1、C语言可以做嵌入式开发。如51单片机、ARM等。

2、C语言可以写漂亮的界面。以windows开发为例,你可以学习《windows程序设计(第五版)》,学完就可以写出界面来。还有一些开源库界面库,例如soui也是用C写出来的。

3、C语言可以做服务器开发,现在的游戏服务器端大多都是C/C++开发的。《windows核心编程》里面的例子就是用C写的。

4、C语言可以写游戏。cocos2d—x就是C/C++写的。DirectX也是。

5、C语言可以写驱动程序。windows下各种硬件驱动都是C/C++写的。腾讯游戏保护软件(TP)也是驱动程序。

6、C语言可以写外挂。想学写外挂的童鞋们可以看看郁金香的外挂编程视频教程。

7、C语言可以做视频图片流媒体处理。有兴趣的朋友可以学习一下ffmpeg、live555、sdl等开源库。

8、C语言可以做网页和爬虫相关的编程。想了解的同学可以去看gsoap、libcur等相关开源库。

9、C语言可以进行黑客编程。配合汇编获取随机地址、调shellcode等。

爬虫面对如此多重复的标签,应该怎么爬才能爬到自己

二、爬虫工程师需要掌握哪些技能? 我见过这样的说法:“爬虫是低级、重复性很多的工作,没有发展前途”。这是误解。首先,对于程序员来说基本上不存在重复性的工作,任何重复劳动都可以通过程序自动解决。例如博主之前要抓十几个相似度很高但是html结构不太一样的网站,我就写了一个简单的代码生成器,从爬虫代码到单元测试代码都可以自动生成,只要对应html结构稍微修改一下就行了。所以我认为,重复性的劳动在编程方面来说基本上是不存在的,如果你认为自己做的工作是重复性的,说明你比较勤快,不愿意去偷懒。而我还认为,勤快的程序员不是好程序员。下面我根据自己这段时间的工作经历,讲一讲爬虫需要哪些相关的技能。 1.基本的编码基础(至少一门编程语言) 这个对于任何编程工作来说都是必须的。基础的数据结构你得会吧。数据名字和值得对应(字典),对一些url进行处理(列表)等等。事实上,掌握的越牢固越好,爬虫并不是一个简单的工作,也并不比其他工作对编程语言的要求更高。熟悉你用的编程语言,熟悉相关的框架和库永远是无害。 我主要用Python,用Java写爬虫的也有,理论上讲任何语言都可以写爬虫的,不过最好选择一门相关的库多,开发迅速的语言。用C语言写肯定是自找苦吃了。 2.任务队列 当爬虫任务很大的时候,写一个程序跑下来是不合适的: 如果中间遇到错误停掉,重头再来?这不科学我怎么知道程序在哪里失败了?任务和任务之间不应该相互影响如果我有两台机器怎么分工?所以我们需要一种任务队列,它的作用是:讲计划抓取的网页都放到任务队列里面去。然后worker从队列中拿出来一个一个执行,如果一个失败,记录一下,然后执行下一个。这样,worker就可以一个接一个地执行下去。也增加了扩展性,几亿个任务放在队列里也没问题,有需要可以增加worker,就像多一双亏筷子吃饭一样。 常用的任务队列有kafka,beanstalkd,celery等。 3.数据库 这个不用讲了,数据保存肯定要会数据库的。不过有时候一些小数据也可以保存成json或者csv等。我有时想抓一些图片就直接按照文件夹保存文件。 推荐使用NoSQL的数据库,比如mongodb,因为爬虫抓到的数据一般是都字段-值得对应,有些字段有的网站有有的网站没有,mongo在这方面比较灵活,况且爬虫爬到的数据关系非常非常弱,很少会用到表与表的关系。 4.HTTP知识 HTTP知识是必备技能。因为要爬的是网页,所以必须要了解网页啊。 首先html文档的解析方法要懂,比如子节点父节点,属性这些。我们看到的网页是五彩斑斓的,只不过是被浏览器处理了而已,原始的网页是由很多标签组成的。处理最好使用html的解析器,如果自己用正则匹配的话坑会很多。我个人非常喜欢xpath,跨语言,表达比价好,但是也有缺点,正则、逻辑判断有点别扭。 HTTP协议要理解。HTTP协议本身是无状态的,那么“登录”是怎么实现的?这就要求去了解一下session和cookies了。GET方法和POST方法的区别(事实上除了字面意思不一样没有任何区别)。 浏览器要熟练。爬虫的过程其实是模拟人类去浏览器数据的过程。所以浏览器是怎么访问一个网站的,你要学会去观察,怎么观察呢?Developer Tools!Chrome的Developer Tools提供了访问网站的一切信息。从traffic可以看到所有发出去的请求。copy as curl功能可以给你生成和浏览器请求完全一致的curl请求!我写一个爬虫的一般流程是这样的,先用浏览器访问,然后copy as curl看看有哪些header,cookies,然后用代码模拟出来这个请求,最后处理请求的结果保存下来。 5.运维 这个话题要说的有很多,实际工作中运维和开发的时间差不多甚至更多一些。维护已经在工作的爬虫是一个繁重的工作。随着工作时间增加,一般我们都会学着让写出来的爬虫更好维护一些。比如爬虫的日志系统,数据量的统计等。将爬虫工程师和运维分开也不太合理,因为如果一个爬虫不工作了,那原因可能是要抓的网页更新了结构,也有可能出现在系统上,也有可能是当初开发爬虫的时候没发现反扒策略,上线之后出问题了,也可能是对方网站发现了你是爬虫把你封杀了,所以一般来说开发爬虫要兼顾运维。 所以爬虫的运维我可以提供下面几个思路: 首先,从数据增量监控。定向爬虫(指的是只针对一个网站的爬虫)比较容易,一段时间之后对一些网站的数据增量会有一个大体的了解。经常看看这些数据的增加趋势是否是正常就可以了(Grafana)。非定向爬虫的数据增量不是很稳定,一般看机器的网络状况,网站的更新情况等(这方面我的经验不多)。 然后看爬虫执行的成功情况。在上面提到了用任务队列控制爬虫工作,这样解耦可以带来很多好处,其中一个就是可以就是可以对一次爬虫执行进行日志。可以在每次爬虫任务执行的时候,将执行的时间、状态、目标url、异常等放入一个日志系统(比如kibana),然后通过一个可视化的手段可以清晰地看到爬虫的失败率。 爬虫抛出的Exception。几乎所有的项目都会用到错误日志收集(Sentry),这里需要注意的一点是,忽略正常的异常(比如Connection错误,锁冲突等),否则的话你会被这些错误淹没。