当前位置:文档之家› 文献综述-基于C++的网络爬虫的设计与实现

文献综述-基于C++的网络爬虫的设计与实现

基于C++的网络爬虫的设计与实现的研究综述作者:xxx 指导老师:xxx摘要:本文归纳了网络爬虫的设计与实现方面的研究内容,概括了网络爬虫的定义与爬取策略、网络爬虫的体系结构、设计网络爬虫的关键问题以及爬虫身份的识别等方面的观点,并总结了如何通过一个或多个给定的种子网站,将网站上相应的网页抓取下来,并将其存入数据库或文本文件中的研究成果。

本文也指出了如何通过解决传统的通用搜索引擎在某些领域的局限性,帮助人们更加有效地提取与利用互联网信息,进而提高人们在检索信息效率方面的研究需求。

最后,本文提出了一个满足用户需求的网络爬虫的开发方案。

关键词:网络爬虫;通用搜索引擎;互联网The Design and Implementation of Web Spider Basedon C++Author: xxx Tutor: xxxAbstract:This paper summarizes the research about the design and implementation of the web spider, summarizes the view about the definition of web spider, the crawling strategy of the web spider, the architecture of the web spider, the key issues to design the web spider and identification of the web spider , and summarizes the research about how to catch the web-pages which links to the corresponding web site through one or more given seed site, and then stores it into a database or text file . The paper also points out how to solve the limitations of the Traditional General Search Engine in some areas , help people more effectively extract the information and make use of the Internet, then improve people’s research needs in the area of information retrieval. In the end, the paper proposes a web spider development plan which can meet the user’s needs.Keywords: Web Spiders ; Tradition Universal Search Engine ; Internet随着网络技术的发展,信息的提取与利用在人们的日常生活中越来越重要。

搜索引擎由于能够从浩瀚的网络资源中给用户提供对用户有用的信息而获得长足的发展,自诞生以来,搜索引擎获得了越来越多用户的青睐,成为人们日常生活中检索信息必不可少的搜索工具。

研究背景随着经济社会的发展,人们对信息搜索提出了更高的要求。

传统搜索引擎,例如传统的通用搜索引擎AltaVista,Yahoo!和Google大都是基于关键字的检索,对根据语义信息提出的查询却无能为力,搜索结果常常包含大量用户并不关心的网页;随着万维网的数据形式的不断丰富与网络技术的不断发展,图片、数据库、音频及视频多媒体等不同数据形式大量出现,传统搜索引擎对这些信息含量密集且具有一定数据结构的数据不能很好的获取和发现。

另外,传统搜索引擎有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾也日益突出。

为了解决这些问题,人们设计实现一个能够根据用户提供的种子网站,定向抓取相关网页资源的网络爬虫。

网络爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。

它并不追求大的覆盖率,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

1.网络爬虫的定义及爬行策略一个网络蜘蛛就是一种机器人,或者软件代理。

大体上,它从一组要访问的URL链接开始,可以称这些URL为种子。

爬虫访问这些链接,它辨认出这些页面的所有超链接,然后添加到这个URL列表,可以称作检索前沿。

这些URL按照一定的策略反复访问,直到满足一定的条件结束。

其工作流程如下:图1 网络爬虫的工作流程网页爬虫的行为通常是四种策略组合的结果。

这四种策略分别是选择策略、重新访问策略、平衡礼貌策略、并行策略。

其中,选择策略,用来决定所要下载的页面;重新访问策略,用来决定什么时候检查页面的更新变化;平衡礼貌策略,指出怎样避免站点超载;并行策略,指出怎么协同达到分布式抓取的效果。

2.网络爬虫体系结构网络爬虫的结构主要分为以下几个部分: (1) 下载模块,(2) 网页分析模块, (3) URL去重模块,(4) URL分配模块, 如图2所示:图2 系统架构图2.1 下载模块下载模块负责抓取网页, 是整个系统的基本与关键部分,直接影响爬行效果。

该模块一般包含3 个子模块: (1) 下载线程; (2) Host控制子模块; (3) DNS 解析子模块。

2.2 网页分析模块网页分析主要是内容分析和链接抽取。

网页中有很多不同的编码格式, 这些格式来自不同的文本( 简体中文、繁体中文、英文等) 。

这些不同的文本信息会影响到后续的正文抽取和分词等模块。

网页分析中需要考虑到这类问题。

HTML,XML网页除了标题和正文以外, 会有许多版权信息、广告链接以及公共的频道链接, 这些链接和文本一般没有太大的价值, 在提取网页内容的时候,需要过滤这些无用的链接。

对于DOC, PPT, XLS, PDF 等带格式的文件, 网络爬虫都要提取出文件里的纯文本内容。

