版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
25/28网络爬虫的设计和实现摘要网络爬虫将下载的网页和收集到的网页信息存储在本地数据库中以供搜寻引擎运用,它是一个特地从万维网上下载网页并分析网页的程序。随着网络的快速发展,人们对搜寻引擎的要求也越来越高,而网络爬虫的效率干脆影响着搜寻引擎的质量。本课题探讨的是通用网络爬虫,它是从一个或若干个初始网页的链接起先进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页中抽取新链接放入到链接队列中,直到爬虫系统满意了停止条件。该课题主要涉及到了缓冲池技术,多线程技术,套接字技术,和SSL协议,正则表达式,Linux网络编程技术,PHP+Apache的运用等相关技术。本说明书叙述的网络爬虫是以LinuxC实现的,加以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引言随着网络技术日新月异的发展,互联网俨然已成为信息的最大载体。为了能够在浩瀚的信息海洋中精确地查询用户所须要的信息,搜寻引擎技术应运而生。目前比较流行的搜寻引擎是Google和百度,他们拥有着浩大的用户数量。作为搜寻引擎的重要组成部分,网络爬虫的设计干脆影响着搜寻引擎的质量。网络爬虫是一个特地从万维网上下载网页并分析网页的程序。它将下载的网页和采集到的网页信息存储在本地数据库中以供搜寻引擎运用。网络爬虫的工作原理是从一个或若干初始网页的链接起先进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的链接放入到链接队列中,直到爬虫程序满意系统的某一条件时停止。本说明书对课题背景进行简洁介绍的同时,又对探讨网络爬虫的意义进行了叙述,在此基础上,具体的介绍来了利用C语言在linux系统上开发出多线程网络爬虫的设计步骤。1.1课题选题背景搜寻引擎是用户在网上冲浪时常常运用的一种工具,毫无疑问,每个用户都可以通过搜寻引擎得到自己所须要的网络资源。搜寻引擎一词在互联网领域得到广泛的应用,但是每个地区对它又有着不同的理解。在一些欧美国家搜寻引擎常常是基于因特网的,它们通过网络爬虫程序采集网页,并且索引网页的每个词语,也就是全文检索。而在一些亚洲国家,搜寻引擎通常是基于网站书目的搜寻服务。总的来说:搜寻引擎只是一种检索信息的工具。它的检索方式分为以下两种:一种是书目型的方式,爬虫程序把网络的资源采集在一起,再依据资源类型的不同而分成不同的书目,然后接着一层层地进行分类,人们查询信息时就是按分类一层层进入的,最终得到自己所需求的信息。另一种是用户常常运用的关键字方式,搜寻引擎依据用户输入的关键词检索用户所需资源的地址,然后把这些地址反馈给用户。1.2课题探讨的意义网络在我们的生活中越来越重要,网络的信息量也越来越大,探讨该课题可以更好的理解网络爬虫在搜寻引擎中的作用以及网络爬虫的原理。现实中,一般的服务器大多是linux系统该课题更好的协作了linux系统上运行爬虫程序,加上界面更简洁操作。21世纪是一个讲究信息平安的时代,于是网站上出现了越来越多的s(超文本传输平安协议)协议的链接,该课题很好的利用了SSL协议解决了下载s协议链接的问题。设备的内存是宝贵的,如何更加合理有效地利用内存提高内存的利用率是值得探讨的,该课题为了解决内存的利用运用了内存池来提高内存的运用率。2需求分析网络爬虫是一个特地从万维网上下载网页并分析网页的程序。它将下载的网页和收集到的信息存储在本地数据库中以供搜寻引擎运用。网络爬虫的工作原理是从一个或若干初始网页的链接起先进而得到一个链接队列。伴随着网页的抓取又不断从抓取到的网页里抽取新的链接放入到链接队列中,直到爬虫程序满意系统的某一条件时停止。它是搜寻引擎的重要组成部分。2.1功能需求分析网页下载功能能够下载任何协议和s协议的链接的网页。构造恳求中的GET恳求。分析响应恳求。网页分析功能提取网页标题。提取网页关键字。提取网页摘要。提取网页链接并统计数量。把新链接加入到URL队列。内存池功能能够安排固定大小的内存。能够回收内存对象。能够释放内存对象。能够销毁内存池。能够安排固定大小的内存。保存功能能够正确保存网页以及网页信息到文件。功能把系统运行中的异样写入日志文件。界面可以配置参数和运行后台的爬虫系统。能够查看运行结果。2.2系统性能分析当用户运用系统时,系统须要能够对于一些异样状况系统能够记录并跳过此异样接着执行。系统须要具有较高的可移植性和牢靠性。系统须要具有很好的可测试性和可维护性。网络爬虫系统是不停的从万维网上下载网页和采集网页信息的系统。由于网络爬虫系统是搜寻引擎的组成部分,搜寻引擎要利用到爬虫系统的信息,所以系统要设计合理的存储文件并建立索引。3系统设计3.1系统工作流程图本系统通过IE共同访问Apache服务器的发布的页面、Apache服务器返回页面便利用户操作。系统物理结构如图3-1:图3-1系统物理结构图界面的流程如图3-2:图3-2页面结构图.网络爬虫系统流程如图3-3:图3-3系统流程图3.2数据结构设计系统中主要是运用了链表作为URL队列,而链表中的每个结构体是一个数据单元,数据单元中的元素及其含义如表3-1:表3-1数据结构表字段类型含义hostchar*网页所在的主机portint网络服务器所运用的端口dirchar*网页所在的书目pagechar*网页文件名filechar*本地保存的文件名pageinfochar*保存网页信息的文件名urlchar*存储网页链接titlechar*网页的标题keywordschar*网页的关键字bodychar*网页的摘要protocalchar连接运用的协议0-1--surl_countint网页中的链接数目typechar*网页类型codechar*网页编码page_sizeint网页大小is_handledchar是否处理过brotherstrcut*兄弟节点链表指针childstruct*子节点链表指针系统把初始的链接保存在了init_url文件中;把一些异样状况保存在了crawl.log文件中;把下载的网页文件保存在了page_db文件夹中;把网页信息文件保存在page_info文件夹中;把网页中链接文件保存在了page_url文件夹中;把网页文件名称,网页信息文件名称,网页链接文件名称保存在link.db文件中。3.3系统各功能流程图主模块功能流程图如图3-5:图3-4主模块流程图须要说明的问题:指向内存池的是一个全局变量指针。初始的URL必需从文件中读取,然后调用函数get_host()解析出URL的host,page,dir,port。必须要有全局变量指向URL队列的头。功能模块流程图如图3-6:图3-5下载模块流程图须要说明的问题:启动线程下载。对于GET恳求不变动的部分运用宏定义。在链接服务器前须要建立socket套接字并进行域名解析。留意报文头的接受。功能模块流程图如图3-7:图3-6解析模块流程图须要说明的问题:利用系统函数把网页读入内存。利用正则表达式提取相关信息。把一个网页的URL写入文件保存。功能模块流程图如图3-8:图3-7界面流程图须要说明的问题:配置界面配置爬行深度的参数必需大于0。每个界面必需有返回按钮和返回首页的按钮。配置界面输入的URL不能为空。4系统实现4.1相关技术分析4.1.1操作系统能够运行多线程还不到40年,但线程的出现带来了很多正面影响,运用多线程具有以下好处:和进程相比,多线程是多任务操作中特别“节俭”的方式。在Linux操作系统中,开启新进程来达到多任务工作的目的是特别"昂贵"的,因为必需给新进程安排独立的地址空间以及用来维护代码段的众多数据表、堆栈段、数据段。而多个线程共享相同的内存空间和大部分数据,因此启动一个线程跟启动一个进程在所花费的空间上有很大的差别,同时,在启动须要的时间上线程要远远小于进程。通信机制。由于进程具有独立的数据空间,因此进程间只能通过通信的方式进行数据传递,明显这种方式是耗时又不便利的。由于线程共享数据空间的特性,因此线程和线程通信更加便利。当然共享特性也带了肯定的数据不一样的风险,但可以通过锁机制来解决。4.1申请内存空间几乎是每个系统必需涉及到的,而干脆运用系统函数malloc和free进行内存安排和释放会产生额外的开销并且频繁运用还会产生大量内存碎片从而降低程序运行效率,同时还简洁造成内存泄漏。内存池很好的解决了干脆调用系统函数所带来的问题。也就说运用内存池进行内存申请、释放要比运用malloc和free方式快,系统开销小;不会造成内存碎片或有很少的内存碎片同时内存池很好的避开了内存泄漏。4.1.3正则表达式在本说明书所叙述的网络爬虫系统中在提取网页中链接、提取网页标题等功能函数中运用了正则表达式。正则表达式是Linux系统中一种特别重要的字符串搜寻模式,是一组规则字符的集合。这些规则字符能够组成我们所须要的搜寻规则,效率高、功能强,可以极大地简化处理字符串时的困难度。虽然标准C是不支持正则表达式的,但是可以在POSIX函数库中的regex系列函数的协助下在程序中运用它们。4.1SSL的全称是SecureSocketsLayer,它是一个为基于TCP的应用层协议供应平安连接的平安协议,为网络上数据的传输供应平安性保证,因而被广泛应用于网上银行、电子商务等金融领域。SSL供应的平安连接(如s)可以实现:连接的私密性:传输的数据是利用对称密钥进行加密,并利用RSA加密传输对称密钥算法中运用的密钥。身份验证:对服务器和客户端进行身份验证的方法是基于证书利用数字签名实现的。SSL服务器和客户端通过公钥基础设施供应的机制从认证机构获得证书。连接的牢靠性:运用基于密钥的消息验证码来检验传输消息的完整性。消息验证码是将密钥和随机数转换为定长数据的一种算法。SSL协议本身可以分为两层:底层为SSL记录协议(SSLrecordprotocol);上层为SSL握手协议(SSLhandshakeprotocol)、SSL密码改变协议(SSLchangecipherspecprotocol)和SSL警告协议(SSLalertprotocol)。4.2系统功能模块的实现主模块主要事务流:调用内存池模块创建内存池返回指向内存池的指针并在程序结尾销毁内存池。初始URL队列。调用下载模块和分析模块。异样事务流:创建内存池失败。初始URL队列失败。重要编码实现: cache=object_cache_create(sizeof(WEBNODE),OBJECT_COUNT); confp=fopen(CONF_PATH,"r"); crawl_deep=atoi(buf); rfp=fopen(FILE_PATH,"r"); while() { get_host(); add_init_node(); }handle_init_node(nodeheader,FIRST); object_cache_destroy(cache);内存池模块主要事务流:创建内存池。销毁内存池。安排内存对象。回收内存对象。释放内存对象。异样事务流:申请大块内存失败。安排内存对象失败。释放内存块失败。模块重要函数接口:intobject_cache_init(object_cache_t*cache,size_tunit_size,unsignedcount);接口功能:初始化对象缓存。针对已有的缓存结构进行初始化;若count为0,则初始化后缓存中不包含可用对象在第一次申请时创建OBJECT_CACHE_DEFAULT_COUNT数目的对象。voidobject_cache_free(object_cache_t*cache);接口功能:释放对象缓存内部存储。object_cache_t*object_cache_create(size_tunit_size,unsignedcount);接口功能:创建对象缓存池。unit_size单个对象大小;count初始对象数目,同样作为自动扩大的数目。voidobject_cache_destroy(object_cache_t*cache);接口功能:销毁对象缓存池,同时销毁缓存中的全部对象。void*object_new(object_cache_t*cache);接口功能:从缓存中获得一个新对象intobject_del(object_cache_t*cache,void*object);接口功能:将对象释放到缓存中。下载模块主要事务流:构造GET恳求。链接服务器。发送GET恳求。接受网站返回的数据。异样事务流:链接网站服务器失败。发送请失败。接受网站返回数据失败重要代码实现:staticintget_s_page(intsockfd,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() {。。。接受报文头。。。 } while() fclose(localfp);} 解析模块主要事务流:把网页读入内存。提取网页标题。提取网页关键字。提取网页类型和编码。提取网页链接。检查链接是否处理过。异样事务流:向URL队列添加链接。网页读入内存失败。打开文件失败。重要代码实现:structnode_t*getinfo(constchar*page,constchar*pattern[]){nodearr=malloc(maxnode*sizeof(structnode_t));for(i=0;pattern[i];i++){regcomp(®,pattern[i],REG_EXTENDED|REG_ICASE);p=page;while(1){ret=regexec(®,p,NRM,rm,0);maxnode+=ADDNODESTEP;nodearr=realloc(nodearr,maxnode*sizeof(structnode_t));ret=addnode(nodearr,nnode,newpattern,rm);p=page+ret;}regfree(®);}nodearr[nnode].begin=-1;nodearr[nnode].end=-1;qsort(nodearr,nnode,sizeof(structnode_t),nodecmp);}界面主要事务流:能够设置参数和添加网页链接。能够显示参数和链接并可以对他们进行基本的操作。能够执行后台的爬虫系统。能够显示执行结果。异样事务流:添加不合法的数据。其他功能模块主要事务流:读取现在的时间。保存刚好数据。异样事务流:打开文件失败。5测试和结果对界面的测试:能够通过界面把数据写入文件并能够从文件中读出在页面上显示。返回和执行按钮可以正常的运用。数据的修改和删除功能能够正常运用。但对于异样数据没有进行推断以致不合法的数据也可以写入配置文件。对爬虫程序的测试:输入不合法的URL。能够把错误类型写入日志文件。输入各种类型的URL,只对和s链接处理其他链接被视为异样。对系统速度的测试:经过多次运行计算平均数值。得到系统的运行效率不是很高。平均每秒大约下载3个网页。测试移植性:把系统移植到其他的linux系统上运行大多是缺少openssl库而致使系统出错。总的来说系统没有出现系统无响应,处于死机状态,须要其他人工修复系统才可复原这样的严峻错误。经过多测试和修改系统现已能够正常运行。配置界面和效果图如下:图5-1运用linux吩咐行运行系统的效果图图5-2配置界面图说明:设置参数把参数写进了set.conf文件。添加网址把网址写进了init_url文件。执行爬虫程序按钮是触发系统运行。图5-3运行之后的效果图说明:点击查看日志按钮出现的效果图为图5-4。点击查看网页信息出现效果图为图5-5。点击查看网页中的链接出现效果图为图5-6.点击打开网页出现效果图为图5-7。图5-4显示日志文件效果图图5-5网页信息效果图图5-6网页链接信息效果图图5-7显示网页效果图Linux下数据文件存储的格式如图5-8图5-8linux下数据文件效果图说明:page_db文件夹中存放的文件如图5-9。page_info文件夹中存放的文件如图5-10。page_url文件夹中存放的问价如图5-11。图5-9网页文件效果图图5-10网页信息文件效果图图5-11网页中的链接效果图结论该系统主要实现了一下功能:和s协议链接网页的下载并把网页中的链接解析出来存放在文件中,把网页中的标题,关键字,摘要解析出来存放在文件中。把链接存放在URL队列中。该系统现已能够顺当的运行,有很好的健壮性,可持续性。虽然系统能够正常的运行,但是由于本人的阅历不足和时间有限,以及对一些相关的技术、思想、理论驾驭的还不够透彻,因此本系统中还存在很多不足、很多待完善的地方:现有的网络爬虫系统对除了和s协议的链接能够下载外,对其他协议的链接均按异样状况处理。对于后缀是.shtm和.shml的网页不能够下载。这些不足之处,会在今后的学习中不断的完善和维护,希望能够达到更好的效果。参考文献[1]万源,万方,王大震.一种并行Crawler系统中的URL安排算法设计口.计算机工程和应用,2006[2]蒋宗礼,赵钦,肖华,等.高性能并行爬行器.计算机工程和设计,2006[3]张三峰,吴国新.一种面对动态异构网络的容错非对称DHT方法.计算机探讨和发展,2007[4]余锦,史树明.分布式网页排序算法及其传输模式分析.计算机工程和应用,2004[5]沈贺丹,潘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采矿许可证延续换证合同
- 云南公务员面试5
- 地方公务员山西申论114
- 2002年云南省国家公务员统一考试
- 24.4 第1课时 解直角三角形及其简单应用 华师大版数学九年级上册课件
- 四川省公务员面试模拟11
- 新疆申论模拟71
- 地方公务员海南申论2013年
- 2024年村民土地转让协议
- 新疆申论模拟3
- 小学英语人教PEP版6年级(上)期中考试复习
- 评茶员(高级)复习题含参考答案
- 2019年4月高等教育自学考试资产评估真题
- 《北京市社会保险单位信息变更登记表》
- 2024年国家开放大学(电大)-混凝土结构设计(A)考试近5年真题集锦(频考类试题)带答案
- 新员工三级安全教育考试试题参考答案
- 《中华人民共和国道路交通安全法实施条例》知识专题培训
- 全国巾帼家政服务职业技能大赛(母婴护理员)理论考试题库(含答案)
- 仿生青蛙机器人的设计与运动控制
- 职业健康安全培训课件(共32张课件)
- 2024-2025学年八年级英语上学期期中测试卷03人教新目标版
评论
0/150
提交评论