ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:1.43MB ,
资源ID:25064695      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25064695.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络爬虫的设计与实现完整版分解.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络爬虫的设计与实现完整版分解.docx

1、网络爬虫的设计与实现完整版分解网络爬虫的设计与实现 摘 要网络爬虫将下载的网页和收集到的网页信息存储在本地数据库中以供搜索引擎使用,它是一个专门从万维网上下载网页并分析网页的程序。随着网络的快速发展,人们对搜索引擎的要求也越来越高,而网络爬虫的效率直接影响着搜索引擎的质量。本课题研究的是通用网络爬虫,它是从一个或若干个初始网页的开始进而得到一个队列。伴随着网页的抓取又不断从抓取到的网页中抽取新放入到队列中,直到爬虫系统满足了停止条件。该课题主要涉及到了缓冲池技术,多线程技术,套接字技术,HTTP和SSL协议,正则表达式,Linux网络编程技术,PHP+Apache的使用等相关技术。本说明书叙述

2、的网络爬虫是以Linux C实现的,加以PHP语言编写的界面使用户更加方面的操作,利用Shell脚本和Apache服务器使得爬虫系统和界面很好的结合在一起。关键词:网络爬虫 缓冲池 正则表达式 SSL协议 多线程目 次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致 24参 考 文 献 251 引言随着网络技术日新月异

3、的发展,互联网俨然已成为信息的最大载体。为了能够在浩瀚的信息海洋中精确地查询用户所需要的信息,搜索引擎技术应运而生。目前比较流行的搜索引擎是Google和XX,他们拥有着庞大的用户数量。作为搜索引擎的重要组成部分,网络爬虫的设计直接影响着搜索引擎的质量。网络爬虫是一个专门从万维网上下载网页并分析网页的程序。它将下载的网页和采集到的网页信息存储在本地数据库中以供搜索引擎使用。网络爬虫的工作原理是从一个或若干初始网页的开始进而得到一个队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的放入到队列中,直到爬虫程序满足系统的某一条件时停止。本说明书对课题背景进行简单介绍的同时,又对研究网络爬虫的意义进

4、行了叙述,在此基础上,详细的介绍来了利用C语言在linux系统上开发出多线程网络爬虫的设计步骤。1.1 课题选题背景搜索引擎是用户在网上冲浪时经常使用的一种工具,毫无疑问,每个用户都可以通过搜索引擎得到自己所需要的网络资源。搜索引擎一词在互联网领域得到广泛的应用,但是每个地区对它又有着不同的理解。在一些欧美国家搜索引擎常常是基于因特网的,它们通过网络爬虫程序采集网页,并且索引网页的每个词语,也就是全文检索。而在一些亚洲国家,搜索引擎通常是基于目录的搜索服务。总的来说:搜索引擎只是一种检索信息的工具。它的检索方式分为以下两种:一种是目录型的方式,爬虫程序把网络的资源采集在一起,再根据资源类型的不

5、同而分成不同的目录,然后继续一层层地进行分类,人们查询信息时就是按分类一层层进入的,最后得到自己所需求的信息。另一种是用户经常使用的关键字方式,搜索引擎根据用户输入的关键词检索用户所需资源的地址,然后把这些地址反馈给用户。1.2 课题研究的意义网络在我们的生活中越来越重要,网络的信息量也越来越大,研究该课题可以更好的理解网络爬虫在搜索引擎中的作用以及网络爬虫的原理。现实中,一般的服务器大多是linux系统该课题更好的配合了linux系统上运行爬虫程序,加上界面更容易操作。21世纪是一个讲究信息安全的时代,于是上出现了越来越多的https(超文本传输安全协议)协议的,该课题很好的利用了SSL协议

6、解决了下载https协议的问题。设备的存是珍贵的,如何更加合理有效地利用存提高存的利用率是值得研究的,该课题为了解决存的利用使用了存池来提高存的使用率。2 需求分析网络爬虫是一个专门从万维网上下载网页并分析网页的程序。它将下载的网页和收集到的信息存储在本地数据库中以供搜索引擎使用。网络爬虫的工作原理是从一个或若干初始网页的开始进而得到一个队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的放入到队列中,直到爬虫程序满足系统的某一条件时停止。它是搜索引擎的重要组成部分。2.1 功能需求分析(1)网页下载功能1能够下载任何http协议和https协议的的网页。2构造HTTP请求中的GET请求。3分

7、析HTTP响应请求。(2)网页分析功能1提取网页标题。2提取网页关键字。3提取网页摘要。4提取网页并统计数量。5把新加入到URL队列。(3)存池功能1能够分配固定大小的存。2能够回收存对象。3能够释放存对象。4能够销毁存池。5能够分配固定大小的存。(4)保存功能1能够正确保存网页以及网页信息到文件。2功能把系统运行中的异常写入日志文件。(5)界面1可以配置参数和运行后台的爬虫系统。2能够查看运行结果。2.2 系统性能分析当用户使用系统时,系统需要能够对于一些异常状况系统能够记录并跳过此异常继续执行。系统需要具有较高的可移植性和可靠性。系统需要具有很好的可测试性和可维护性。网络爬虫系统是不停的从

