毕业设计(论文)网络爬虫技术探究.doc

上传人:文库蛋蛋多 文档编号:3984532 上传时间:2023-03-30 格式:DOC 页数:47 大小:379KB
返回 下载 相关 举报
毕业设计(论文)网络爬虫技术探究.doc_第1页
第1页 / 共47页
毕业设计(论文)网络爬虫技术探究.doc_第2页
第2页 / 共47页
毕业设计(论文)网络爬虫技术探究.doc_第3页
第3页 / 共47页
毕业设计(论文)网络爬虫技术探究.doc_第4页
第4页 / 共47页
毕业设计(论文)网络爬虫技术探究.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《毕业设计(论文)网络爬虫技术探究.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)网络爬虫技术探究.doc(47页珍藏版)》请在三一办公上搜索。

1、JIU JIANG UNIVERSITY毕 业 论 文题 目 网络爬虫技术探究 英文题目 Web Spiders Technology Explore 院 系 信息科学与技术学院 专 业 计算机科学与技术 姓 名 班级学号 A081129 指导教师 二一二年五月摘 要网络爬虫是一种自动搜集互联网信息的程序。通过网络爬虫不仅能够为搜索引擎采集网络信息,而且可以作为定向信息采集器,定向采集某些网站下的特定信息,如招聘信息,租房信息,以及网络营销常要的邮箱地址信息等。本文通过JAVA实现了一个基于广度优先算法的爬虫程序。本论文阐述了网络爬虫实现中一些主要问题:为何使用广度优先的爬行策略,以及如何实现

2、广度优先爬行;系统实现过程中的数据存储;网页信息解析等。通过实现这一爬虫程序,可以搜集某一站点的所有URLs,并通过得到的URLs采集到页面的内容,在从内容中提取到需要的内容,如邮箱地址以及页面标题等。再将得到的URLs等采集到的数据存到数据库,以便检索。本文从搜索引擎的应用出发,探讨了网络爬虫在搜索引擎中的作用和地位,提出了网络爬虫的功能和设计要求。在对网络爬虫系统结构和工作原理所作分析的基础上,研究了页面爬取、解析等策略和算法,并使用Java实现了一个网络爬虫的程序,对其运行结果做了分析。关键词:网络爬虫,广度优先 ,搜索引擎AbstractThe Web Spider is an aut

3、omated program collects information on the Internet. The Web Spider can not only search engine to collect network information and can be used as directional information collection, directed acquisition of some site specific information, such as recruitment information, rental information, as well as

4、 network marketing often have to e-mail address information.JAVA Implementation of an algorithm based on breadth first Spider program. This paper described the data stored in the Web Spider to achieve some of the major questions: Why use a breadth-first crawling strategy, as well as how to implement

5、 the breadth-first crawling; system implementation process; web page information to resolve.Through the realization of this Spider can collect all of a sites URLs, URLs collected by and get to the page content, to extract from the content, the content, such as email address and page title. And then

6、get the Urls collected was data saved to the database to retrieve. In this paper, the application of the search engine to explore the role and status of a Web Spider search engine, web Spider functionality and design requirements. Web Spider system structure and working principle of the analysis bas

7、ed on study strategies and algorithms of the page crawling, parsing, etc. and use the Java implementation of a Web Spider program, its operating results analysis.Keywords: Spider, Breadth First Search, Search Engine目 录摘 要IAbstractII1 绪论1.1 现状分析(1)1.2 系统开发背景(2)1.3 系统意义(3)1.4 论文主要的工作(4)1.5 论文结构(4)2 需求

8、分析2.1 系统非功能性需求(5)2.2 系统功能需求(5)2.3 系统数据流程分析(5)2.4 环境需求(8)2.5 本章小结(9)3 系统设计3.1 系统结构设计(10)3.2 爬行策略分析(12)3.3 爬虫技术分析(14)3.4 数据库设计(17)3.5 本章小结(17)4 系统实现4.1 系统功能简介(18)4.2 核心算法(20)4.3 功能模块实现(21)4.4 数据库实现.(30)4.5 本章小结(33)5 系统测试5.1 抓取测试(34)5.2 搜索测试(37)5.3 本章小结(38)6 总结与展望致谢(40)参考文献(41)1 绪论1.1 现状分析从雅虎最初的网页分类技术,

