C++网络爬虫项目

上传者: qq15690515 | 上传时间: 2019-12-21 20:30:16 | 文件大小: 4.85MB | 文件类型: rar
WEBCRAWLER 网络爬虫实训项目 1 WEBCRAWLER 网 络 爬 虫 实 训 项 目 文档版本: 1.0.0.1 编写单位: 达内IT培训集团 C++教学研发部 编写人员: 闵卫 定稿日期: 2015年11月20日 星期五WEBCRAWLER 网络爬虫实训项目 2 1. 项目概述 互联网产品形形色色,有产品导向的,有营销导向的,也有技术导向的,但是 以技术见长的互联网产品比例相对小些。搜索引擎是目前互联网产品中最具技 术含量的产品,如果不是唯一,至少也是其中之一。 经过十几年的发展,搜索引擎已经成为互联网的重要入口之一,Twitter联合创 始人埃文•威廉姆斯提出了“域名已死论”,好记的域名不再重要,因为人们会 通过搜索进入网站。搜索引擎排名对于中小网站流量来说至关重要。了解搜索 引擎简单界面背后的技术原理其实对每一个希望在互联网行业有所建树的信息 技术人员都很重要。 1.1. 搜索引擎 作为互联网应用中最具技术含量的应用之一,优秀的搜索引擎需要复杂的架构 和算法,以此来支撑对海量数据的获取、 存储,以及对用户查询的快速而准确 地响应。 从架构层面,搜索引擎需要能够对以百亿计的海量网页进行获取、 存 储、 处理的能力,同时要保证搜索结果的质量。 如何获取、 存储并计算如此海WEBCRAWLER 网络爬虫实训项目 3 量的数据?如何快速响应用户的查询?如何使得搜索结果尽可能满足用户对信 息的需求?这些都是搜索引擎的设计者不得不面对的技术挑战。 下图展示了一个通用搜索引擎的基本结构。商业级别的搜索引擎通常由很多相 互独立的模块组成,各个模块只负责搜索引擎的一部分功能,相互配合组成完 整的搜索引擎: 搜索引擎的信息源来自于互联网网页,通过“网络爬虫” 将整个“互联网” 的 信息获取到本地,因为互联网页面中有相当大比例的内容是完全相同或者近似 重复的,“网页去重”模块会对此做出检测,并去除重复内容。 在此之后,搜索引擎会对网页进行解析,抽取网页主体内容,以及页面中包含 的指向其它页面的所谓超链接。 为了加快用户查询的响应速度,网页内容通过 “倒排索引”这种高效查询数据结构来保存,而网页之间的链接关系也会予以 保存。之所以要保存链接关系,是因为这种关系在网页相关性排序阶段是可利 用的,通过“链接分析”可以判断页面的相对重要性,对于为用户提供准确的 搜索结果帮助很大。 由于网页数量太多,搜索引擎不仅需要保存网页的原始信息,还要保存一些中 间处理结果,使用单台或者少量的计算机明显是不现实的。 Google等商业搜索 引擎提供商,为此开发了一整套云存储与云计算平台,使用数以万计的普通PCWEBCRAWLER 网络爬虫实训项目 4 搭建了海量信息的可靠存储与计算架构,以此作为搜索引擎及其相关应用的基 础支撑。优秀的云存储与云计算平台已经成为大型商业搜索引擎的核心竞争 力。 以上所述是搜索引擎如何获取并存储海量的网页相关信息。这些功能因为不需 要实时计算,所以可以被看作是搜索引擎的后台计算系统。搜索引擎的首要目 标当然是为用户提供准确而全面的搜索结果,因此响应用户查询并实时提供准 确结果便构成了搜索引擎的前台计算系统。 当搜索引擎接收到用户的查询请求后,首先需要对查询词进行分析,通过与用 户信息的结合,正确推导出用户的真实搜索意图。 此后,先在“Cache系统” 所维护的缓存中查找。搜索引擎的缓存存储了不同的搜索意图及其相对应的搜 索结果。如果在缓存中找到满足用户需求的信息,则直接将搜索结果返回给用 户。这样既省掉了重复计算对资源的消耗,又加快了整个搜索过程的响应速 度。而如果在缓存中没有找到满足用户需求的信息,则需要通过“网页排 序”,根据用户的搜索意图,实时计算哪些网页是满足用户需求的,并排序输 出作为搜索结果。 而网页排序最重要的两个参考因素,一个是“内容相似 性”,即哪些网页是和用户的搜索意图密切相关的;一个是网页重要性,即哪 些网页是质量较好或相对重要的,而这往往可以从“链接分析”的结果中获 得。综合以上两种考虑,前台系统对网页进行排序,作为搜索的最终结果。 除了上述功能模块,搜索引擎的“反作弊”模块近年来越来越受到重视。搜索 引擎作为互联网用户上网的入口,对于网络流量的引导和分流至关重要,甚至 可以说起着决定性的作用。因此,各种“作弊”方式也逐渐流行起来,通过各 种手段将网页的搜索排名提前到与其网页质量不相称的位置,这会严重影响用 户的搜索体验。所以,如何自动发现作弊网页并对其给于相应的惩罚,就成了 搜索引擎非常重要的功能之一。 1.2. 网络爬虫 通用搜索引擎的处理对象是互联网网页,截至目前的网页数量数以百万计,所 以搜索引擎首先面临的问题就是如何能够设计出高效的下载系统,将如此海量 的网页数据传送到本地,在本地形成互联