8、万维网上下载网页和采集网页信息的系统。由于网络爬虫系统是搜索引擎的组成部分,搜索引擎要利用到爬虫系统的信息,所以系统要设计合理的存储文件并建立索引。3 系统设计3.1 系统工作流程图本系统通过IE共同访问Apache服务器的发布的页面、Apache服务器返回页面方便用户操作。(1)系统物理结构如图3-1:图3-1 系统物理结构图(2)界面的流程如图3-2:图3-2页面结构图.(3)网络爬虫系统流程如图3-3:图3-3 系统流程图3.2 数据结构设计系统中主要是使用了链表作为URL队列,而链表中的每个结构体是一个数据单元,数据单元中的元素及其含义如表3-1:表3-1 数据结构表字段类型 含义ho

9、st char *网页所在的主机 port int网络服务器所使用的端口dirchar *网页所在的目录pagechar *网页文件名filechar *本地保存的文件名pageinfo char *保存网页信息的文件名urlchar *存储网页titlechar *网页的标题keywordschar *网页的关键字bodychar *网页的摘要protocalchar连接使用的协议 0 -http 1- httpsurl_countint网页中的数目typechar *网页类型codechar *网页编码page_sizeint网页大小is_handledchar是否处理过brotherst

10、rcut *兄弟节点链表指针childstruct *子节点链表指针系统把初始的保存在了init_url文件中;把一些异常情况保存在了crawl.log文件中;把下载的网页文件保存在了page_db文件夹中;把网页信息文件保存在page_info文件夹中;把网页中文件保存在了page_url文件夹中;把网页文件名称,网页信息文件名称,网页文件名称保存在link.db文件中。3.3 系统各功能流程图(1)主模块功能流程图如图3-5:图3-4 主模块流程图需要说明的问题:1指向存池的是一个全局变量指针。2初始的URL必须从文件中读取,然后调用函数get_host()解析出URL的host, pag

11、e, dir, port。3必须要有全局变量指向URL队列的头。(2)功能模块流程图如图3-6:图3-5 下载模块流程图 需要说明的问题:1启动线程下载。2对于GET请求不变动的部分使用宏定义。3在服务器前需要建立socket套接字并进行域名解析。4注意HTTP报文头的接受。(3)功能模块流程图如图3-7:图3-6 解析模块流程图需要说明的问题:1)利用系统函数把网页读入存。2)利用正则表达式提取相关信息。3)把一个网页的URL写入文件保存。(4)功能模块流程图如图3-8:图3-7 界面流程图需要说明的问题:1配置界面配置爬行深度的参数必须大于0。2每个界面必须有返回按钮和返回首页的按钮。3配

12、置界面输入的URL不能为空。4 系统实现4.1 相关技术分析4.1.1 多线程操作系统能够运行多线程还不到40年,但线程的出现带来了很多正面影响,使用多线程具有以下好处: (1)和进程相比,多线程是多任务操作中十分“节俭”的方式。在Linux操作系统中,开启新进程来达到多任务工作的目的是十分昂贵的,因为必须给新进程分配独立的地址空间以及用来维护代码段的众多数据表、堆栈段、数据段。而多个线程共享相同的存空间和大部分数据,因此启动一个线程跟启动一个进程在所花费的空间上有很大的差别,同时,在启动需要的时间上线程要远远小于进程。(2)通信机制。由于进程具有独立的数据空间,因此进程间只能通过通信的方式进

13、行数据传递,显然这种方式是耗时又不方便的。由于线程共享数据空间的特性,因此线程与线程通信更加方便。当然共享特性也带了一定的数据不一致的风险,但可以通过锁机制来解决。4.1.2 存池申请存空间几乎是每个系统必须涉及到的,而直接使用系统函数malloc和free进行存分配和释放会产生额外的开销并且频繁使用还会产生大量存碎片从而降低程序运行效率,同时还容易造成存泄漏。存池很好的解决了直接调用系统函数所带来的问题。也就说使用存池进行存申请、释放要比使用malloc和free方式快,系统开销小;不会造成存碎片或有很少的存碎片同时存池很好的避免了存泄漏。4.1.3 正则表达式在本说明书所叙述的网络爬虫系统

