写一个网络爬虫

 

用C语言来写一个网络爬虫,来获取一个网站上感兴趣的信息,抓取自己需要的一切。

#include<cspider/spider.h>/*

自定义的解析函数,d为获取到的html页面字符串

*/voidp(cspider_t *cspider,char*d) {char*get[100];//xpath解析htmlintsize = 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);inti;for(i =0; i < size; i++) {//将获取到的电影名称,持久化saveString(cspider,get[i]);  }}/*

数据持久化函数,对上面解析函数中调用的saveString()函数传入的数据,进行进一步的保存

*/voids(void*str) {char*get= (char*)str;  printf("%sn",get);return;}intmain() {//初始化spidercspider_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";//设置要抓取页面的urlcs_setopt_url(spider,"so.tv.sohu.com/list_p1100_p20_p3_u5185_u5730_p40_p5_p6_p77_p80_p9_2d1_p101_p11.html");//设置user agentcs_setopt_useragent(spider, agent);//cs_setopt_cookie(spider, cookie);//传入解析函数和数据持久化函数的指针

cs_setopt_process(spider, p);  cs_setopt_save(spider, s);//设置线程数量cs_setopt_threadnum(spider, DOWNLOAD,2);  cs_setopt_threadnum(spider, SAVE,2);//FILE *fp = fopen("log", "wb+");//cs_setopt_logfile(spider, fp);//开始爬虫returncs_run(spider);}

 

爬虫优化

爬虫程序一般分成数据采集模块,数据分析模块和反爬策略模块,如果能针对这三个模块进行优化,可以让爬虫程序稳定持续的运行。

1.采集模块

一般来说目标服务器会提供多种接口,包括url、app或者数据api,研发人员需要根据采集数据难度、每天数据量要求、目标服务器反爬限制频率分别进行测试,选择适合的采集接口及方式。

2.数据分析模块

 

由于网络采集存在各种不确定性,数据分析部分在根据需要做好数据解析之后,要做好异常处理及定位重启功能,避免出现程序异常退出或者数据采集遗漏、重复的情况

3.反爬策略模块

分析目标服务器的爬虫策略,控制爬虫请求频率甚至包括验证码、加密数据的破解,同时使用优质代理或爬虫代理,寻找业务独享、网络稳定、高并发、低延迟的代理产品,确保目标服务器没法进行反爬限制及预警,

通过采用以上各项优化策略,能够让爬虫程序长期稳定的运行。

 

点击了解更多资料,更有免费开源项目和课程等你观看哦!

【C/C++】用C语言编写爬虫—爬虫程序优化要点的更多相关文章

  1. 基于php基础语言编写的小程序之计算器

    基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...

  2. [转载] 使用C/C++语言编写基于DSP程序的注意事项

    原文地址:『转』使用C/C++语言编写基于DSP程序的注意事项作者:skysmile   1.不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师 ...

  3. 用python语言编写网络爬虫

    本文主要用到python3自带的urllib模块编写轻量级的简单爬虫.至于怎么定位一个网页中具体元素的url可自行百度火狐浏览器的firebug插件或者谷歌浏览器的自带方法. 1.访问一个网址 re= ...

  4. 如何用C语言编写病毒‘

    怎样用C语言编写病毒在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.[Abstract] This paper introduce the charateristic ...

  5. 第二次作业利用java语言编写计算器进行四则运算

    随着第一次作业的完成,助教 牛老师又布置了第二次作业:用java语言编写一个程序然后进行四则运算用户用键盘输入一个字符来结束程序显示统计结果.一开始看到这个题目我也着实吓了一跳 因为不知道如何下手而且 ...

  6. python3编写网络爬虫18-代理池的维护

    一.代理池的维护 上面我们利用代理可以解决目标网站封IP的问题 在网上有大量公开的免费代理 或者我们也可以购买付费的代理IP但是无论是免费的还是付费的,都不能保证都是可用的 因为可能此IP被其他人使用 ...

  7. Python3编写网络爬虫12-数据存储方式五-非关系型数据库存储

    非关系型数据库存储 NoSQL 全称 Not Only SQL 意为非SQL 泛指非关系型数据库.基于键值对 不需要经过SQL层解析 数据之间没有耦合性 性能非常高. 非关系型数据库可细分如下: 键值 ...

  8. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  9. python3编写网络爬虫20-pyspider框架的使用

    二.pyspider框架的使用 简介 pyspider是由国人binux 编写的强大的网络爬虫系统 github地址 : https://github.com/binux/pyspider 官方文档 ...

随机推荐

  1. Beauty Contest(POJ 2187)

    原题如下: Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 42961   Accepted:  ...

  2. Django总结(Django十一)

    总结一下自己在完成毕设时写的Django博客: Django的初步启动 pycharm+Django启动我的第一个页面 Django+bootstrap启动登录模板页面 Django中 < a ...

  3. oracle之二表的几种类型

    Oracle中表的几种类型 1.表的功能:存储.管理数据的基本单元(二维表:有行和列组成)2.表的类型: 1)堆表:heap table :数据存储时,行是无序的,对它的访问采用全表扫描. 2)分区表 ...

  4. 内置函数:循环调用函数map和filter

    1.map:循环调用函数,前面一定一定要加list,要不然不会被调用 map的格式:list(map(函数名,循环体)) #这里的函数只能写函数名,不要加() list(map(os.mkdir,[' ...

  5. python守护线程t.setDaemon(True)

    守护线程是守护主线程  t.setDaemon(True),调用函数里面存在等待时间时,只要设置了守护线程,函数中等待时间下面的代码都不会再执行

  6. CTF-BugKu-34-

    2020.09.15 做得好慢,,,心不在焉的,赶紧的啊,还得做别的呢 做题 第三十四题 很普通的数独(ISCCCTF) https://ctf.bugku.com/challenges#很普通的数独 ...

  7. kolla部署openstack多节点高可用并对接ceph后端存储(17)

    部署节点执行: 安装基础包和docker yum install python-devel libffi-devel gcc openssl-devel git python-pip -y 升级一下 ...

  8. Java并发编程之ReentrantLock源码分析

    ReentrantLock介绍 从JDK1.5之前,我们都是使用synchronized关键字来对代码块加锁,在JDK1.5引入了ReentrantLock锁.synchronized关键字性能比Re ...

  9. 使用C#创建WebService实例

    新增WebService专案 更改服务程式名称 重命名程式名称 Service1.asmx 修改为 TestService.asmx 此时下面的cs代表文件也会跟着修改,但可发现,代码中的类名并没有跟 ...

  10. SFUD+FAL+EasyFlash典型场景需求分析,并记一次实操记录

    SFUD+FAL+EasyFlash典型场景需求分析:用整个flash存储数据,上千条数据,读取得时候用easyflash很慢,估计要检索整个flash太慢了. 改进方法:分区检索. 1存数据时,根据 ...