VC++搜索引擎网络爬虫设计与实现.docx

上传人:b****2 文档编号:2430673 上传时间:2023-05-03 格式:DOCX 页数:84 大小:512.47KB
下载 相关 举报
VC++搜索引擎网络爬虫设计与实现.docx_第1页
第1页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第2页
第2页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第3页
第3页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第4页
第4页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第5页
第5页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第6页
第6页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第7页
第7页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第8页
第8页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第9页
第9页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第10页
第10页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第11页
第11页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第12页
第12页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第13页
第13页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第14页
第14页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第15页
第15页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第16页
第16页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第17页
第17页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第18页
第18页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第19页
第19页 / 共84页
VC++搜索引擎网络爬虫设计与实现.docx_第20页
第20页 / 共84页
亲,该文档总共84页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VC++搜索引擎网络爬虫设计与实现.docx

《VC++搜索引擎网络爬虫设计与实现.docx》由会员分享,可在线阅读,更多相关《VC++搜索引擎网络爬虫设计与实现.docx(84页珍藏版)》请在冰点文库上搜索。

VC++搜索引擎网络爬虫设计与实现.docx

VC++搜索引擎网络爬虫设计与实现

搜索引擎网络爬虫设计与实现

摘要

网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情。

建立搜索引擎就是解决这个问题的最好方法。

本文首先详细介绍了基于英特网的搜索引擎的系统结构,然后具体阐述了如何设计并实现搜索引擎的搜索器——网络爬虫。

多线程网络爬虫程序是从指定的Web页面中按照宽度优先算法进行解析、搜索,并把搜索到的每条URL进行抓取、保存并且以URL为新的入口在互联网上进行不断的爬行的自动执行后台程序。

网络爬虫主要应用socket套接字技术、正则表达式、HTTP协议、windows网络编程技术等相关技术,以C++语言作为实现语言,并在VC6.0下调试通过。

在网络爬虫的设计与实现的章节中除了详细的阐述技术核心外还结合了多线程网络爬虫的实现代码来说明,易于理解。

本网络爬虫是一个能够在后台运行的以配置文件来作为初始URL,以宽度优先算法向下爬行,保存目标URL的网络程序,能够执行普通用户网络搜索任务。

关键词 搜索引擎;网络爬虫;URL搜索器;多线程

DesignandRealizationofSearchEngineNetworkSpider

Abstract

Theresourceofnetworkisveryrich,buthowtosearchtheeffectiveinformationisadifficulttask.Theestablishmentofasearchengineisthebestwaytosolvethisproblem.

Thispaperfirstintroducestheinternet-basedsearchenginestructure,andthenillustrateshowtoimplementsearchengine----networkspiders.

Themulti-threadnetworkspiderprocedureisfromtheWebpagewhichassignsaccordingtothewidthpriorityalgorithmconnectionforanalysisandsearch,andeachURLissnatchedandpreserved,andmaketheresultURLasthenewsourceentranceunceasingcrawlingoninternettocarryoutthebackgoudautomatically.

Mypaperofnetworkspidermainlyappliestothesockettechnology,theregularexpression,theHTTPagreement,thewindowsnetworkprogrammingtechnologyandothercorrelationtechnique,andtakingC++languageasimplementedlanguage,andpassesunderVC6.0debugging.

Inthechapterofthespiderdesignandimplementation,besidesadetailedexpositionofthecoretechnologyinconjunctionwiththemulti-threadednetworkspidertoillustratetherealizationofthecode,itiseasytounderstand.ThisnetworkspidersisinitialURLbasedonconfigurationfileswhichcanoperateonbackground,usingwidthpriorityalgorithmtocrawldown,preservingnetworkprogrammeoftargetURL.

KeywordsInternetsearchengine;Networkspider;URLsearchprogramme;Multithreaded

不要删除行尾的分节符,此行不会被打印

摘要

Abstract

千万不要删除行尾的分节符,此行不会被打印。

在目录上点右键“更新域”,然后“更新整个目录”。

打印前,不要忘记把上面“Abstract”这一行后加一空行

第1章绪论

1.1课题背景

面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。

因此它也成为除了电子邮件以外最多人使用的网上服务。

什么是搜索引擎?

它是如何工作的?

搜索引擎一词在国内外因特网领域被广泛使用,然而他的含义却不尽相同。

在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。

著名的因特网搜索引擎包括FirstSearch、Google、HotBot等。

在中国,搜索引擎通常指基于网站目录的搜索服务或是特定网站的搜索服务,本人这里研究的是基于因特网的搜索技术。

广义的搜索引擎泛指网络(尤其是万维网)上提供信息检索服务的工具或系统,即在因特网上或通过因特网响应用户的搜索请求,返回相应查询结果的信息技术和系统.