对于多媒体、图片等文件, 一般是通过链接的锚文本( 即链接文本) 和相关的文件注释来判断这些文件的内容。

2.3 URL去重模块在下载的过程中, 不可避免地会遇到重复的链接, 如何消除这些重复的链接, 是个很复杂的议题。

URL的去重可以说是爬虫系统中最重要的一部分, 直接影响爬行效率和效果。

目前主流网络爬虫的URL 去重机制主要有两种方式: (1) 完全内存方式;(2) 基于磁盘的缓存方式。

完全内存方式就是指计算URL 的Hash 值, 一般用4 至6个字节表示, 这样10 亿个网页的URL 就需要5 到8个G的内存。

另一种方式是开一个大数组进行按位验证, 这样只需前者八分之一的内存, 但有可能误判, 且误判率随着爬行规模的增大而提高。

基于磁盘的缓存方式则是将大部分数据放在磁盘上, 内存里存放一个缓存, 然后根据策略更新缓存。

由于磁盘的速度比内存慢一个数量级, 一旦所查URL不命中缓存, 就必须在磁盘中进行查找, 从而大大影响效率。

2.4 URL分配模块抓取的效率主要依赖于硬件资源、网络的带宽以及程序执行效率等。

普通单处理机系统受限于CPU 的处理能力、磁盘存储的容量, 不可能具备处理海量信息的能力, 这就要求Crawler 支持分布式协同工作。

URL 分配模块主要考虑两个问题: (1) 在节点间划分URL的策略, 即如何分配下载任务;(2) 优化性能, 比如负载均衡、协同工作的开销等。

3.设计网络爬虫的关键问题3.1 可伸缩性面对网络上数以万亿计的网页, 使用有限的资源运转一个高性能、可伸缩的Crawler 是一个首要任务。

完成这项任务通常有3 点要求。

首先, 采用的算法和数据结构要能够支持Crawler 处理海量的网页。

其次, 在有限资源下, 爬行的平均速度必须维持一个较高的水平。

第三, 在添加硬件的情况下, 性能能够得到线性增长。

在效率方面, 由于网络爬虫可以看成是一个生产者消费者模型, 如何使各个模块协调工作, 以达到最佳性能, 也是一个严重的挑战。

3.2 提高下载质量网络爬虫的目标是抓取互联网上所有有价值的网页。

哪些网页有价值, 如何抓取这些网页, 这些问题需要对网页的质量有一个较为全面的评价。

而评价标准主要依赖对互联网和用户需求的理解。

其中, 主要包括以下几个方面的问题:①网页之间的链接关系。

②URL 本身的质量。

③网页重复情况。

④网页内容的评价。

3.3 网页更新目前网页更新的方式有两种: 一种是周期性进行更新。

Crawler 第一次爬行到设定好的规模后, 停止爬行, 然后每隔一段( 固定的) 时间对本地的索引数据库网页进行一次全面的信息更新维护, 即替换掉陈旧的信息, 加入新生成的网页。

更新周期一般以星期或月为计量单位。

我们称这种为周期性Crawler。

另一种是增量式信息更新方法。

因为互联网中包含的大量网页的更新周期是不一致的, 有的变化无常, 有的十分稳定。

因此应该以网页的变化周期作为进行有效性验证的依据。

在每一次网页的更新过程中, 只对那些最有可能发生变化的网页进行更新, 以不同的频率更新不同的网页。

Crawler会一直不停地爬行, 更新陈旧的网页, 并用新的更重要的网页替换掉次重要的网页。

我们称采用这种方式的爬虫为增量式Crawler。

从理论上来讲, 增量式Crawler比周期性Crawler 效率更高。

但如何确定每个网页的更新频率, 是一个难点。

4.爬虫身份识别网络爬虫通过使用http请求的用户代理字段来向网络服务器表明他们的身份。

网络管理员则通过检查网络服务器的日志,使用用户代理字段来辨认哪一个爬虫曾经访问过以及它访问的频率。

用户代理字段可能会包含一个可以让管理员获取爬虫更多信息的URL。

邮件抓取器和其他怀有恶意的网络爬虫通常不会留任何的用户代理字段内容,或者他们也会将他们的身份伪装成浏览器或者其他的知名爬虫。

5.开发工具介绍5.1 Windows .NET Framework 2.0开发平台NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件。

NET Framework主要包含一个非常大的代码库,可以在客户语言(如C++)中通过面向对象编程技术(OOP)来使用这些代码。

这个部分.NET Framework库定义了一些基本类型。

库分为不同的模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。

5.2 开发工具C++C++是由C子语言、面向对象的C++、泛型编程语言和STL(C++标准模板库,Standard Template Library)组成的程序设计语言。

相关主题