文件下载

资源详情

[{"title":"( 87 个子文件 4.85MB ) C++网络爬虫项目","children":[{"title":"WebCrawler","children":[{"title":"bin","children":[{"title":"WebCrawler.cfg <span style='color:#111;'> 598B </span>","children":null,"spread":false},{"title":"WebCrawler.scr <span style='color:#111;'> 886B </span>","children":null,"spread":false},{"title":"WebCrawler <span style='color:#111;'> 135.32KB </span>","children":null,"spread":false}],"spread":true},{"title":"docs","children":[{"title":"cpp_ref.chm <span style='color:#111;'> 461.18KB </span>","children":null,"spread":false},{"title":"cpp_ref.chw <span style='color:#111;'> 58.11KB </span>","children":null,"spread":false},{"title":"cpp_ref_ch.chm <span style='color:#111;'> 121.95KB </span>","children":null,"spread":false}],"spread":true},{"title":"plugins","children":[{"title":"DomainLimit.so <span style='color:#111;'> 42.20KB </span>","children":null,"spread":false},{"title":"DomainLimit.mak <span style='color:#111;'> 246B </span>","children":null,"spread":false},{"title":"HeaderFilter.mak <span style='color:#111;'> 248B </span>","children":null,"spread":false},{"title":"SaveImageToFile.cpp <span style='color:#111;'> 4.96KB </span>","children":null,"spread":false},{"title":"DomainLimit.h <span style='color:#111;'> 877B </span>","children":null,"spread":false},{"title":"SaveImageToFile.mak <span style='color:#111;'> 254B </span>","children":null,"spread":false},{"title":"MaxDepth.cpp <span style='color:#111;'> 1.50KB </span>","children":null,"spread":false},{"title":"SaveHTMLToFile.mak <span style='color:#111;'> 252B </span>","children":null,"spread":false},{"title":"SaveImageToFile.so <span style='color:#111;'> 19.48KB </span>","children":null,"spread":false},{"title":"MaxDepth.mak <span style='color:#111;'> 738B </span>","children":null,"spread":false},{"title":"SaveHTMLToFile.o <span style='color:#111;'> 11.81KB </span>","children":null,"spread":false},{"title":"HeaderFilter.so <span style='color:#111;'> 19.33KB </span>","children":null,"spread":false},{"title":"mkall <span style='color:#111;'> 305B </span>","children":null,"spread":false},{"title":"DomainLimit.cpp <span style='color:#111;'> 2.84KB </span>","children":null,"spread":false},{"title":"SaveImageToFile.o <span style='color:#111;'> 14.68KB </span>","children":null,"spread":false},{"title":"HeaderFilter.cpp <span style='color:#111;'> 2.45KB </span>","children":null,"spread":false},{"title":"HeaderFilter.h <span style='color:#111;'> 822B </span>","children":null,"spread":false},{"title":"MaxDepth.so <span style='color:#111;'> 194.00KB </span>","children":null,"spread":false},{"title":"SaveHTMLToFile.h <span style='color:#111;'> 807B </span>","children":null,"spread":false},{"title":"DomainLimit.o <span style='color:#111;'> 54.55KB </span>","children":null,"spread":false},{"title":"MaxDepth.h <span style='color:#111;'> 708B </span>","children":null,"spread":false},{"title":"SaveImageToFile.h <span style='color:#111;'> 768B </span>","children":null,"spread":false},{"title":"SaveHTMLToFile.so <span style='color:#111;'> 18.75KB </span>","children":null,"spread":false},{"title":"MaxDepth.o <span style='color:#111;'> 8.84KB </span>","children":null,"spread":false},{"title":"HeaderFilter.o <span style='color:#111;'> 16.44KB </span>","children":null,"spread":false},{"title":"SaveHTMLToFile.cpp <span style='color:#111;'> 2.39KB </span>","children":null,"spread":false}],"spread":false},{"title":"详细设计.pdf <span style='color:#111;'> 3.77MB </span>","children":null,"spread":false},{"title":"src","children":[{"title":"MultiIo.o <span style='color:#111;'> 4.29KB </span>","children":null,"spread":false},{"title":"BloomFilter.o <span style='color:#111;'> 9.69KB </span>","children":null,"spread":false},{"title":"RecvThread.h <span style='color:#111;'> 591B </span>","children":null,"spread":false},{"title":"SendThread.h <span style='color:#111;'> 420B </span>","children":null,"spread":false},{"title":"Configurator.h <span style='color:#111;'> 1.66KB </span>","children":null,"spread":false},{"title":"Url.o <span style='color:#111;'> 11.51KB </span>","children":null,"spread":false},{"title":"Thread.o <span style='color:#111;'> 3.25KB </span>","children":null,"spread":false},{"title":"MultiIo.cpp <span style='color:#111;'> 2.38KB </span>","children":null,"spread":false},{"title":"SendThread.cpp <span style='color:#111;'> 615B </span>","children":null,"spread":false},{"title":"WebCrawler.o <span style='color:#111;'> 45.11KB </span>","children":null,"spread":false},{"title":"Log.cpp <span style='color:#111;'> 3.59KB </span>","children":null,"spread":false},{"title":"Url.h <span style='color:#111;'> 1.61KB </span>","children":null,"spread":false},{"title":"PluginMngr.cpp <span style='color:#111;'> 4.45KB </span>","children":null,"spread":false},{"title":"DnsThread.o <span style='color:#111;'> 57.76KB </span>","children":null,"spread":false},{"title":"Hash.o <span style='color:#111;'> 4.06KB </span>","children":null,"spread":false},{"title":"Log.h <span style='color:#111;'> 1.25KB </span>","children":null,"spread":false},{"title":"BloomFilter.h <span style='color:#111;'> 1.13KB </span>","children":null,"spread":false},{"title":"StrKit.o <span style='color:#111;'> 34.90KB </span>","children":null,"spread":false},{"title":"Thread.cpp <span style='color:#111;'> 1.47KB </span>","children":null,"spread":false},{"title":"Socket.cpp <span style='color:#111;'> 11.70KB </span>","children":null,"spread":false},{"title":"Hash.cpp <span style='color:#111;'> 2.55KB </span>","children":null,"spread":false},{"title":"Configurator.cpp <span style='color:#111;'> 4.33KB </span>","children":null,"spread":false},{"title":"DnsThread.h <span style='color:#111;'> 814B </span>","children":null,"spread":false},{"title":"StrKit.cpp <span style='color:#111;'> 4.20KB </span>","children":null,"spread":false},{"title":"StrKit.h <span style='color:#111;'> 1.11KB </span>","children":null,"spread":false},{"title":"SendThread.o <span style='color:#111;'> 7.00KB </span>","children":null,"spread":false},{"title":"DnsThread.cpp <span style='color:#111;'> 4.65KB </span>","children":null,"spread":false},{"title":"WebCrawler.h <span style='color:#111;'> 2.18KB </span>","children":null,"spread":false},{"title":"Log.o <span style='color:#111;'> 3.84KB </span>","children":null,"spread":false},{"title":"PluginMngr.o <span style='color:#111;'> 38.77KB </span>","children":null,"spread":false},{"title":"Main.o <span style='color:#111;'> 11.36KB </span>","children":null,"spread":false},{"title":"RecvThread.o <span style='color:#111;'> 7.94KB </span>","children":null,"spread":false},{"title":"UrlQueues.h <span style='color:#111;'> 3.33KB </span>","children":null,"spread":false},{"title":"Http.h <span style='color:#111;'> 980B </span>","children":null,"spread":false},{"title":"UrlQueues.cpp <span style='color:#111;'> 14.14KB </span>","children":null,"spread":false},{"title":"Precompile.h <span style='color:#111;'> 849B </span>","children":null,"spread":false},{"title":"Thread.h <span style='color:#111;'> 671B </span>","children":null,"spread":false},{"title":"Socket.h <span style='color:#111;'> 1.04KB </span>","children":null,"spread":false},{"title":"Hash.h <span style='color:#111;'> 1.40KB </span>","children":null,"spread":false},{"title":"MultiIo.h <span style='color:#111;'> 1.27KB </span>","children":null,"spread":false},{"title":"Socket.o <span style='color:#111;'> 28.57KB </span>","children":null,"spread":false},{"title":"WebCrawler.cpp <span style='color:#111;'> 10.95KB </span>","children":null,"spread":false},{"title":"UrlQueues.o <span style='color:#111;'> 68.41KB </span>","children":null,"spread":false},{"title":"Makefile <span style='color:#111;'> 657B </span>","children":null,"spread":false},{"title":"Plugin.h <span style='color:#111;'> 769B </span>","children":null,"spread":false},{"title":"RecvThread.cpp <span style='color:#111;'> 968B </span>","children":null,"spread":false},{"title":"Url.cpp <span style='color:#111;'> 4.66KB </span>","children":null,"spread":false},{"title":"Configurator.o <span style='color:#111;'> 39.55KB </span>","children":null,"spread":false},{"title":"Main.cpp <span style='color:#111;'> 2.15KB </span>","children":null,"spread":false},{"title":"UrlFilter.h <span style='color:#111;'> 616B </span>","children":null,"spread":false},{"title":"BloomFilter.cpp <span style='color:#111;'> 3.06KB </span>","children":null,"spread":false},{"title":"PluginMngr.h <span style='color:#111;'> 2.08KB </span>","children":null,"spread":false}],"spread":false},{"title":"download","children":null,"spread":false},{"title":"概要设计.pdf <span style='color:#111;'> 894.16KB </span>","children":null,"spread":false},{"title":"makefile.pdf <span style='color:#111;'> 456.64KB </span>","children":null,"spread":false}],"spread":true}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明