9、谷歌PageRank开始,到目前的百度等搜索引擎的迅猛发展,搜索引擎在互联网中应用领域展示了越来越广泛的作用。搜索引擎的科学研究价值不仅仅体现在其高技术挑战性,而且表现在其对于整个互联网络乃至民生提供的便捷性和信息高速传达方式,对整个社会的高度的经济促进作用1。从2000年开始在国内的缓慢发展,到目前国内百度,谷歌,搜搜,搜狗,有道等搜索引擎林立,搜索引擎的研究还只是刚刚的开始,如何在Web信息中寻找最符合用户需求的信息展示出来,这不仅在尺度上是空前巨大,而且规范条件也是非常的不确定。及其的系统往往是很难判别出用户真正需要的是什么信息的,而目前乃至以后,用户总是希望以最简短的搜索约束范围(即用

10、户输入的关键字)搜索到自己想要的信息,所以系统得到的输入是一个笼统的模糊的概念,而这种笼统的不确定性的约束范围,和海量数据的处理,已经将搜索引擎研究技术乃至整个科学研究技术带入了一个真正的高度。在搜索技术中,对信息的处理,既要考虑到数据的客观性,又要考虑到行为的主观性。数据的客观性表现在Web中数据形式的客观存在性,面对任何人,同一网页中的信息是不变的,而主观性则是指,每条信息对于不同用户不同需求所能提供的信息量区别是很大的,这个可以很深刻的理解:一个介绍机器用法的网页对于新用户来说肯定是很有用的,而对于开发者来说,却不一定有用或者作用的层次不同了。搜索引擎技术中客观性和主观性存在很多这样的矛

11、盾之处,而不同的处理方式则会导致最后传达信息量的巨大或细微差别,这是以前的科学技术研究的盲点,而针对目前的社会需求,这又是刻不容缓的需要解决的一个方面,越来越多的人已经对这个领域产生了强大的兴趣。搜索引擎技术带动了很多相关学科的发展,离散数学,矩阵技术的应用让大家对数学产生了广泛的兴趣,搜索引擎优化技术(SEO)成为了许多人研究和工作的方向,同时也是电子商务的强力武器。而搜索引擎对于人工智能的贡献更是真正具有伟大意义的!自然语言理解,模式识别,机器学习,数据挖掘技术在搜索引擎的发展中得到了强大的提高。而文本分类,多媒体识别,海量数据挖掘,机器在线增量学习,在线分类类聚,信息抽取和摘取,命名等又

12、和实际应用紧密的结合成商用搜索引擎,而其强大的资金后盾,也促进了Web搜索和人工智能行业的大力发展。1.2 系统开发背景随着信息时代的到来和发展,Web上的信息正在飞速地增长,这带给人们前所未有护的丰富的信息资源。然而,在给人们提供丰富信息的同时,却在web信息的高效便捷使用方面给人们带来巨大的挑战:一方面Web上的信息种类繁多、丰富多彩,而另一方面却很难找到真正有用的信息。在信息社会中,没有控制和组织的信息不再是一种资源,它倒反而成为信息工作者的敌人。搜索引擎的问世,为快速、准确、有效地获取网络信息资源提供了极大的帮助。搜索引擎是为满足人们搜索网络信息的需要而开发的网络工具,是互联网信息查询

13、的导航针,是沟通用户与网络信息的桥梁。搜索引擎的出现很大程度上解决了人们在Web上查找信息的困难,但是随着信息多元化的增长,千篇一律给所有用户同一个入口显然不能满足特定用户更深入的查询需求。即现有搜索引擎在提供用户便利获取丰富的信息资源的同时,也存在着种种的不足之处。(1)查准率低:对任意主题,都可能很容易地包含成百上千的文档,这会使得搜索引擎返回的文档数过于庞大,其中很多相关性并不大,或所包含的内容质量不高。(2)查全率低:搜索引擎的索引能力正在越来越落后于网络的快速增长速度。(3)内容相对陈旧:各个搜索引擎搜索到的文件有时是不再有效的,因为网页已被移至别处或不存在。有调查发现,几个不同搜索

14、引擎检索到的第一个文件在网上存在的平均时间是186天。(4)信息分布不平衡:有83%的站点包含商业的内容,只有6%的站点包含科学或教育的内容。因而,人们提出了对搜索引擎新的要求:(l)运行在常规的软/硬件设备之上;(2)只采集某一特定学科或特定主题的Web信息资源;(3)能够方便地对专题和学科进行配置。为了满足这些新的要求,主题爬虫应运而生。主题爬虫就是针对性的为某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。可以简单的说成是搜索引擎领域的行业化分工。由于主题爬虫分类细致精确、数据全面深入、更新及时,并且运用了人工分类以及特征提取等智能化策略,因此它将更加有效和准确。

