ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:661.48KB ,
资源ID:23851883      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23851883.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(分布式网络爬虫研究.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

分布式网络爬虫研究.docx

1、分布式网络爬虫研究淮北师范大学 2013届学士学位论文 分布式网络爬虫研究学 院 计算机科学与技术学院 专 业 网络工程 研 究 方 向 分布式网络爬虫研究 学 生 姓 名 李邦柱 学 号 20091204026 指导教师姓名 指导教师职称 2013年 5 月 16 日分布式网络爬虫研究计算机科学与技术学院2013届毕业生 李邦柱指导教师:xx摘 要:网络爬虫(Web Crawler),通常简称爬虫,是搜索引擎的重要组成部分。随着信息化的快速推进,作为搜索引擎不可或缺的一部分网络爬虫,一直是个热门的研究话题,它的好坏,直接决定了搜索引擎的未来。目前来看,网络爬虫的研究方向主要包括对网页搜索策略

2、的研究和网页分析算法的研究两大方向,其中,网页搜索中的主题网络爬虫是个研究趋势,它根据一定的网页分析算法,过滤与主题无关的链接,保留符合条件的链接并放入待抓取队列。本论文简要介绍了一种构建简单分布式网络爬虫模型的方法,并且提供了行之有效的理论分析和算法。主要讨论了单个网络爬虫抓取网页的原理,以后扩展后的多爬虫分布式的模型方法。在分布式的网络爬虫中主要介绍了其体系结构以及分布式网络爬虫模型中运用的算法与数据结构分析。本文并没有涉及复杂的算法研究,只是通过学习和使用现有平台和技术,研究基于Linux C+/C平台下的一个能够抓取同一域名下的、具有对URL有某个关键字限制下的部分网页的微型的网络爬虫

3、,最后实现离线浏览功能。从性质上来看,它更趋向与主题网络爬虫。关键词:网络爬虫;分布式网络爬虫;URL;哈希表;多线程;Linux The Study of Distributed web crawlerSchool of Computer Science & Technology 2013 GraduatesOf Huaibei Normal UniversityLi Bang-ZhuAnhui Huaibei 235000, ChinaSupervised by Wang Shuai, InstructorAbstract:Web crawler, usually referred to

4、crawler, is an important component of search engine. With the rapid development of information technology, as an indispensable part of search engine - web crawler, has been a hot research topic. wheather it is good or bad, it directly determines the future of search engines. At present, the research

5、 of web crawler mainly includes two aspects: the study of web search strategy and web analysis algorithms. Among them, theme web crawler in web research is a research trend, which is based on a certain web page analysis algorithm and filters irrelevant links, retain qualified links and place into th

6、e capture queue.This paper briefly introduces a method to build a simple model of distributed web crawler and provides the effective theoretical analysis and the algorithm. It mainly discusses the principle of a single web crawler webpage and the distributed method of expanded multiple crawlers. In

7、the distributed web crawler, it mainly introduces system structure, the analysis of algorithms and data structures used in distributed web crawler model. There is no complex algorithm research in this thesis. Through learning and using the existing platform and technology, the research and implement

8、ation of a Linux C/C+ platform can capture micro crawler which is under the same domain name and has a key word restrictions of URL in most web pages, and finally realize offline browsing. From the point of nature, it tends to theme web crawler.Keywords: Web Crawler,Distributed web crawler, URL,Linu

9、x Socket ,multi-thread, Linux目 录绪论 5一、 网络爬虫的功能以及原理的概述 61.1 网页的搜索策略和网页的分析 71.1.1 网页搜索策略的选择 71.2 URL介绍 71.3 URL的标准化 81.4 网页抓取 91.5 网页分析 101.6 Linux Socket 通信 131.6.1 Linux Socket简介 131.6.2 TCP/IP 141.6.3 客户端Socket函数介绍 151.7 Linux平台下单个爬虫程序运行及结果分析 18二、 分布式网络爬虫模型结构的概述 22三、 分布式网络爬虫中使用的主要算法与数据的分析 243.1 爬虫进

10、程启动后的工作流程 253.2 判重服务进程启动后的主要工作流程 263.2.1 判重服务进程正常启动的主要过程 263.2.2 判重服务进程选举启动的主要过程 263.2.3 判重服务进程对某个爬虫进程异常退出后的处理过程 27四、 结束语 29五、 致谢 30参考文献 31绪论大家常用的搜索引擎,例如Baidu,Google也都有自己的网络爬虫来帮他们抓取Internet海洋中的网页。这里稍微插一段题外话,其实网络爬虫和网站维护经常都是对立的,因为有些爬虫刷新时间短,有些爬虫比较“笨”,会在网站里迷失了路等情况,引起给网站服务器发送大量请求,造成服务器压力过大而崩溃。但话又说回来,一个设计

11、良好的网络爬虫,再加上使用者良好的素质,是完全可以避免以上情况的。总得来说,网络爬虫带来的好处远远大于它自身和使用者带来的坏处。大家几乎每天都在直接或间接地享受网络爬虫带来的好处,那么一个普通的网络爬虫它到底是如何构成的,又是如何抓取网页的呢?一、 网络爬虫的功能以及原理的概述网络爬虫是网络搜索引擎的主要部分,主要功能是在互联网中收集数据,是为信息检索功能提供可靠的数据支持。一个网络爬虫算法的优劣以及效率的高低都将直接影响搜索引擎的众多性能指标,网络爬虫程序的最主要的功能就是在网络上对网页内容中超链接的提取与分析以及进行网页数据的抓取工作。网络爬虫刚开始启动时,网络爬虫就会从一个可扩展的任务队

12、列中得到一项任务,即待抓取的网页信息(比如标示该URL的文本信息以及URL),随后将该URL对应的网页文件下载到本地保存起来,并对其中的网页代码文本内容进行分析,提取其中的相关信息以及超链接,将提取的链接送入判重服务进程的队列中等待判重查询,然后将没有扩展过的URL和相关信息加入到任务队列中,等待后续扩展,以是单个爬虫使用的框架,看起来更像是主题爬虫的框架。(见图1.1)。 图1.11.1 网页的搜索策略和网页的分析网络爬虫的搜索策略(爬虫的算法)的研究及其URL分析是目前研究的两大方向,一个成功的爬虫需要强大的搜索策略和快速的URL分析。1.1.1 网页搜索策略的选择网络爬虫一般常用的网页搜

13、索策略包括深度优先搜索、广度优先搜索、最佳优先搜索等。深度优先搜索(Depth First Search):是指在抓取网页过程中,一直按一个方向搜索网页,直到碰到最底层,然后返回上一层,继续按原先的搜索策略搜索下去。这种搜索策略在判定是否存在的问题上有些优势,但对于抓取网页来说,爬虫很容易陷入某个深渊,因为Internet网络本身就很复杂,再加上网页结构的复杂性,深度优先搜索策略几乎不被采用。广度优先搜索(Breadth First Search):是指在抓取网页过程中,首先抓取第一层的网页,然后再抓取第二层的网页,依次类推。这种搜索策略使用一种叫队列的数据结构来完成,一旦找到新的URL,就把

14、它加入到队列中;每次用队列最前面的URL来抓取网页。但它也有自己的缺点,那就是随着层数的增加,大量无关的网页会被加进来。最佳优先搜索(Best First Search):和它的名字一样,这种搜索策略使用某种算法,用来计算每个URL的优先度,并按照这个优先度从大到小排列在一个数组中,每次要抓取的网页即优先度最大URL的网页。这种搜索策略的优点可以避免广度优先搜索大量的无关网页被加进来,其缺点就是容易陷入某个相关度小的区域而忽略更大的区域。因此对它来说,设计一种好的算法很重要,或者结合其它的算法。本文采用的是第二种算法,因为其简单易实现,又因为本文需要抓取的网页在同一个域名下,且有关键字约束,所

15、以可以防止大量无关的网页流入。1.2 URL介绍统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网页地址,是因特网上标准的资源的地址。它最初是由蒂姆伯纳斯李发明用来作为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。由于爬虫是通过URL的定位来抓取网页的,因此,需要了解URL的基本格式,才能继续下一步工作。URL 相当于一个文件名在网络范围的扩展。因此 URL 是与因特网相连的机器上的任何可访问对象的一个指针。 URL 的一般形式是::/:/URL的访问方式有: 1.ftp 文件传送协议 FTP 2.http 超文本传送协议 HT

16、TP 3.News USENET 新闻 是存放资源的主机在因特网中的域名URL地址格式排列为:scheme:/host:port/path,例如 http:/1.3 URL的标准化 看到这个标题,有人可能会想,URL本身就是标准的,还用得着你去标准化吗?其实不然,在网页源代码中,有些是绝对路径,有些是相对路径,还有一些URL中存在字符#,多个/等等。因此,需要对这些URL进行处理,分别得到每个URL的Host,Port,File。以下是本文对URL的设定:1. URL的File成员不能以/结尾,若有则以0填充;若该File成员没有路径,则设定其路径为/。这样做的目的是为了便于URL排重。2.

17、URL的File成员中若有#字符,则删除它及它以后的字符,剩余的字符串作为File的值。3. 若URL中没有显式表明端口,则默认Port成员的值为80。若URL没有主机属性,则默认Host成员的值为初始URL的主机名1.4 网页抓取在分析网页之前,首先网页需要被抓取下来,抓取的具体方法将会在后面介绍。这里仅仅结合程序代码,分析一下数据从服务器保存到本地的过程。第一部分:分析之前,首先要明确的是:当从sockfd读取数据时,最前面一部分是和网页本身无关的信息,比如有些网页未找到,就会返回404 not found等服务信息,类似的,每种情况会返回对应的信息,因此,对于一些服务信息,应该不予记录。

18、下面代码通过每次读取一个字节的内容,当读到字符时才开始正式记录网页内容。while(1) n = read(sockfd, ch, 1); if(n ) headbufferj+ = *ch; break; headbufferj = 0;第二部分:定义一个tmp的字符数组,用来临时存放抓取的的网页,抓取方法与第一部分想同,都是用read函数,不同的是这里是一块一块抓取,效率上能比每次抓取一个字节要高。为什么不直接存放到文件中,而要保存到临时数组中呢?我的解释是:因为下一步分析网页时,有个URL重定向的过程,程序还会继续修改tmp数组。如果直接保存到文件,那么还得再次打开文件分析网页,这样会降

19、低效率,因为在磁盘执行读写操作总是比在内存读写慢得多。char tmpMAXLEN;while(1) n = read(sockfd, buffer, need); if(!n) break; if(n 10) break; sleep(1); continue; else perror(read);return NULL; else sum_byte += n; timeout = 0; strncat(tmp, buffer, n); 1.5 网页分析本文采用的网页分析算法基于内容分析,通俗的讲就是遍历整个网页代码,然后找出其中所有符合限制条件的URL。1.5.1 URL提取考虑到网页中的

20、链接格式主要是:title,因此本文通过string自身封装的find函数来找到每一个”herf”的位置,接下来的情况稍微有些复杂,分为三种情况。第一种:URL用双引号引起来;第二种:以单引号引起来;第三种:URL没有被引起来。所以可以使用一个标记变量(flag)来区分以上三种情况。1.5.2 URL的重定向考虑到本文的要求不仅仅是抓取网页本身,还要实现一个离线浏览网页的功能,原有的链接不再有效,因此,URL的重定向这一步不可缺少。之前,爬虫已经抓取了一些网页并存放在了一个名为Pages的文件夹中,而且其中的每个网页都进行了重命名处理(本文直接以url.Fname的字符串哈希值作文保存网页的文

21、件名)。那么在本地的URL无论在路径和文件名上都和原来网页上的链接都是不对应的,要想实现和原来一样的网页跳转,必须修改每个链接的herf值。对于原来的链接title,假设现在重命名该网页为new.html,那么如何处理怎么才能转化成新的链接呢?方法有很多,比如可以通过覆盖和移动,使得两个引号直接的内容为new.html。本文采用的方法如下:现已知第一个引号的位置为pos_1,因此可以调用string类的insert方法。调用后的效果如下:title这样处理不仅屏蔽了”xxx.html”,也避免了删除原有链接等不必要操作,一定程度上提高了代码的效率。1.5.3 URL判重抓取网页时有一个非常棘手

22、的问题,那就是重复抓取问题。大家知道,一个网站中的链接非常多,抽象出来就是一个巨大的蜘蛛网,类似与图论中的无向图。如果不对爬虫进行设置,它就像一只无头苍蝇一样,到处乱撞。这样待抓取队列里的URL越来越多,并且好多都是重复的。那么如何才能跳出这个怪圈呢?C+的标准模板库已经为大家提供了一个叫set的容器(当然也可以使用hash来判重)。在cplusplus这样介绍:set是一种存放唯一性元素的关联容器,它里面的每一个元素都称为关键字,它由二叉搜索树实现。由于它的唯一性,高效性,本人把它选择作为URL判重的一种类似hash的工具。本文代码如下:定义:setSet;使用:Set.insert(has

23、hVal);1.5.4 网页存储前面爬虫已经抓取到了一张网页,并且进行了重定向处理。那么接下来要做的事就是把它保存到磁盘里,在这一步需要用到文件操作。chdir(Pages);int fd = open(url_t.GetFname().c_str(), O_CREAT|O_EXCL|O_RDWR, 00770);/* check whether needs re-fetch */if(fd = flen) goto NEXT; else fd = open(url_t.GetFname().c_str(), O_RDWR|O_TRUNC, 00770);if(fd 0) perror(fil

24、e open error); goto NEXT; else perror(file open error); goto NEXT;write(fd, HtmFile.c_str(), HtmFile.length();NEXT:close(fd);/ todo next以上代码主要功能是保存已抓取网页的内容到磁盘。第一行代码使用O_CREAT | O_EXCL | O_RDWR模式打开,当该文件已经存在时返回-1,错误代码存放在errno中,错误代号为EEXIST。代码中使用stat函数来读取参数为文件名的文件信息,其中我们需要的就是st_size这个成员的内容,它以字节形式记录了文件的大小

25、。这样就可以与当前抓取网页大小(存放于变量flen中)比较,从而判断是否需要覆盖原有文件。本文以上代码虽然使用了不推荐的goto语句,因为程序需要跳过write函数。不过使用goto语句在没有给程序带来混乱的情况下实现了一条break语句实现不了的功能,因此更具实用性。1.6 Linux Socket 通信本文在这一章会涉及到Linux Socket14的通信,包括TCP的连接过程,简单引用基于TCP的Socket 通信下客户端的几个主要函数。1.6.1 Linux Socket简介前文一直提到Linux Socket,其实,说得准确些应该是POSIX标准下的网络编程。对于POSIX的理解,首

26、先来参考下面一段话:POSIX7表示可移植操作系统接口(Portable Operating System Interface,缩写为POSIX 是为了读音更像 UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发POSIX标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于UNIX。许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995

27、年修订)或 POSIX.1,POSIX.1 提供了源代码级别的C语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为ISO/IEC 9945-1:1990 标准。其实,POSIX为用户提供了一整套给操作系统服务的应用程序接口(API),其中就包括网络通信的接口,它们可以用来提供和保障Internet中各个主机之间的通信。由于Linux与Unix之间的深厚关系,所以在Linux平台上,那些接口也可被使用者直接调用。1.6.2 TCP/IP在网络通信中,大

28、家用得最多的就是TCP/IP,其实TCP/IP是一个协议族,只不过最主要的是TCP协议和IP协议。IPv4网际协议版本是4, IPv4是IP的简称,自上世纪80年代以来一直是网际协议族的主力协议。用32位地址来标识。IPv4给UDP、TCP、IGMP、SCTP、和ICMP提供分组递送服务。IPv6网际协议版本是6(Internet Protocol version 6)。IPv6是在20世纪90年代中期为替代IPv4的所设计的。其最大的改变是使用128位更大地址以应对20世纪90年代因特网的爆发性增长。IPv6给UDP、TCP、SCTP和ICMPv6提供分组服务的。本人在此论文中并未采用IPv

29、6,而任采用目前主流的IPv4作为开发基础,实现基于TCP连接为基础的Socket通信。选择TCP套接字通信的理由很简单,因为需要爬虫和服务器进行可靠的全双工通信(爬虫发送请求报文,与此同时,服务器处理请求报文并返回服务信息和网页代码)。TCP传输控制协议(Transmission Control Protoc)。TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字(stream socket)。TCP关心确认、超时和重传之类的细节。大多数因特网应用程序使用TCP。本文中的socket通信基于TCP,因此有必要提一下TCP的连接和断开过程。TCP的可靠连接得

30、益于它的三次握手原理,下图形象的表示了TCP三次握手建立连接和两次半关闭断开连接的具体过程。在连接和断开连接之间,客户端和服务器即可进行双向的信息通信。TCP三次握手与两次半关闭过程:图1.21.6.3 客户端Socket函数介绍在了解各个Socket函数之前,大家首先来看一个经典的流程图1.3,几乎每次网络通信都需要走以下流程,它详细地显示了TCP客户端和TCP服务器之间的Socket通信流程: 图1.3基于TCP客户/服务器程序的套接字函数及通信流程在程序中,每一个URL对应的网页,在客户端都需要完成Socket(),Connect(),Write(),Read(),Close()这一过程。要注意的是,如果不及时关闭Socket文件描述符,有时会出现“open too many files”的系统错误,这是由于系统对用户同时打开多个文件的限制(这里的文件不仅仅指通常意义上的文件,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1