狭义的搜索引擎主要指利用网络自动搜索软件或人工方式,对万维网信息资源进行采集,分析与标引,并将索引信息组织成数据库,以网站形式为网络用户提供检索服务的一类信息服务系统.

概括的说:

搜索引擎就是WWW网络环境中的一套信息检索系统。

它通常有两种不同的工作方式:

一种是分类目录型的检索,把因特网中的资源收集起来,由其提供的资源的类型不同而分成不同的目录,再一层层地进行分类,人们要找自己想要的信息可按他们的分类一层层进入,就能最后到达目的地,找到自己想要的信息;另一种是基于关键词(Keyword)的检索,这种方式用户可以用逻辑组合方式输入各种关键词,搜索引擎计算机根据这些关键词寻找用户所需资源的地址,然后根据一定的规则反馈给用户包含此关键字词信息的所有网址和指向这些网址的链接。

  搜索引擎其实也就是一个网站,只不过该网站专门为你提供信息“检索”服务,它使用特有的程序把INTERNET上的所有信息归类以帮助人们在浩如烟海的信息海洋中搜寻到自己所需要的信息。

随着因特网信息按几何级数增长,这些搜索引擎利用其内部的一个spider程序,自动搜索网站每一页的开始,并把每一页上代表超级链接的所有词汇放入一个数据库,供用户来查询。

1.2搜索引擎的历史和分类

搜索引擎的历史。

1990年以前,没有任何人能搜索互联网。

所有搜索引擎的祖先,是1990年由Montreal的McGillUniversity学生AlanEmtage、PeterDeutsch、BillWheelan发明的Archie。

后来,程序员们开发出了一个名叫“spider”(爬虫)的“Robot”(机器人)程序,它能自动以人类无法达到的速度不断重复地在网络上检索信息。

这种行为很像一只爬虫在INTERNET这张巨大的信息网上爬来爬去,因此,spider程序便由此而来。

世界上第一个Spider程序,是MITMatthewGray的WorldwideWebWanderer,用于追踪互联网发展规模。

刚开始它只用来统计互联网上的服务器数量,后来发展为也能够捕获网址(URL)[1]。

1.2.1搜索引擎的历史

搜索引擎技术伴随着WWW的发展是引人注目的。

搜索引擎大约经历了三代的更新发展:

第一代搜索引擎出现于1994年。

这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。

而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。

在实现技术上也基本沿用较为成熟的IR(InformationRetrieval)、网络、数据库等技术,相当于利用一些已有技术实现的一个WWW上的应用。

在1994年3月到4月,网络爬虫(Spider)WorldWebWorm(WWW)平均每天承受大约1500次查询。

大约在1996年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约5千万网页个的索引数据库,每天能够响应1千万次用户检索请求。

1997年11月,当时最先进的几个搜索引擎号称能建立从2百万到1亿的网页索引。

Altavista搜索引擎声称他们每天大概要承受2千万次查询。

2000年搜索引擎2000年大会上,按照Google公司总裁LarryPage的演讲,Google正在用3千台运行Linux系统的个人电脑在搜集Web上的网页,而且以每天30台的速度向这个微机集群里添加电脑,以保持与网络的发展相同步。

每台微机运行多个爬虫程序搜集网页的峰值速度是每秒100个网页,平均速度是每秒48.5个网页,一天可以搜集超过4百万个网页。

1.2.2搜索引擎的分类

搜索引擎按其工作方式主要可分为三种,分别是全文搜索引擎(FullTextSearchEngine)、目录索引类搜索引擎(SearchIndex/Directory)和元搜索引擎(MetaSearchEngine)。

全文搜索引擎是名副其实的搜索引擎,国外具代表性的有Google、Fast/AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut等,国内著名的有XX(Baidu)。

它们都是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户,因此他们是真正的搜索引擎。

目录索引虽然有搜索功能,但在严格意义上算不上是真正的搜索引擎,仅仅是按目录分类的网站链接列表而已。

用户完全可以不用进行关键词(Keywords)查询,仅靠分类目录也可找到需要的信息。

目录索引中最具代表性的莫过于大名鼎鼎的Yahoo雅虎。

其他著名的还有OpenDirectoryProject(DMOZ)、LookSmart、About等。

国内的搜狐、新浪、网易搜索也都属于这一类[2]。

元搜索引擎在接受用户查询请求时,同时在其他多个引擎上进行搜索,并将结果返回给用户。

著名的元搜索引擎有InfoSpace、Dogpile、Vivisimo等(元搜索引擎列表),中文元搜索引擎中具代表性的有搜星搜索引擎。

在搜索结果排列方面,有的直接按来源引擎排列搜索结果,如Dogpile,有的则按自定的规则将结果重新排列组合,如Vivisimo。

1.3搜索引擎的发展趋势