15、主题爬虫是主题搜索引擎的重要组成部分,它负责对用户感兴趣的某一主题的网页进行抓取。具备普通爬虫的功能,即通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。主题爬虫还具备主题过滤的功能,即使爬虫尽可能多地爬行主题相关的网页,尽可能少地爬行无关网页,对非主题的网页进行剔除。因此,主题爬虫得到越来越多研究者的关注。主题爬虫的优势在于,由于Web上的内容丰富多样,每个主题在其中占的比例都很小,需要采集的内容也相对较少,可以极大地减少时间和存储空间的要求

16、。在时间上的优势保证了网页的及时更新。而且,主题信息采集搜集的内容单一,用户查找时得到的冗余和无用信息也较少2。1.3 系统意义网络爬虫的工作是不停的抓取互联网上资源的信息,随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,为了解决上述问题,定向抓取相关网页资源的网络爬虫应运而生。网络爬虫是一个自动下载网页的程序,它根据既定的抓取目标

17、,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。网络爬虫的准确高效直接关系到搜索引擎的功能是否强大3。1.4 论文主要的工作(1)针对网络爬虫的工作原理,进行需求分析、结构分析、系统分析。(2)开始初期的实现,主要实现的功能是:网页抓取、URLs提取、页面内容解析、数据存储等。(3)系统测试网络爬虫的功能,修改不完善的地方,尽量做到符合基本的功能要求。1.5 论文结构本论文主要介绍的网络爬虫的开放过程,全文共分为五章:第一章绪论,简要的介绍了系统的开放背景级研究现状,以及文本的工作概要;第二章系统需求分析,主要介绍了系统所要解决的问题,以及系统的体系结构和类结构;第三章系统总体设计

18、,主要是介绍了系统实现的主要算法策略,以及具体的功能划分;第四章系统实现,主要介绍了实现的各个功能的具体代码的分析;第五章系统测试,主要是对整个系统进行各个模块的测试,是否符合要求;第六章总结与展望,主要讲述了整个系统完成后的心得以及系统的一些缺陷。论文的致谢和参考文献部分。2 需求分析2.1 系统非功能性需求所谓非功能性需求是指为满足用户业务需求必须具有且除功能需求外的特性。虽然此需求与系统业务逻辑无直接关系,但也影响着系统的质量,不能忽视。本系统的非功能性需求主要包括以下几个方面:(1)易用性本系统在功能完善的情况下,用户界面尽量做到简洁友好、便于操作,并应有效地防止误操作的发生。(2)性

19、能可靠本系统属于一个需要联网进行抓取数据的系统,因此需要做到用户在使用时,避免影响到用户上网浏览网页出现网速慢的问题。(3)通用性本系统可以适应各种系统环境,满足了不同类型用户的需求。2.2 系统功能需求通过需求分析,确定本系统有以下一些基本功能: (1)前台界面管理:前台界面主要用于对用户输入进行判断处理,再将合法输入提交到处理单元。(2)Servlet处理程序:主要用于接收传来的初始URL ,然后再调用Spider主程序。(3)Spider主程序:主要的功能是建立初始队列、解析URLs、抓取内容、数据存储等系统核心的功能。(4)数据库管理:主要用于存放抓取的数据保存以便用户的检索。2.3

20、系统数据流程分析通过对网络爬虫的数据流动分析,得出数据流程如图2-1所示。NOYESYESNOYESNO将初始的URLS加入到等待队列启动爬虫程序从URL队列获取等待URL解析HTML,获取URLs重复URL吗绝对地址吗将URLs加入到URL等待队列将相对地址转换为绝对地址非法URL吗图2-1 爬虫工作原理流程图网络爬虫是搜索引擎的核心部分,其名称出自Spider 的意译,具有相同词义的词语还有Spider,robots,bots,wanderer等等。网络爬虫定义有广义和狭义之分,狭义上的定义为利用标准的Http协议根据超级链接和Web文档检索的方法遍历万维网信息空间的软件程序,而广义则是所

