I网络爬虫的设计与实现II摘要网络爬虫将下载的网页和收集到的网页信息存储在本地数据库中以供搜索引擎使用,它是一个专门从万维网上下载网页并分析网页的程序。随着网络的快速发展,人们对搜索引擎的要求也越来越高,而网络爬虫的效率直接影响着搜索引擎的质量。本课题研究的是通用网络爬虫,它是从一个或若干个初始网页的链接开始进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页中抽取新链接放入到链接队列中,直到爬虫系统满足了停止条件。该课题主要涉及到了缓冲池技术,多线程技术,套接字技术,HTTP和SSL协议,正则表达式,Linux网络编程技术,PHP+Apache的使用等相关技术。本说明书叙述的网络爬虫是以LinuxC实现的,加以PHP语言编写的界面使用户更加方面的操作,利用Shell脚本和Apache服务器使得爬虫系统和界面很好的结合在一起。关键词:网络爬虫缓冲池正则表达式SSL协议多线程III目次1引言..........................................................................................................................11.1课题选题背景..................................................................................................11.2课题研究的意义..............................................................................................22需求分析..................................................................................................................32.1功能需求分析..................................................................................................32.2系统性能分析..................................................................................................43系统设计..................................................................................................................53.1系统工作流程图..............................................................................................53.2数据结构设计..................................................................................................63.3系统各功能流程图..........................................................................................74系统实现................................................................................................................104.1相关技术分析................................................................................................104.2系统功能模块的实现....................................................................................115测试与结果............................................................................................................17结论..............................................................................................................................23致谢............................................................................................错误!未定义书签。参考文献................................................................................................................2411引言随着网络技术日新月异的发展,互联网俨然已成为信息的最大载体。为了能够在浩瀚的信息海洋中精确地查询用户所需要的信息,搜索引擎技术应运而生。目前比较流行的搜索引擎是Google和百度,他们拥有着庞大的用户数量。作为搜索引擎的重要组成部分,网络爬虫的设计直接影响着搜索引擎的质量。网络爬虫是一个专门从万维网上下载网页并分析网页的程序。它将下载的网页和采集到的网页信息存储在本地数据库中以供搜索引擎使用。网络爬虫的工作原理是从一个或若干初始网页的链接开始进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的链接放入到链接队列中,直到爬虫程序满足系统的某一条件时停止。本说明书对课题背景进行简单介绍的同时,又对研究网络爬虫的意义进行了叙述,在此基础上,详细的介绍来了利用C语言在linux系统上开发出多线程网络爬虫的设计步骤。1.1课题选题背景搜索引擎是用户在网上冲浪时经常使用的一种工具,毫无疑问,每个用户都可以通过搜索引擎得到自己所需要的网络资源。搜索引擎一词在互联网领域得到广泛的应用,但是每个地区对它又有着不同的理解。在一些欧美国家搜索引擎常常是基于因特网的,它们通过网络爬虫程序采集网页,并且索引网页的每个词语,也就是全文检索。而在一些亚洲国家,搜索引擎通常是基于网站目录的搜索服务。总的来说:搜索引擎只是一种检索信息的工具。它的检索方式分为以下两种:一种是目录型的方式,爬虫程序把网络的资源采集在一起,再根据资源类型的不同而分成不同的目录,然后继续一层层地进行分类,人们查询信息时就是按分类一层层进入的,最后得到自己所需求的信息。另一种是用户经常使用的关键字方式,搜索引擎根据用户输入的关键词检索用户所需资源的地址,然后把这些地址反馈给用户。21.2课题研究的意义网络在我们的生活中越来越重要,网络的信息量也越来越大,研究该课题可以更好的理解网络爬虫在搜索引擎中的作用以及网络爬虫的原理。现实中,一般的服务器大多是linux系统该课题更好的配合了linux系统上运行爬虫程序,加上界面更容易操作。21世纪是一个讲究信息安全的时代,于是网站上出现了越来越多的https(超文本传输安全协议)协议的链接,该课题很好的利用了SSL协议解决了下载https协议链接的问题。设备的内存是珍贵的,如何更加合理有效地利用内存提高内存的利用率是值得研究的,该课题为了解决内存的利用使用了内存池来提高内存的使用率。32需求分析网络爬虫是一个专门从万维网上下载网页并分析网页的程序。它将下载的网页和收集到的信息存储在本地数据库中以供搜索引擎使用。网络爬虫的工作原理是从一个或若干初始网页的链接开始进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的链接放入到链接队列中,直到爬虫程序满足系统的某一条件时停止。它是搜索引擎的重要组成部分。2.1功能需求分析(1)网页下载功能①能够下载任何http协议和https协议的链接的网页。②构造HTTP请求中的GET请求。③分析HTTP响应请求。(2)网页分析功能①提取网页标题。②提取网页关键字。③提取网页摘要。④提取网页链接并统计数量。⑤把新链接加入到URL队列。(3)内存池功能①能够分配固定大小的内存。②能够回收内存对象。③能够释放内存对象。④能够销毁内存池。⑤能够分配固定大小的内存。(4)保存功能①能够正确保存网页以及网页信息到文件。4②功能把系统运行中的异常写入日志文件。(5)界面①可以配置参数和运行后台的爬虫系统。②能够查看运行结果。2.2系统性能分析当用户使用系统时,系统需要能够对于一些异常状况系统能够记录并跳过此异常继续执行。系统需要具有较高的可移植性和可靠性。系统需要具有很好的可测试性和可维护性。网络爬虫系统是不停的从万维网上下载网页和采集网页信息的系统。由于网络爬虫系统是搜索引擎的组成部分,搜索引擎要利用到爬虫系统的信息,所以系统要设计合理的存储文件并建立索引。53系统设计3.1系统工作流程图本系统通过IE共同访问Apache服务器的发布的页面、Apache服务器返回页面方便用户操作。(1)系统物理结构如图3-1:互联网用户用户用户用户用户APACHE服务器调用网络爬虫系统图3-1系统物理结构图(2)界面的流程如图3-2:配置界面开始显示结果图3-2页面结构图.(3)网络爬虫系统流程如图3-3:6配置界面开始创建内存池初始化URL队列下载网页分析网页满足停止条件结束是提取网页链接加入到URL队列否界面显示结果图3-3系统流程图3.2数据结构设计系统中主要是使用了链表作为URL队列,而链表中的每个结构体是一个数据单元,数据单元中的元素及其含义如表3-1:表3-1数据结构表字段类型含义hostchar*网页所在的主机portint网络服务器所使用的端口dirchar*网页所在的目录pagechar*网页文件名filechar*本地保存的文件名pageinfochar*保存网页信息的文件名urlchar*存储网页链接titlechar*网页的标题7keywordschar*网页的关键字bodychar*网页的摘要protocalchar连接使用的协议0-http1--httpsurl_countint网页中的链接数目typechar*网页类型codechar*网页编码page_sizeint网页大小is_handledchar是否处理过brotherstrcut*兄弟节点链表指针childstruct*子节点链表指针系统把初始的链接保存在了init_url文件中;把一些异常情况保存在了crawl.log文件中;把下载的网页文件保存在了page_db文件夹中;把网页信息文件保存在page_info文件夹中;把网页中链接文件保存在了page_url文件夹中;把网页文件名称,网页信息文件名称,网页链接文件名称保存在link.db文件中。3.3系统各功能流程图(1)主模块功能流程图如图3-5:创建内存池初始化URL队列调用下载模块和分析模块接口函数释放内存池图3-4主模块流程图需要说明的问题:①指向内存池的是一个全局变量指针。②初始的URL必须从文件中读取,然后调用函数get_host()解析出URL的host,page,dir,port。③必须要有全局变量指向URL队列的头。8(2)功能模块流程图如图3-6:构造GET请求链接网站服务器发送GET请求接受网站的数据分析HTTP报文头图3-5下载模块流程图需要说明的问题:①启动线程下载。②对于GET请求不变动的部分使用宏定义。