写一个网络爬虫

 

用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. 浅谈DOM事件的优化

    在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...

  2. Django启动框架自带原始页面(Django一)

    1.安装,cmd中输入命令: pip install django (前提是python已安装完成,才可以使用pip这个python的库管理工具)ps:在cmd中使用pip命令安装时可能因为速度过慢而 ...

  3. oracle之分组函数

    分组函数 5.1 最重要的五个分组函数 sum(); avg(); count(); max(); min(). 数值类型可以使用所有组函数SQL> select sum(sal) sum, a ...

  4. 如何创建本地git分支到远程

    创建本地分支到远程: 1.$git init 之后创建的本地仓库默认master分支 如果现在就要$ git branch 查看当前分支,是不显示任何分支的,只有在add,commit文件之后才显示, ...

  5. three.js学习3_相机相关

    Three.Camera Camera是所有相机的抽象基类, 在构建新摄像机时,应始终继承此类. 常见的相机有两种类型: PerspectiveCamera(透视摄像机)或者 Orthographic ...

  6. hystrix总结之请求批量执行

    hystrix可以将同一个命令的多次执行合并到一起执行. public class HelloWorldCommandCollapser extends HystrixCollapser<Lis ...

  7. 9.Kafka API使用

  8. 本周 GitHub 速览:您的代码有声儿吗?(Vol.38)

    作者:HelloGitHub-小鱼干 摘要:还记得花式夸赞程序员的彩虹屁插件 vscode-rainbow-fart 吗?它后续有人啦!JazzIt 同它的前辈 vscode-rainbow-fart ...

  9. .netcore+vue 实现压缩文件下载

    一.前言 目前接触的项目中,给定的需求是将系统内所有用户的数据整理好,并保存到文件夹内,目的主要是防止用户在实施人员已配置好的基础上由于不熟悉系统,导致的误删或者误操作.减少实施人员的配置工作.我首先 ...

  10. 记一次公司mssql server密码频繁被改的事件

    环境描述 近期公司服务器mssql密码频繁被改,导致各种业务系统无法连接,报错.昨天来公司,发现4台数据库3台密码都变了.今天尝试着去查查是否能找到问题根源. 步骤 4台服务器3台连不上,只有64还活 ...