21、有能利用Http协议检索Web文档的软件都称之为网络爬虫。网络爬虫是一个功能很强的自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。它通过请求站点上的HTML文档访问某一站点。它遍历Web空间,不断从一个站点移动到另一个站点,自动建立索引,并加入到网页数据库中。网络爬虫进入某个超级文本时,它利用HTML语言的标记结构来搜索信息及获取指向其他超级文本的URL地址,可以完全不依赖用户干预实现网络上的自动“爬行”和搜索。下面将详细分析爬虫的工作流程,通过流程图来描述爬虫的工作原理,本网络爬虫工作原理如下。(1)将给定的初始URL加入到URL等待队列。(2)创建爬虫程序,启动爬

22、虫程序。(3)爬虫线程从URL等待队列中取得任务URL,根据URL下载网页内容,然后解析网页内容,获取超链接URLs以及页面内容信息。如果获取到的URL为相对地址,则需要转换为绝对地址,然后在判断是否为站外地址,是则淘汰站外URLs,如果是不能访问的地址如错误URLs或者不能解析的URL地址,则也要删除掉。再判断这些URL是否已经被下载到,如果没有则加入到URL等待队列4。(4)继续重复的执行步骤(3),直到结束条件满足后则停止继续爬行。通过图2-1所示的爬虫工作原理流程图,我们可以清楚的知道爬虫的工作流程以及工作的原理。网络爬虫的主要目的就是爬取用户需要的内容,即尽可能的爬取有关内容的页面,

23、尽可能减少抓取无关页面,对非主题的网页进行剔除,确保网页的质量。因而,在设计主题爬虫时,本文主要采用两种手段来实现高质量主题网页的下载。一是对已经下载到本地的网页进行主题相关性判断,将相关的网页保存,无关的丢弃。二是分析已有信息,预测出与主题相关的URL进行下一轮抓取。在设计的过程中,要考虑到以下几点:(1)稳定性:设计的总体结构要合理,保证系统能够稳定运行。(2)高效性:系统采用多线程技术对网页实现高效的抓取。(3)灵活性:对系统的各个配置参数进行修改,使系统能够更好地运行。(4)主题性:系统能够很好地应用于不同主题的网页抓取。基于以上原则,本文对主题爬虫的结构,数据结构、存储文件和所采用的

24、主题采集策略进行了详细设计。2.4 环境需求操作系统是winXP;JAVA程序的编写工具是MyEclipse 8.5 M1;数据库是SQLServer 2000。2.4.1 开发平台 此系统开发选用的平台是Java Server Page(简称JSP)+SQL Server数据库,它适应于Windows操作系统并能很好的与其应用程序结合,而且SQL Server数据库也易操作,从而大大降低了编程难度。具体如下:(1)Web服务器采用Tomcat5.5服务器,数据库管理系统为SQL Server。(2)采用了jdk1.6的环境。(3)开发工具使用Dreamweaver搭建系统页面框架。(4)使用

