网络爬虫的设计与实现Word格式文档下载.doc

上传人:wj 文档编号:1500246 上传时间:2023-04-30 格式:DOC 页数:28 大小:1.78MB
下载 相关 举报
网络爬虫的设计与实现Word格式文档下载.doc_第1页
第1页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第2页
第2页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第3页
第3页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第4页
第4页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第5页
第5页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第6页
第6页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第7页
第7页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第8页
第8页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第9页
第9页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第10页
第10页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第11页
第11页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第12页
第12页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第13页
第13页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第14页
第14页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第15页
第15页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第16页
第16页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第17页
第17页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第18页
第18页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第19页
第19页 / 共28页
网络爬虫的设计与实现Word格式文档下载.doc_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

网络爬虫的设计与实现Word格式文档下载.doc

《网络爬虫的设计与实现Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《网络爬虫的设计与实现Word格式文档下载.doc(28页珍藏版)》请在冰点文库上搜索。

网络爬虫的设计与实现Word格式文档下载.doc

1.1课题选题背景

搜索引擎是用户在网上冲浪时经常使用的一种工具,毫无疑问,每个用户都可以通过搜索引擎得到自己所需要的网络资源。

搜索引擎一词在互联网领域得到广泛的应用,但是每个地区对它又有着不同的理解。

在一些欧美国家搜索引擎常常是基于因特网的,它们通过网络爬虫程序采集网页,并且索引网页的每个词语,也就是全文检索。

而在一些亚洲国家,搜索引擎通常是基于网站目录的搜索服务。

总的来说:

搜索引擎只是一种检索信息的工具。

它的检索方式分为以下两种:

一种是目录型的方式,爬虫程序把网络的资源采集在一起,再根据资源类型的不同而分成不同的目录,然后继续一层层地进行分类,人们查询信息时就是按分类一层层进入的,最后得到自己所需求的信息。

另一种是用户经常使用的关键字方式,

搜索引擎根据用户输入的关键词检索用户所需资源的地址,然后把这些地址反馈给用户。

1.2课题研究的意义

网络在我们的生活中越来越重要,网络的信息量也越来越大,研究该课题可以更好的理解网络爬虫在搜索引擎中的作用以及网络爬虫的原理。

现实中,一般的服务器大多是linux系统该课题更好的配合了linux系统上运行爬虫程序,加上界面更容易操作。

21世纪是一个讲究信息安全的时代,于是网站上出现了越来越多的https(超文本传输安全协议)协议的链接,该课题很好的利用了SSL协议解决了下载https协议链接的问题。

设备的内存是珍贵的,如何更加合理有效地利用内存提高内存的利用率是值得研究的,该课题为了解决内存的利用使用了内存池来提高内存的使用率。

2需求分析

它将下载的网页和收集到的信息存储在本地数据库中以供搜索引擎使用。

它是搜索引擎的重要组成部分。

2.1功能需求分析

(1)网页下载功能

①能够下载任何http协议和https协议的链接的网页。

②构造HTTP请求中的GET请求。

③分析HTTP响应请求。

(2)网页分析功能

①提取网页标题。

②提取网页关键字。

③提取网页摘要。

④提取网页链接并统计数量。

⑤把新链接加入到URL队列。

(3)内存池功能

①能够分配固定大小的内存。

②能够回收内存对象。

③能够释放内存对象。

④能够销毁内存池。

⑤能够分配固定大小的内存。

(4)保存功能

①能够正确保存网页以及网页信息到文件。

②功能把系统运行中的异常写入日志文件。

(5)界面

①可以配置参数和运行后台的爬虫系统。

②能够查看运行结果。

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-http1--https

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主模块流程图

需要说明的问题:

①指向内存池的是一个全局变量指针。

②初始的URL必须从文件中读取,然后调用函数get_host()解析出URL的host,page,dir,port。

③必须要有全局变量指向URL队列的头。

(2)功能模块流程图如图3-6:

图3-5下载模块流程图

需要说明的问题:

①启动线程下载。