14、中在提取网页中、提取网页标题等功能函数中使用了正则表达式。正则表达式是Linux系统中一种非常重要的字符串搜索模式,是一组规则字符的集合。这些规则字符能够组成我们所需要的搜索规则,效率高、功能强,可以极简化处理字符串时的复杂度。虽然标准C是不支持正则表达式的,但是可以在POSIX函数库中的regex系列函数的辅助下在程序中运用它们。4.1.4 SSL协议SSL的全称是Secure Sockets Layer,它是一个为基于TCP的应用层协议提供安全连接的安全协议,为网络上数据的传输提供安全性保证,因而被广泛应用于网上银行、电子商务等金融领域。SSL提供的安全连接(如https)可以实现:(1)

15、连接的私密性:传输的数据是利用对称密钥进行加密,并利用RSA加密传输对称密钥算法中使用的密钥。(2)身份验证:对服务器和客户端进行身份验证的方法是基于证书利用数字签名实现的。SSL服务器和客户端通过公钥基础设施提供的机制从认证机构获取证书。(3)连接的可靠性:使用基于密钥的消息验证码来检验传输消息的完整性。消息验证码是将密钥和随机数转换为定长数据的一种算法。SSL协议本身可以分为两层:底层为SSL记录协议(SSL record protocol);上层为SSL握手协议(SSL handshake protocol)、SSL密码变化协议(SSL change cipher spec protoc

16、ol)和SSL警告协议(SSL alert protocol)。4.2 系统功能模块的实现(一)主模块(1)主要事件流:1调用存池模块创建存池返回指向存池的指针并在程序结尾销毁存池。2初始URL队列。3调用下载模块和分析模块。(2)异常事件流:1创建存池失败。2初始URL队列失败。(3)重要编码实现: cache = object_cache_create( sizeof(WEBNODE), OBJECT_COUNT ); confp = fopen(CONF_PATH, r); crawl_deep = atoi(buf); rfp = fopen(FILE_PATH, r); while(

17、) get_host(); add_init_node(); handle_init_node(nodeheader, FIRST); object_cache_destroy( cache );(二) 存池模块(1)主要事件流:1创建存池。2销毁存池。3分配存对象。4回收存对象。5释放存对象。(2)异常事件流:1申请大块存失败。2分配存对象失败。3释放存块失败。(3)模块重要函数接口:1int object_cache_init( object_cache_t *cache, size_t unit_size, unsigned count );接口功能: 初始化对象缓存。 针对已有的缓存结