25、Myeclipse工具开发。2.4.2 系统开发工具本系统是基于JSP+SQL Server数据库技术实现的,现对JSP技术和SQL Server数据库作简要的介绍。2.4.3 开发语言JSP页面由HTML代码和嵌入其中的Java代码所组成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网等特点。JSP的技术的优势:(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不需要做任何更改。(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易

26、见的。(3)JSP技术是用Java语言作为脚本语言的。Java语言是成熟的、强大的、易扩充的编程语言。(4)高效性与安全性。JSP在执行前先被编译成字节码,字节码由Java虚拟机解释执行,比源码解释效率高。(5)可维护性。由于JSP技术是一种开放的、跨平台的结构,因此Web服务器、平台及其他组件能很容易升级或切换,且不会影响JSP基本的应用程序。(6)多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。2.4.4 数据库SQL Server是微软公司的一款数据库产品,它是关系型数据库,针对电子商务、数据仓库

27、和在线商务解决方案的卓越的数据平台。它执行效率高,可在多用户之间有效的分配可用资源,比如:内存、网络带宽和磁盘I/O等。另外,SQL Server可以动态的将自身配置成能有效地使用客户端桌面的可用资源5。2.5 本章小结这章主要是明确系统开发的需求分析,明确系统要实现的功能,确立系统的功能模块,按照系统开发的流程,先确立系统要实现的功能模块,最后确立系统的用户需求的定位,本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了网络爬虫软件开发过程,便于程序员与操作者之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共

28、性,以期能够获得更大范围的应用。3 系统设计3.1 系统结构设计系统总体结构是首先通过前台搜索界面输入给定的URL地址传递给Servelet程序,Servelet程序再调用后台处理程序,处理程序接收到消息,然后开始页面内容解析。如图3-1所示。前台用户模块前台用户界面消息传递用户检索Servelet程序数据库管理模块数据库查询数据存储初始化URL队列连接数据库URL解析数据存储后台处理模块URL合法检测页面内容提取网络爬虫系统结构图图3-1 系统总体结构从图3-1可以看到,本系统主要的功能模块有:前台用户模块、后台处理模块、数据库管理模块等。网络爬虫系统的前台结构如图3-2所示。网络爬虫系统前

29、台前台爬行前台搜索显示搜索结果调用后台主程序图3-2 系统前台结构网络爬虫系统后台结构如图3-3所示。网络爬虫系统后台 广度优先队列管理数据存储管理URL合法检测管理URL解析管理页面读取提取管理数据库连接管理图3-3 系统后台结构广度优先队列管理:该队列主要是用于临时存放解析出来的URL,本系统通过UrlNode类实现URL队列的管理。数据库连接管理:数据库连接是通过DBOperator类实现。数据存储管理:本系统数据存储是用Snatch()方法实现,该方法将提取的内容存储到数据库中。页面读取提取管理:页面读取与提取主要是由readFileContent()和parseContent()方法

30、实现,前者用于从给定的URL中读取页面内容,后者用于提取重要的信息。URL解析管理:该模块主要是用于从种子URL中不断的解析URLs,并放到队列中。实现该功能模块的主要方法是parseHref()。URL合法检测管理:该模块的作用是检测解析出来的URL是否合法:即是否是站内地址、不能访问的地址、文件地址和已访问地址。3.2 爬行策略分析因为本论文实现的爬虫程序的初衷是尽可能遍历某一站点所有的页面的URL以及页面内容。广度优先算法的实行理论是覆盖更多的节点,所以此爬虫程序选择了广度优先算法。广度优先算法实现起来比较简单,只需定义一个数组类就可以实现广度算法。实现的策略基本是:首先是获取最初始UR

31、L所对应HTML代码里面所有的URLs,当然都是合法的,非法的URLs都会通过检查类剔除掉。然后依次获取这些URLs对应的HTML代码里面的URLs,当这一层所有的URLs都下载解析完后,在获取下一层URLs的信息。通过这种循环的获取方式实现广度优先爬行。如图3-4所示6。ABDCKJIHGFEMLPON图 34爬行策略树形图如图3-4,假如a代表初始的URL,b、c、d为以a获取的3个URLs,e、f、g为以b获取的URLs,h、i、j为以c获取的URLs,以此类推。那么这些URLs获取的顺序就是a、b、c、d、e、f、g、h、i、j、k、l、m、n、o、p这样一个顺序。当获取到b的URLs

32、之后,并不会马上去解析这些URLs,而是先解析同b在同一层中的c、d对应的URLs。当这一层URLs全部解析完后,再开始下一层URLs。可以看到爬虫策略树形图是一个类似二叉树形的树形结构。广度爬行的优点是:对数据抓取更容易控制些。对服务器的负载相应也明显减轻了许多。爬虫的分布式处理使的速度明显提高。现实起来也比其他的算法来的容易的。广度爬行的缺点是:解析URLs效率不是太高。广度优先算法的等待队列设计如图3-5所示。 AABCDBCCDBAEFGEFGHIJKLMONP图 35URL等待队列图3-5列举了不同时间段时,URL等待队列的存储状态。第一个方框是将初始URL:a加入到等待队列。第二个

33、方框为,解析a对应HTML获取URLs:bcd,同时删除a。第三个方框为,解析b对应HTML获取URLs:efg,同时删除URL:b。第四个方框为,解析e对应HTML获取URLs:nop,并删除e。通过这样的存储方法实现广度爬行算法7。3.3 爬虫技术分析3.3.1 IDNS解析扩展将网页下载之前,首先要经过将URL地址解析成IP地址供socket建立连接使用。DNS的解析过程的具体步骤如下:(1)DNS客户机提出域名解析请求,并将该请求发送给本地的DNS服务器;(2)本地的DNS服务器收到请求后,先查询本地的DNS缓存,如果有该记录项,则本地的DNS服务器就直接把查询的结果返回;(3)如果本

34、地的DNS缓存中没有该纪录,则本地DNS服务器就直接把请求发给根DNS服务器,然后根DNS服务器再返回给本地DNS服务器一个所查询域(根的子域)的主DNS服务器的地址;(4)本地服务器再向上一步返回的DNS服务器发送请求,接收请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的DNS服务器的地址;(5)重复第四步,直到找到正确的纪录;(6)本地DNS服务器把返回的结果保存到缓存,以备下一次使用,同时将结果返回给客户机。3.3.2 并行存储单一线程下载一个网页通常需要几秒钟,为了充分利用网络带宽和系统资源,网络爬虫需要打开许多Socket以便在同一时间连接到许多不同的HTTP服务器。有

35、两种方法来管理多个并发连接:使用多线程和使用非阻塞Socket与事件处理程序。由于网络爬虫的性能受网络和磁盘所限,多CPU的机器一般用处不是很大8。(1)多线程为了最大限度地提高客户端应用程序的响应能力,可以使用多线程。多线程可以大大提高应用程序的可用性和性能。地址解析后,每个逻辑线程将创建一个客户端socket,连接socket到服务器的HTTP服务上,发送HTTP请求头,然后读取soeket(调用recv函数),直到没有更多的字符可用,最后关闭Socket。最简单的方法是使用阻塞系统调用,它暂停客户端进程,直到请求完成,数据在用户指定的缓冲区可用。当一个线程挂起等待一个连接发送或接收完成时

36、,其他线程可以执行。线程不是为每个请求动态生成的,而是提前分配的固定的线程数。这些线程使用共享并行的工作队列来得到要获取网页的URL。每个线程管理自己的控制状态和堆栈,但共享数据域。因此,一些实现倾向于使用进程而不是线程,这样当一个进程崩溃时,它不会破坏其他进程的状态。并发线程/进程有两个问题。首先,共享的数据结构将导致一些性能的损失,因为线程不能同时访问它们。第二,当线程或进程完成网页抓取,并开始修改文件存放库和索引时,他们可能会导致大量的交叉,随机在磁盘上读写,从而降低磁盘的查询时间。第二个性能问题可能是严重的。为了防止上述问题,众多的抓取线程或进程必须使用一个共享的内存缓冲,信号量和互斥

37、锁。互斥以及由此形成的间接顺序化可能成为系统的严重瓶颈9。(2)非阻塞Socket和事件处理另一种办法是使用非阻塞Socket。使用非阻塞Socket,一个连接,发送或接收请求都不会阻塞当前线程,而会立刻返回。系统每隔一段时间对他们实行一次轮询,以判断是否可以进行读写操作。特别是,非阻塞Socket提供了Se1ect()系统调用,它可以让应用程序暂停,等待更多的数据可以读取或向Socket写入,直到预设计时器超时。Select()事实上可以同时监控几个Socket,暂停请求进程,直到有Socket可以读或写。Select()允许进程只是内核等待多个事件中的任一个发生,并仅在一个或多个事件发生或

38、经过某指定的时间后才唤醒进程。3.3.3 中文分词技术中文自动分词是网页分析的前提。文档由被称作特征项的索引词组成,网页分析是将一个文档表示为特征项的过程。在提取特征项时,中文信息文本中,词与词之间没有天然的分隔符,中文词汇大多是由两个或两个以上的汉字组成的,并且语句是连续书写的。这就要求在对中文文本进行自动分析前,先将整句切割成小的词汇单元,即中文分词(或中文切词)。自动中文分词的基本方法有基于字符串匹配的分词方法和基于统计的分词方法。基于字符串的分词方法又称为机械分词方法,它是按照一定的策略将待分析的汉字符串与一个已知的词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。串匹配分词

39、方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大或最长匹配,和最小或最短匹配;按照是否中文自动分词是中文搜索引擎的关键环节,对搜索引擎系统来说,分词的准与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。另外一种是基于统计的分词方法,它的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。从形式上看,词是稳定的字的组合,因此在上下文如果相邻的字出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息,互信息量体现了汉字之间结合关系

40、的紧密程度,当紧密程度高于某一个闭值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的词组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,并且对常用词的识别精度差,时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。词汇切分算法最重要的指标是准确,在兼顾准确性的情况下也要考虑时间复杂度。3.4 数

41、据库设计对于SQLSERVER数据库的设计。我建立了1个表,即webinfo,分别有id,url,title,body字段,分别用于存放行数,地址,标题,以及网页内的邮箱地址。JAVA程序和数据之间的通信是通过JDBC实现的。URL信息存储表结构如表3-6所示。表3-6 webinfo表结构字段名数据类型长度IdInt4urlString50TitleVarchar8000BodyText10003.5 本章小结此章节介绍的是如何通过一个给定的URL抓取整个网站内容的描述过程,其中页面中的内容解析是最重要的核心,通过对URL解析过程的分析,使我更加深入的认识到了网络爬虫的工作原理,为巩固JAV

42、A的学习打下了坚实的基础。4 系统实现系统实现是软件项目开发过程中的主要部分,在系统实现中要有简洁、美观、可读性好、整体统一等准则。4.1 系统功能简介此爬虫程序主要分为三个部分:任务执行端,任务前台界面,数据服务端。一个SPIDER 任务执行端关联一个站点,下载一个基于URL链接的页面,并进行Web 页面解析,得到站内URL 和发现新站点URL。SPIDER的任务执行需要维持一个URL 队列: 任务执行端的URL 队列中存储了站内URL。SPIDER要获取的对象是存在于网络上数以亿计的网页,这些网页以超链接形式互相联系在一起,每一网页对应一个超链接,也称统一资源定位符(URL)。我们可以把网

43、络看做一个图M(V,E),网络中的网页构成节点集V,他们之间的链接构成边集E,SPIDER正是从某一节点开始,沿着边,遍历图M,每访问到图中一个节点Vi,就进行一定的处理。为了达到上述目的,一个SPIDER必须被设计成多线程的,A 个线程并发地在网络上协同工作,才有可能在尽可能短的时间内遍历完网络中的网页。但网页数目是如此之大,如果任SPIDER程序无穷地搜索下去,那么程序几乎不能终止。所以我们限制SPIDER每次工作只访问一个站点。一个再大型的站点,其中的网页数目也是有限的,因此SPIDER程序能在有限的时间内结束。当SPIDER程序访问到一个网页,必须进行以下几项基本处理:抽取网页中包含的

44、文本;抽取网页中包含的URL,并将其区分为网站内URL或网站外URL。在这些URL 队列上有大量的操作,包括URL 查找、URL插入、URL 状态更新等。如果SPIDER 以300页每秒的速度下载Web 页面,平均将会产生2000多个URL,因此简单的采用内存数据结构存储这些URL 队列有一定的问题,系统没有足够的内存空间;而采用直接持久化到数据库,则需要大量的数据库连接、查询等操作,系统效率会明显下降。如果采用URL压缩的办法,尽管在一定程度上可以平衡空间和时间的矛盾,但仍然不适用于大规模数据采集的SPIDER。任务前台界面主要工作是将用户输入的URL通过Servlet传递到任务端。数据服务

45、端负责存储解析好的数据。如图4-1所示10。HTTP协议INTERNET页面读取页面解析申请URLURL管理任务执行端数据库数据服务端JDBC管理任务前台界面ServletURL传递后台数据显示图4-1 Spider体系结构4.2 核心算法网络爬虫算法的设计目标是为了解决大规模数据的搜集效率问题。一方面,网络爬虫应该尽可能多的搜集网页;另一方面,网络爬虫在无法进行全面搜集的时候,应该优先选择一些重要的高质量的网页来进行搜集。网页搜集的算法设计一方面体现在设计高效的数据结构上,由于大量的数据无法完全存放在内存中,需要充分利用缓存技术来增加速度。4.2.1多线程抓取网页多线程抓取机制由图4-2中的

46、网页抓取控制器来实现。给定一个URL列表,网页抓取控制器对其中的每一个URL顺序启动HTTP连接,将它们对应的网页内容全部下载到本地。多线程抓取机制的过程是这样的,一个进程负责从URL列表中读取下一个待搜集的URL,并将其放到临界区;另外一组进程的每一个都从临界区取出URL,然后启动HTTP连接进行相应处理,如图4-2所示。URL读取URL广度优先队列URL1URL2URL3URLmHttp连接1Http连接2Http连接3InternetURL临界区http连接组图4-2 多线程抓取技术图4-2描述了多线程抓取机制的内部流程。该图右边的n个HTTP连接处理单元,每一个都单独处理一个HTTP连接,而左边的URL读取器则从URL链接优先队列中读取URL并将其写到URL临界区中。临界区最多可以存放M个URL。在实现时,URL读取器检查URL临界区中的URL数目,如果小于M,则继续往里面加URL;HTTP连接则每次都从URL临界区

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号