②对于GET请求不变动的部分使用宏定义。

③在链接服务器前需要建立socket套接字并进行域名解析。

④注意HTTP报文头的接受。

(3)功能模块流程图如图3-7:

图3-6解析模块流程图

1)利用系统函数把网页读入内存。

2)利用正则表达式提取相关信息。

3)把一个网页的URL写入文件保存。

(4)功能模块流程图如图3-8:

图3-7界面流程图

①配置界面配置爬行深度的参数必须大于0。

②每个界面必须有返回按钮和返回首页的按钮。

③配置界面输入的URL不能为空。

4系统实现

4.1相关技术分析

4.1.1多线程

操作系统能够运行多线程还不到40年,但线程的出现带来了很多正面影响,使用多线程具有以下好处:

(1)和进程相比,多线程是多任务操作中十分“节俭”的方式。

在Linux操作系统中,开启新进程来达到多任务工作的目的是十分"

昂贵"

的,因为必须给新进程分配独立的地址空间以及用来维护代码段的众多数据表、堆栈段、数据段。

而多个线程共享相同的内存空间和大部分数据,因此启动一个线程跟启动一个进程在所花费的空间上有很大的差别,同时,在启动需要的时间上线程要远远小于进程。

(2)通信机制。

由于进程具有独立的数据空间,因此进程间只能通过通信的方式进行数据传递,显然这种方式是耗时又不方便的。

由于线程共享数据空间的特性,因此线程与线程通信更加方便。

当然共享特性也带了一定的数据不一致的风险,但可以通过锁机制来解决。

4.1.2内存池

申请内存空间几乎是每个系统必须涉及到的,而直接使用系统函数malloc和free进行内存分配和释放会产生额外的开销并且频繁使用还会产生大量内存碎片从而降低程序运行效率,同时还容易造成内存泄漏。

内存池很好的解决了直接调用系统函数所带来的问题。

也就说使用内存池进行内存申请、释放要比使用malloc和free方式快,系统开销小;

不会造成内存碎片或有很少的内存碎片同时内存池很好的避免了内存泄漏。

4.1.3正则表达式

在本说明书所叙述的网络爬虫系统中在提取网页中链接、提取网页标题等功能函数中使用了正则表达式。

正则表达式是Linux系统中一种非常重要的字符串搜索模式,是一组规则字符的集合。

这些规则字符能够组成我们所需要的搜索规则,效率高、功能强,可以极大地简化处理字符串时的复杂度。

虽然标准C是不支持正则表达式的,但是可以在POSIX函数库中的regex系列函数的辅助下在程序中运用它们。

4.1.4SSL协议

SSL的全称是SecureSocketsLayer,它是一个为基于TCP的应用层协议提供安全连接的安全协议,为网络上数据的传输提供安全性保证,因而被广泛应用于网上银行、电子商务等金融领域。

SSL提供的安全连接(如https)可以实现:

(1)连接的私密性:

传输的数据是利用对称密钥进行加密,并利用RSA加密传输对称密钥算法中使用的密钥。

(2)身份验证:

对服务器和客户端进行身份验证的方法是基于证书利用数字签名实现的。

SSL服务器和客户端通过公钥基础设施提供的机制从认证机构获取证书。

(3)连接的可靠性:

使用基于密钥的消息验证码来检验传输消息的完整性。

消息验证码是将密钥和随机数转换为定长数据的一种算法。

SSL协议本身可以分为两层:

底层为SSL记录协议(SSLrecordprotocol);

上层为SSL握手协议(SSLhandshakeprotocol)、SSL密码变化协议(SSLchangecipherspecprotocol)和SSL警告协议(SSLalertprotocol)。

4.2系统功能模块的实现

(一)主模块

(1)主要事件流:

①调用内存池模块创建内存池返回指向内存池的指针并在程序结尾销毁内存池。

②初始URL队列。

③调用下载模块和分析模块。

(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);

(二)内存池模块

①创建内存池。

②销毁内存池。

③分配内存对象。

