网络的爬虫的设计与实现完整版Word文档下载推荐.docx
《网络的爬虫的设计与实现完整版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络的爬虫的设计与实现完整版Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
![网络的爬虫的设计与实现完整版Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/28/6f7e2122-97f3-46b0-935f-b46cc3350e89/6f7e2122-97f3-46b0-935f-b46cc3350e891.gif)
2需求分析
它将下载的网页和收集到的信息存储在本地数据库中以供搜索引擎使用。
它是搜索引擎的重要组成局部。
2.1功能需求分析
(1)网页下载功能
1能够下载任何协议和s协议的的网页。
2构造请求中的GET请求。
3分析响应请求。
(2)网页分析功能
1提取网页标题。
2提取网页关键字。
3提取网页摘要。
4提取网页并统计数量。
5把新参加到URL队列。
(3)内存池功能
1能够分配固定大小的内存。
2能够回收内存对象。
3能够释放内存对象。
4能够销毁内存池。
5能够分配固定大小的内存。
(4)保存功能
1能够正确保存网页以与网页信息到文件。
2功能把系统运行中的异常写入日志文件。
(5)界面
1可以配置参数和运行后台的爬虫系统。
2能够查看运行结果。
2.2系统性能分析
当用户使用系统时,系统需要能够对于一些异常状况系统能够记录并跳过此异常继续执行。
系统需要具有较高的可移植性和可靠性。
系统需要具有很好的可测试性和可维护性。
网络爬虫系统是不停的从万维网上下载网页和采集网页信息的系统。
由于网络爬虫系统是搜索引擎的组成局部,搜索引擎要利用到爬虫系统的信息,所以系统要设计合理的存储文件并建立索引。
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数据结构表
字段
类型
含义
host
char*
网页所在的主机
port
int
网络服务器所使用的端口
dir
char*
网页所在的
page
网页文件名
file
本地保存的文件名
pageinfo
保存网页信息的文件名
url
存储网页
title
网页的标题
keywords
网页的关键字
body
网页的摘要
protocal
char
连接使用的协议0-1--s
url_count
int
网页中的数目
type
网页类型
code
网页编码
page_size
网页大小
is_handled
是否处理过
brother
strcut*
兄弟节点链表指针
child
struct*
子节点链表指针
系统把初始的保存在了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,page,dir,port。
3必须要有全局变量指向URL队列的头。
(2)功能模块流程图如图3-6:
图3-5下载模块流程图
需要说明的问题:
1启动线程下载。
2对于GET请求不变动的局部使用宏定义。
3在服务器前需要建立socket套接字并进展域名解析。
4注意报文头的承受。
(3)功能模块流程图如图3-7:
图3-6解析模块流程图
1)利用系统函数把网页读入内存。
2)利用正如此表达式提取相关信息。
3)把一个网页的URL写入文件保存。
(4)功能模块流程图如图3-8:
图3-7界面流程图
1配置界面配置爬行深度的参数必须大于0。
2每个界面必须有返回按钮和返回首页的按钮。
3配置界面输入的URL不能为空。
4系统实现
4.1相关技术分析
操作系统能够运行多线程还不到40年,但线程的出现带来了很多正面影响,使用多线程具有以下好处:
(1)和进程相比,多线程是多任务操作中十分“节俭〞的方式。
在Linux操作系统中,开启新进程来达到多任务工作的目的是十分"
昂贵"
的,因为必须给新进程分配独立的地址空间以与用来维护代码段的众多数据表、堆栈段、数据段。
而多个线程共享一样的内存空间和大局部数据,因此启动一个线程跟启动一个进程在所花费的空间上有很大的差异,同时,在启动需要的时间上线程要远远小于进程。
(2)通信机制。
由于进程具有独立的数据空间,因此进程间只能通过通信的方式进展数据传递,显然这种方式是耗时又不方便的。
由于线程共享数据空间的特性,因此线程与线程通信更加方便。
当然共享特性也带了一定的数据不一致的风险,但可以通过锁机制来解决。
申请内存空间几乎是每个系统必须涉与到的,而直接使用系统函数malloc和free进展内存分配和释放会产生额外的开销并且频繁使用还会产生大量内存碎片从而降低程序运行效率,同时还容易造成内存泄漏。
内存池很好的解决了直接调用系统函数所带来的问题。
也就说使用内存池进展内存申请、释放要比使用malloc和free方式快,系统开销小;
不会造成内存碎片或有很少的内存碎片同时内存池很好的防止了内存泄漏。
正如此表达式
在本说明书所表示的网络爬虫系统中在提取网页中、提取网页标题等功能函数中使用了正如此表达式。
正如此表达式是Linux系统中一种非常重要的字符串搜索模式,是一组规如此字符的集合。
规如此字符能够组成我们所需要的搜索规如此,效率高、功能强,可以极大地简化处理字符串时的复杂度。
虽然标准C是不支持正如此表达式的,但是可以在POSIX函数库中的regex系列函数的辅助下在程序中运用它们。
SSL的全称是SecureSocketsLayer,它是一个为基于TCP的应用层协议提供安全连接的安全协议,为网络上数据的传输提供安全性保证,因而被广泛应用于网上银行、电子商务等金融领域。
SSL提供的安全连接(如s)可以实现:
(1)连接的性:
传输的数据是利用对称密钥进展加密,并利用RSA加密传输对称密钥算法中使用的密钥。
(2)身份验证:
对服务器和客户端进展身份验证的方法是基于证书利用数字签名实现的。
SSL服务器和客户端通过公钥根底设施提供的机制从认证机构获取证书。
(3)连接的可靠性:
使用基于密钥的消息验证码来检验传输消息的完整性。
消息验证码是将密钥和随机数转换为定长数据的一种算法。
SSL协议本身可以分为两层:
底层为SSL记录协议〔SSLrecordprotocol〕;
上层为SSL握手协议〔SSLhandshakeprotocol〕、SSL密码变化协议〔SSLchangecipherspecprotocol〕和SSL警告协议〔SSLalertprotocol〕。
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,"
while()
{
get_host();
add_init_node();
}
handle_init_node(nodeheader,FIRST);
object_cache_destroy(cache);
(二)内存池模块
1创建内存池。
2销毁内存池。
3分配内存对象。
4回收内存对象。
5释放内存对象。
1申请大块内存失败。
2分配内存对象失败。
3释放内存块失败。
(3)模块重要函数接口:
1intobject_cache_init(object_cache_t*cache,size_tunit_size,unsignedcount);
接口功能:
初始化对象缓存。
针对已有的缓存结构进展初始化;
假如count为0,如此初始化后缓存中不包含可用对象在第一次申请时创建OBJECT_CACHE_DEFAULT_COUNT数目的对象。
2voidobject_cache_free(object_cache_t*cache);
释放对象缓存内部存储。
3object_cache_t*object_cache_create(size_tunit_size,unsignedcount);
创建对象缓存池。
unit_size单个对象大小;
count初始对象数目,同样作为自动扩大的数目。
4voidobject_cache_destroy(object_cache_t*cache);
销毁对象缓存池,同时销毁缓存中的所有对象。
5void*object_new(object_cache_t*cache);
从缓存中获取一个新对象
6intobject_del(object_cache_t*cache,void*object);
将对象释放到缓存中。
(三)下载模块
1构造GET请求。
2服务器。
3发送GET请求。
4承受返回的数据。
1服务器失败。
2发送请失败。
3承受返回数据失败
(3)重要代码实现:
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()
fclose(localfp);
(四)解析模块
1把网页读入内存。
2提取网页标题。
3提取网页关键字。
4提取网页类型和编码。
5提取网页。
6检查是否处理过。
1向URL队列添加。
2网页读入内存失败。
3打开文件失败。
structnode_t*getinfo(constchar*page,constchar*pattern[])
{
nodearr=malloc(maxnode*sizeof(structnode_t));
for(i=0;
pattern[i];
i++)
regp(&
reg,pattern[i],REG_EXTENDED|REG_ICASE);
p=page;
while
(1)
{
ret=regexec(&
reg,p,NRM,rm,0);
maxnode+=ADDNODESTEP;
nodearr=realloc(nodearr,maxnode*sizeof(structnode_t));
ret=addnode(nodearr,nnode,newpattern,rm);
p=page+ret;
}
regfree(&
reg);
nodearr[nnode].begin=-1;
nodearr[nnode].end=-1;
qsort(nodearr,nnode,sizeof(structnode_t),nodecmp);
(五)界面
1能够设置参数和添加网页。
2能够显示参数和并可以对他们进展根本的操作。
3能够执行后台的爬虫系统。
4能够显示执行结果。
1添加不合法的数据。
(六)其他功能模块
1读取现在的时间。
2保存与时数据。
(2)异常事件流:
1打开文件失败。
5测试与结果
对界面的测试:
能够通过界面把数据写入文件并能够从文件中读出在页面上显示。
返回和执行按钮可以正常的使用。
数据的修改和删除功能能够正常使用。
但对于异常数据没有进展判断以致不合法的数据也可以写入配置文件。
对爬虫程序的测试:
输入不合法的URL。
能够把错误类型写入日志文件。
输入各种类型的URL,只对和s处理其他被视为异常。
对系统速度的测试:
经过屡次运行计算平均数值。
得到系统的运行效率不是很高。
平均每秒大约下载3个网页。
测试移植性:
把系统移植到其他的linux系统上运行大多是缺少openssl库而致使系统出错。
总的来说系统没有出现系统无响应,处于死机状态,需要其他人工修复系统才可复原这样的严重错误。
经过多测试和修改系统现已能够正常运行。
配置界面和效果图如下:
图5-1使用linux命令行运行系统的效果图
图5-2配置界面图
说明:
1设置参数把参数写进了set.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-8linux下数据文件效果图
1page_db文件夹中存放的文件如图5-9。
2page_info文件夹中存放的文件如图5-10。
3page_url文件夹中存放的问价如图5-11。
图5-9网页文件效果图
图5-10网页信息文件效果图
图5-11网页中的效果图
结论
该系统主要实现了一下功能:
1和s协议网页的下载并把网页中的解析出来存放在文件中,
2把网页中的标题,关键字,摘要解析出来存放在文件中。
3把存放在URL队列中。
4该系统现已能够顺利的运行,有很好的健壮性,可持续性。
虽然系统能够正常的运行,但是由于本人的经验不足和时间有限,以与对一些相关的技术、思想、理论掌握的还不够透彻,因此本系统中还存在许多不足、许多待完善的地方:
1现有的网络爬虫系统对除了和s协议的能够下载外,对其他协议的均按异常情况处理。
2
不足之处,会在今后的学习中不断的完善和维护,希望能够达到更好的效果。
参考文献
[1]万源,万方,王大震.一种并行Crawler系统中的URL分配算法设计口.计算机工程与应用,2006
[2]蒋宗礼,赵钦,肖华,等.高性能并行爬行器.计算机工程与设计,2006
[3]X三峰,吴国新.一种面向动态异构网络的容错非对称DHT方法.计算机研究与开展,2007
[4]余锦,史树明.分布式网页排序算法与其传输模式分析.计算机工程与应用,2004
[5]沈贺丹,潘亚楠.关于搜索引擎的研究综述.计算机技术与开展,2006
[6]X敏,高剑峰,马少平.基于描述文本与其上下文的Web信息检索.计算机研究与开展,2004
[7]贺广宜,罗莉.分布式搜索引擎的设计与实现.计算机应用,2003
[8]周雪忠,吴朝晖.文本知识发现:
基于信息抽取的文本挖掘.计算机科学,2003
[9]陈华,罗昶,王建勇.基于Web的百万级FTP搜索引擎的设计与实现口.计算机应用,2000
[10]吴功宜,计算机网络〔第三版〕.:
清华大学,2007
[11]X海藩,软件工程导论〔第五版〕.:
清华大学,2008
[12]Winter,中文搜索引擎技术解密:
网络蜘蛛人民邮电,2004
[13]Sergey等,TheAnatomyofaLarge-ScaleHypertextualWebSearchEngine清华大学,1998
[14]Wisenut,WiseNutSearchEnginewhitepaper中国电力,2001
[15]〔美〕GaryR.WrightW.RichardStevens,TCP-IP协议详解卷3:
TCP事务协议,,NNTP和UNIX域协议机械工业,2002
[16](美)维尼|译者:
李明//贾晓楠,登上GOOGLE之巅——SEO技巧与技术机械工业2010
[18]MarkWutka,AlanMoffet,KunalMittal.SamsTeachYourselfJAVAServerPages2.0withApacheTomcatin24Hours.SamsPublishing,2003
[19]KongMichael.AnenvironmentforsecureSQL/Serverputing.OxfordUniversityPressInc.1993
[20]Tsui,FrankF.JSPEMDASHARESEARCHSIGNALPROCESSORINJOSEPHSONTECHNOLOGY.IBMJournalofResearchandDevelopment,Vol24,No2,1980