搜索引擎经过几年的发展和摸索,越来越贴近人们的需求,搜索引擎的技术也得到了很大的发展。

搜索引擎的最新技术发展包括以下几个方面:

为了提高搜索引擎对用户检索提问的理解,就必须有一个好的检索提问语言,为了克服关键词检索和目录查询的缺点,现在已经出现了自然语言智能答询。

用户可以输入简单的疑问句,比如“howcankillvirusofcomputer?

”。

搜索引擎在对提问进行结构和内容的分析之后,或直接给出提问的答案,或引导用户从几个可选择的问题中进行再选择。

自然语言的优势在于,一是使网络交流更加人性化,二是使查询变得更加方便、直接、有效。

1.基于链接评价的搜索引擎

基于链接评价的搜索引擎的优秀代表是Googel,它独创的“链接评价体系”是基于这样一种认识,一个网页的重要性取决于它被其它网页链接的数量,特别是一些已经被认定是“重要”的网页的链接数量。

2.基于访问大众性的搜索引擎

基于访问大众性的搜索引擎的代表是directhit,它的基本理念是多数人选择访问的网站就是最重要的网站。

根据以前成千上万的网络用户在检索结果中实际所挑选并访问的网站和他们在这些网站上花费的时间来统计确定有关网站的重要性排名,并以此来确定哪些网站最符合用户的检索要求。

因此具有典型的趋众性特点。

这种评价体制与基于链接评价的搜索引擎有着同样的缺点。

3.去掉检索结果中附加的多余信息

有调查指出,过多的附加信息加重了用户的信息负担,为了去掉这些过多的附加信息,可以采用用户定制、内容过滤等检索技术。

确定搜索引擎信息搜集范围,提高搜索引擎的针对性

1.4搜索引擎的组成部分

一个搜索引擎大致由三部分组成。

第一部分是搜索器,也就是上面提到的Spider程序。

它定期的自动爬到各个网站上,把网页抓下来,并顺着上面的链接,象爬虫一样爬开去,持续不断的抓取网页。

第二部分是索引器,它把爬虫程序抓来网页进行分析,按照关键词句进行索引,并存入服务器的数据库中。

第三部分是面向用户的检索器,它接收用户提交的查询字串,在索引数据库中查询,并将结果反馈给用户。

因此,准确的说,当我们利用搜索引擎搜索信息时,并不是真正在网上进行搜索,而是在检索那个由爬虫程序自动建立起来的庞大的数据库。

由于各大搜索引擎的数据库的自动更新周期是不同的,从几天到几周甚至一个月都有可能,因此,选择合适的搜索引擎显得尤为重要。

同时,有时也可能遇到用搜索引擎搜索到的网页无法打开的情况,了解了它的工作原理,这一点也就不会大惊小怪了[3]。

1.5课题研究的主要内容

本论文主要研究搜索引擎的搜索器(Spider程序)的设计与实现,详细介绍Spider程序的概念及技术要点,算法介绍,并用C++语言实现简单的可在后台自动运行的爬虫程序

网络爬虫程序,是一种专业的Bot程序。

用于查找大量的Web页面。

它从一个简单Web页面上开始执行,然后通过其超链接在访问其他页面,如此反复理论上可以扫描互联网上的所有页面。

基于因特网的搜索引擎是Spider的最早应用。

例如搜索巨头Google公司,就利用网络机器人程序来遍历Web站点,以创建并维护这些大型数据库。

网络机器人还可以通过扫描Web站点的主页来得到这个站点的文件清单和层次机构。

还可以扫描出中断的超链接和拼写错误等。

然而Internet是建立在很多相关协议基础上的,而更复杂的协议又建立在系统层协议之上。

Web就是建立在HTTP(HypertextTransferProtocol)协议基础上,而HTTP又是建立在TCP/IP(TransmissionControlProtocol/InternetProtocol)协议之上,它同时也是一种Socket协议。

所以网络爬虫本质上是一种基于Socket的网络程序。

本论文中网络爬虫的关键技术如下:

SOCKET套接字技术,HTTP协议技术,正则表达式技术。

以多线程网络爬虫模型为设计基础,应用SOCKET套接字相关函数按照HTTP协议向源URL发送请求,并以正则表达式过滤所接受到的网页标签,得到目标URL,再将目标URL重新作为源URL进行新的一轮向下爬行搜索,按照宽度优先算法向下爬行,从而完成整个NetworkSpider的爬行工作。

总的来说本论文的网络爬虫是一个能够在后台运行的以配置文件来作为初始URL,以宽度优先算法向下爬行,保存目标URL的网络爬虫程序。

第2章网络爬虫的技术要点分析

2.1网络爬虫Spider工作原理

2.1.1Spider的概念

搜索引擎一直专注于提升用户的体验度,其用户体验度则反映在三个方面:

