用http传输二进制的数据时,需要将二进制做一下转化,例如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字123456,本来只有4个字节,但是转化成文本的"123456"是有7个字节.在int类型的时候固然好办,但是一个数组的时候,经过转化以后,在转化回来就很麻烦了.同时对于一些数字,二进制传输Server是没法处理的.如int 1,二进制数据是0x00000001,按字节传输的时候,client能够正常发送,但是libevent收到以后,在抛给libev…
我们在学习了Linux系统编程之后,需要一些实战项目来提高自己的水平,本系列我们通过编写一个爬虫程序,将我们学习的知识进行综合应用,同时在实现项目的过程中逐渐养成一些有用的思维方式,并具有初步的软件开发思想. 网络爬虫是搜索引擎的一个重要基本功能.由于互联网上的信息非常庞大,我们借助搜索引擎很容易得到自己需要的信息.搜索引擎首先需要一个信息采集系统,即网络爬虫,将互联网上的网页或其它信息收集到本地,然后对这些信息创建索引.当用户输入查询请求的时,先对用户的查询请求进行分析,然后在索引库中进行匹配…
Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取. robots.txt文件是一个文本文件.robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的. 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人…
高效的网络爬虫是搜索引擎的重要基础.采用多任务并发执行,实现类似于CPU的流水线(pipeline)运行方式,可极大地提高网络和计算资源的利用率等性能. #include "threads.h" #include "spider.h" #include "confparser.h" /* the number of current running thread */ int g_cur_thread_num = 0; /* lock for ch…
网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份. 一个通用的网络爬虫的框架如图所示:…
为了验证爬虫的业务流程.性能和健壮性需要进行测试. 软件测试是描述一种用来促进鉴定软件的正确性.完整性.安全性和质量的过程.软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程. 软件测试的目的:(1)测试是为了发现程序中的错误而执行程序的过程.(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案.(3)成功的测试是发现了至今为止尚未发现的错误的测试.(4)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生…
HTTP是一种很简单的请求.响应式协议,客户端发送一个请求.服务器返回一个响应.HTTP 1.1 版本规范由 RFC2616 定义.了解了 HTTP请求.响应消息在TCP数据流中的格式,很容易使用纯 socket 模拟HTTP客户端.HTTP服务器发送接收数据. RFC文档全是ASCII码,txt格式,但有其标准格式,用户可通过官方网站查阅(http://www.rfc-editor.org/),也可下载txt版本并使用阅读器(RFCReader.UE或写字板都可以,记事本打开时格式不规范,有网…
Socket是进程之间交换数据的机制.这些进程即可以是同一台机器上的,也可以是通过网络连接起来的不同机器.一旦一个Socket连接建立,那么数据就能够双向传输,直到其中一端关闭连接. 通常,请求数据的应用程序叫做客户端Client,而为请求服务叫做服务器Server.基本上说,首先,服务器监听一个端口,并且等待来自客户端的连接.之后客户端创建一个,并且尝试连接服务器.接着,服务器接受了来自客户端的连接,并且开始交换数据.一旦所有的数据都已经通过socket连接传输完毕,那么任意一方都可以关闭连接…
由于要实现爬虫程序的快速抓取,显然如果采用阻塞型的I/O方式,那么系统可能很长时间都处在等待内核响应的状态中,这样爬虫程序将大大地降低效率.然而,如果采用非阻塞I/O,那么就要一直调用应用进程,反复对内核进行轮询.为了实现发送出系统调用请求,而不必一直返回进行查询,最合适的方案应该是采用poll函数,对系统调用实行轮询,即I/O复用模式. epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并…
在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程.为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统. 守护进程是脱离于终端并且在后台运行的进程.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断. 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,…