④回收内存对象。

⑤释放内存对象。

①申请大块内存失败。

②分配内存对象失败。

③释放内存块失败。

(3)模块重要函数接口:

①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请求。

④接受网站返回的数据。

①链接网站服务器失败。

②发送请失败。

③接受网站返回数据失败

(3)重要代码实现:

staticintget_https_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);

}

(四)解析模块

①把网页读入内存。

②提取网页标题。

③提取网页关键字。

④提取网页类型和编码。

⑤提取网页链接。

⑥检查链接是否处理过。

①向URL队列添加链接。

②网页读入内存失败。

③打开文件失败。

structnode_t*getinfo(constchar*page,constchar*pattern[])

{

nodearr=malloc(maxnode*sizeof(structnode_t));

for(i=0;

pattern[i];

i++)

{

regcomp(&

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);

}

(五)界面

①能够设置参数和添加网页链接。

②能够显示参数和链接并可以对他们进行基本的操作。

③能够执行后台的爬虫系统。

④能够显示执行结果。

①添加不合法的数据。

(六)其他功能模块

①读取现在的时间。

②保存及时数据。

(2)异常事件流:

①打开文件失败。

5测试与结果

对界面的测试:

能够通过界面把数据写入文件并能够从文件中读出在页面上显示。

返回和执行按钮可以正常的使用。

数据的修改和删除功能能够正常使用。

但对于异常数据没有进行判断以致不合法的数据也可以写入配置文件。

对爬虫程序的测试:

输入不合法的URL。

能够把错误类型写入日志文件。

输入各种类型的URL,只对http和https链接处理其他链接被视为异常。

对系统速度的测试:

经过多次运行计算平均数值。

得到系统的运行效率不是很高。

平均每秒大约下载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网页中的链接效果图

结论

该系统主要实现了一下功能:

①http和https协议链接网页的下载并把网页中的链接解析出来存放在文件中,

②把网页中的标题,关键字,摘要解析出来存放在文件中。

③把链接存放在URL队列中。

④该系统现已能够顺利的运行,有很好的健壮性,可持续性。

虽然系统能够正常的运行,但是由于本人的经验不足和时间有限,以及对一些相关的技术、思想、理论掌握的还不够透彻,因此本系统中还存在许多不足、许多待完善的地方:

①现有的网络爬虫系统对除了http和https协议的链接能够下载外,对其他协议的链接均按异常情况处理。

②对于后缀是.shtm和.shml的网页不能够下载。

这些不足之处,会在今后的学习中不断的完善和维护,希望能够达到更好的效果。

参考文献

[1]万源,万方,王大震.一种并行Crawler系统中的URL分配算法设计口.计算机工程与应用,2006

[2]蒋宗礼,赵钦,肖华,等.高性能并行爬行器.计算机工程与设计,2006

[3]张三峰,吴国新.一种面向动态异构网络的容错非对称DHT方法.计算机研究与发展,2007

[4]余锦,史树明.分布式网页排序算法及其传输模式分析.计算机工程与应用,2004

[5]沈贺丹,潘亚楠.关于搜索引擎的研究综述.计算机技术与发展,2006

[6]张敏,高剑峰,马少平.基于链接描述文本及其上下文的Web信息检索.计算机研究与发展,2004

[7]贺广宜,罗莉.分布式搜索引擎的设计与实现.计算机应用,2003

[8]周雪忠,吴朝晖.文本知识发现:

基于信息抽取的文本挖掘.计算机科学,2003

[9]陈华,罗昶,王建勇.基于Web的百万级FTP搜索引擎的设计与实现口.计算机应用,2000

[10]吴功宜,计算机网络(第三版).北京:

清华大学出版社,2007

[11]张海藩,软件工程导论(第五版).北京:

清华大学出版社,2008

[12]Winter,中文搜索引擎技术解密:

网络蜘蛛人民邮电出版社,2004

[13]Sergey等,TheAnatomyofaLarge-ScaleHypertextualWebSearchEngine清华大学出版

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2