准、全、快。

用专业术语讲是:

查准率、查全率和搜索速度(即搜索耗时)。

其中最易达到的是搜索速度,因为对于搜索耗时在1秒以下的系统来说,访问者很难辨别其快慢了,更何况还有网络速度的影响。

因此,对搜索引擎的评价就集中在了前两者:

准、全。

中文搜索引擎的“准”,需要保证搜索的前几十条结果都和搜索词十分相关,这需由“分词技术”和“排序技术”来决定。

中文搜索引擎的“全”则需保证不遗漏某些重要的结果,而且能找到最新的网页,这需要搜索引擎有一个强大的网页收集器,一般称为“网络爬虫”,也有叫“网页机器人”。

这就是本论文所研究的目标。

网络爬虫即NetworkSpider,是一个很形象的名字。

把互联网比喻成一个爬虫网,那么Spider就是在网上爬来爬去的爬虫。

网络爬虫是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。

如果把整个互联网当成一个网站,那么网络爬虫就可以用这个原理把互联网上所有的网页都抓取下来。

对于搜索引擎来说,要抓取互联网上所有的网页几乎是不可能的,从目前公布的数据来看,容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。

这其中的原因一方面是抓取技术的瓶颈,无法遍历所有的网页,有许多网页无法从其它网页的链接中找到;另一个原因是存储技术和处理技术的问题,如果按照每个页面的平均大小为20K计算(包含图片),100亿网页的容量是100×2000G字节,即使能够存储,下载也存在问题(按照一台机器每秒下载20K计算,需要340台机器不停的下载一年时间,才能把所有网页下载完毕)。

同时,由于数据量太大,在提供搜索时也会有效率方面的影响。

因此,许多搜索引擎的网络爬虫只是抓取那些重要的网页,而在抓取的时候评价重要性主要的依据是某个网页的链接深度。

2.1.2网络爬虫抓取内容分析

1.静态网页抓取内容分析:

爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

2.动态网页抓取内容分析:

分析动态网页参数,按照一定规章,“拼”出所有要被抓取内容URL,只抓取这些特定范围内动态网页。

3.特殊内容抓取内容分析:

比如RSS、XML数据,情况特殊需特殊处理。

如新闻的滚动新闻页面,需要爬虫不停地监控扫描,发现新内容马上就进行抓取。

4.文件对象抓取内容分析:

图片,MP3、Flash、视频等文件的抓取,都要特殊处理。

比如说:

图片抓取出来后,要知道图片文件类型、图片文件的大小、图片的像素大小,还要转换出来缩略图。

2.2HTTP协议

2.2.1HTTP协议的请求

http请求由三部分组成,分别是:

请求行、消息报头、请求正文

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

MethodRequest-URIHTTP-VersionCRLF

其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求方法(所有方法全为大写)有多种,请求方法解释表如表2-1所示。

表2-1请求方法表

GET

请求获取Request-URI所标识的资源

POST

在Request-URI所标识的资源后附加新的数据

HEAD

请求获取由Request-URI所标识的资源的响应消息报头

PUT

请求服务器存储一个资源,并用Request-URI作为其标识

DELETE

请求服务器删除Request-URI所标识的资源

TRACE

请求服务器回送收到的请求信息,主要用于测试或诊断

应用举例:

GET方法:

在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源。

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。

利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。

该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。

在本论文中网络爬虫的http请求部分将用GET方法。

2.2.2HTTP协议的响应

HTTP响应也是由三个部分组成,分别是:

状态行、消息报头、响应正文

状态行格式如下:

HTTP-VersionStatus-CodeReason-PhraseCRLF。

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:

指示信息--表示请求已接收,继续处理

2xx:

成功--表示请求已被成功接收、理解、接受

3xx:

重定向--要完成请求必须进行更进一步的操作

4xx:

客户端错误--请求有语法错误或请求无法实现

5xx:

服务器端错误--服务器未能实现合法的请求

响应报头与响应正文略。

2.2.3HTTP的消息报头

HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。

请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

每一个报头域都是由名字+“:

”+空格+值组成,消息报头域的名字是大小写无关的。

1.普通报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

请求时的缓存指令包括:

no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

响应时的缓存指令包括:

public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

2.请求报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头包括:

Accept:

Accept请求报头域用于指定客户端接受哪些类型的信息。

Accept-Charset:

Accept-Charset请求报头域用于指定客户端接受的字符集。

Accept-Encoding:

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。

eg:

Accept-Encoding:

gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

Accept-Language:

Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。

Authorization:

Authorization请求报头域主要用于证明客户端有权查看某个资源。

当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

Host(发送请求时,该报头域是必需的):

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTPURL中提取出来的。

3.响应报头

响应报头允许

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

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

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

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