18、构进行初始化;若count为0,则初始化后缓存中不包含可用对象在第一次申请时创建OBJECT_CACHE_DEFAULT_COUNT数目的对象。2void object_cache_free( object_cache_t *cache );接口功能:释放对象缓存部存储。3object_cache_t *object_cache_create( size_t unit_size, unsigned count );接口功能: 创建对象缓存池 。unit_size 单个对象大小; count 初始对象数目,同样作为自动扩大的数目。4void object_cache_destroy( objec

19、t_cache_t *cache );接口功能:销毁对象缓存池,同时销毁缓存中的所有对象。5void *object_new( object_cache_t *cache );接口功能:从缓存中获取一个新对象6int object_del( object_cache_t *cache, void *object );接口功能:将对象释放到缓存中。(三)下载模块(1)主要事件流:1构造GET请求。2服务器。3发送GET请求。4接受返回的数据。(2)异常事件流:1服务器失败。 2发送请失败。3接受返回数据失败(3)重要代码实现:static int get_https_page(int sockf

20、d, WEBNODE *node, char *request) SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); ctx = SSL_CTX_new(SSLv23_client_method(); ssl = SSL_new(ctx); SSL_set_fd(ssl, sockfd); if (SSL_connect(ssl) else SSL_get_cipher(ssl); len = SSL_write(ssl, request, strlen(request); while() 。接

21、受报文头。 while( ) fclose(localfp); (四)解析模块(1)主要事件流:1把网页读入存。2提取网页标题。3提取网页关键字。4提取网页类型和编码。5提取网页。6检查是否处理过。(2)异常事件流:1向URL队列添加。2网页读入存失败。3打开文件失败。(3)重要代码实现: struct node_t *getinfo (const char *page, const char *pattern) nodearr = malloc (maxnode * sizeof (struct node_t); for ( i=0; patterni; i+ ) regcomp (®

22、, patterni, REG_EXTENDED | REG_ICASE); p = page; while (1) ret = regexec (®, p, NRM, rm, 0); maxnode += ADDNODESTEP; nodearr = realloc (nodearr, maxnode * sizeof (struct node_t); ret = addnode (nodearr, nnode, newpattern, rm); p = page + ret; regfree (®); nodearrnnode.begin = -1; nodearrnnode.

23、end = -1; qsort (nodearr, nnode, sizeof (struct node_t), nodecmp); (五)界面(1)主要事件流:1能够设置参数和添加网页。2能够显示参数和并可以对他们进行基本的操作。3能够执行后台的爬虫系统。4能够显示执行结果。(2)异常事件流:1添加不合法的数据。(六)其他功能模块(1)主要事件流:1读取现在的时间。2保存及时数据。(2)异常事件流:1打开文件失败。5 测试与结果对界面的测试:能够通过界面把数据写入文件并能够从文件中读出在页面上显示。返回和执行按钮可以正常的使用。数据的修改和删除功能能够正常使用。但对于异常数据没有进行判断以致

24、不合法的数据也可以写入配置文件。对爬虫程序的测试:输入不合法的URL。能够把错误类型写入日志文件。输入各种类型的URL,只对http和https处理其他被视为异常。对系统速度的测试:经过多次运行计算平均数值。得到系统的运行效率不是很高。平均每秒大约下载3个网页。测试移植性:把系统移植到其他的linux系统上运行大多是缺少openssl库而致使系统出错。总的来说系统没有出现系统无响应,处于死机状态,需要其他人工修复系统才可复原这样的严重错误。经过多测试和修改系统现已能够正常运行。配置界面和效果图如下:图5-1 使用linux命令行运行系统的效果图图5-2 配置界面图说明:1设置参数把参数写进了s

25、et.conf文件。2添加网址把网址写进了init_url文件。3执行爬虫程序按钮是触发系统运行。图5-3 运行之后的效果图说明:1点击查看日志按钮出现的效果图为图5-4。2点击查看网页信息出现效果图为图5-5。3点击查看网页中的出现效果图为图5-6.4点击打开网页出现效果图为图5-7。图5-4 显示日志文件效果图图5-5 网页信息效果图图5-6 网页信息效果图图5-7 显示网页效果图Linux 下数据文件存储的格式如图5-8图5-8 linux下数据文件效果图说明:1page_db 文件夹中存放的文件如图5-9。2page_info 文件夹中存放的文件如图5-10。3page_url 文件夹

26、中存放的问价如图5-11。图5-9 网页文件效果图图5-10 网页信息文件效果图图5-11 网页中的效果图结论该系统主要实现了一下功能:1http和https协议网页的下载并把网页中的解析出来存放在文件中,2把网页中的标题,关键字,摘要解析出来存放在文件中。3把存放在URL队列中。4该系统现已能够顺利的运行,有很好的健壮性,可持续性。虽然系统能够正常的运行,但是由于本人的经验不足和时间有限,以及对一些相关的技术、思想、理论掌握的还不够透彻,因此本系统中还存在许多不足、许多待完善的地方:1现有的网络爬虫系统对除了http和https协议的能够下载外,对其他协议的均按异常情况处理。2对于后缀是.s

27、htm和.shml的网页不能够下载。这些不足之处,会在今后的学习中不断的完善和维护,希望能够达到更好的效果。参 考 文 献1 万源,万方,王大震一种并行Crawler系统中的URL分配算法设计口计算机工程与应用,20062 宗礼,钦,肖华,等高性能并行爬行器计算机工程与设计 ,20063 三峰,吴国新一种面向动态异构网络的容错非对称DHT方 法计算机研究与发展,20074 余锦,史树明分布式网页排序算法及其传输模式分析计算机工程与应用,20045 贺丹,亚楠关于搜索引擎的研究综述计算机技术与发展,20066 敏,高剑峰,马少平基于描述文本及其上下文的Web信息检索计算机研究与发展,20047

28、贺广宜,罗莉分布式搜索引擎的设计与实现计算机应用,20038 周雪忠,吴朝晖文本知识发现:基于信息抽取的文本挖掘计算机科学,20039 华,罗昶,王建勇基于Web的百万级FTP搜索引擎的设计 与实现口计算机应用,200010 吴功宜,计算机网络(第三版).:清华大学,200711 海藩,软件工程导论(第五版).:清华大学,200812 Winter,中文搜索引擎技术解密:网络蜘蛛 人民邮电,200413 Sergey 等,The Anatomy of a Large-Scale Hypertextual Web Search Engine清华大学,199814 Wisenut,WiseNut

29、Search Engine white paper 中国电力,200115(美)Gary R.Wright W.Richard Stevens,TCP-IP协议详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议 机械工业,2002 16 (美)维尼|译者:明/贾晓楠,登上GOOGLE之巅SEO技巧与技术 机械工业 201017 Ronald J.Norman.Object-Oriented System Analysis and Design.清华大学,200118 Mark Wutka,Alan Moffet,Kunal MittalSams Teach Yourself JAVAServerPages 2.0 with Apache Tomcat in 24 HoursSams Publishing,200319 Kong Michael. An environment for secure SQL/Server computingOxford University Press Inc.199320 Tsui,Frank F. JSP EM DASH A RESEARCH SIGNAL PROCESSOR IN JOSEPHSON TECHNOLOGY. IBM Journal of Research and Development,Vol24, No2,1980

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1