硕士论文-支持AJAX的互联网搜索引擎爬虫设计与实现_第1页
硕士论文-支持AJAX的互联网搜索引擎爬虫设计与实现_第2页
硕士论文-支持AJAX的互联网搜索引擎爬虫设计与实现_第3页
硕士论文-支持AJAX的互联网搜索引擎爬虫设计与实现_第4页
硕士论文-支持AJAX的互联网搜索引擎爬虫设计与实现_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕士学位论文支持AJAX的互联网搜索引擎爬虫设计与实现姓名:罗兵申请学位级别:硕士专业:计算机应用导教师:陈刚20070514AbstractWebCrawlerisanimportantcomponentofSearchEngine,webdevelopersbuildapplicationsthatareeasiertouseandmorefimctionalthantraditionalWebprogramsbyusingAJAXtechnologies,whichcreatewebpageswitiiAsynchronousJavaScriptandXML.AJAXchangesthecontentofwebpagesdynamicallyaftergettingthedatafromwebserverbysendingdierequestasynchronously.Asaresult,thedatathatthetraditionalwebcrawlercollectsislessthanthedatapresentinginthewebbrowser.Weproposeanewwebcrawler-Aj狀Crawler,whichsupportsAJAX.TheAjaxCrawleriscomposedofcrawlingwebpage,analyzingwebpage,interpretingJavaScript,invokingDOMoperationmethods,regeneratingwebpage.First,ciawlthewebpagebyrequest,second,analyzethepageelement,notonlythelinks,butalsotheJavaScriptcodeandfileinthepage,then,executetheJavaScriptcode,whichincludetheAJAXrequest,getstheresultfromserverandinvokingDOMoperationmethodstochangethecontentofwebpage,atlast,regeneratethewebpageandextractthelinks.Accordingtotheexperiment,thecontentcrawledbyAjaxCrawlerismorethantraditionalcrawleratthesamecondition.图目录TOC\o"1-3"\h\z图1-1搜索引擎的体系结构⑴ 4图2-1传统爬虫的工作流程 8图2-2抓取策略 9图2-3基于分类器聚焦爬虫体系结构 10图24基于数据抽取器的聚焦爬虫体系结构 11图2-5基于用户学习的聚焦爬虫体系结构 12图2-6系统结构E"] 13图3-1同步交互〔上〕和异步交互〔下〕的比拟[B】 18图3-2传统Web应用和基于AJAX的Web应用的比拟113〗 19图3-3网易博客的毎日推荐页面呈现 22图3>4网易博客每曰推荐的页面源码片段 22图3-5支持AJAX的爬虫总体结构 23图4-1网页分析流程 34图4-2JS解释器的结构 36图4-3DOM层次结构 38图44W3C的DOM接口继承关系 39图4-5Node节点的方法 39图4-6提取页面中超链接的流程 40图5-1AjaxCrawler抓取的超链接数一网易博客 42图5-2传统爬虫抓取的超链接数一网易博客 42图5-3AjaxCmwler抓取的超链接数一新浪博客 43图5-4传统爬虫抓取的超链接数一新浪博客 43图5-5AjaxCrawler抓取的超链接数一百度博客 44图5-6传统爬虫抓取的超链接数一百度博客 45图5-7AjaxCrawler抓取的超链接数一debian 45图5-8传统爬虫抓取的超链接数一debian 46图5-9抓取链接数比照 47图5-10抓取时间比照 47表目录TOC\o"1-3"\h\z表3-1XMLReques谢象方法 20表3-2XMLRequest对象属性 20表4-1URL类的方法说明 31第1章绪论21世纪是信息时代,随着信息科学技术的不断开展,网络已成为人们生活中的重要组成局部,因特网作为信息交流的中心与枢纽作用愈显重要。因特网是全球最大的分布式信息库,拥有众多但却杂乱无章的信息,并且这些信息呈几何级数增长。如何快速、准确地查找所需要的信息,成为人们迫切需要解决的问题。搜索引擎应运而生,而作为搜索引擎一局部的网络爬虫起着重要作用,爬虫抓取页面的数量和质量对搜索引擎的查询结果影响很大。Web是为了区别于过往的以门户为代表的Web的称呼,Web2.0只是一个符号,它说明的是正在变化中的互联网,这些变化相辅相成,彼此联系在一起,它让社会性、用户、参与和创作这些元素浮出水面成为互联网文化的中坚力量。Web的最大特点是个人化、去中心化,同时强调社会化,强调开放、共享,强调参与、创造。根本上Web的绝大局部效劳都存在一个个人标识明确的页面。ffeb的最大改变就是普通人开始改变、创造网络,草根性质的、业余性质的参与。Web要凸现每个用户的价值,每个人在互联网上都可以创造自己的价值。近年来,随着Web的兴起,在Web开发中运用AJAX技术的网站越来越多,这些技术的应用带来了更好的用户体验、很多新概念和Webin设计,同时,由于AJAX技术可以动态改变页面内容,改变了传统Web页面的结构,导致单纯抓取静态Web页面的网络爬虫抓取的内容少于页面呈现的内容,这些动态内容给网络爬虫的设计带来极大挑战。本论文所涉及的课题一一“支持AJAX的互联网搜索引擎爬虫设计与实现〞,正是在综合考虑上述开展趋势、需求因素的根底上提出的,设计实现了支持AJAX的网络爬虫原型系统AjaxCrawler。AjaxCrawler是基于传统爬虫,实现了JavaScript解释器、DOM支持的新一代爬虫,其核心在于获取AJAX异步请求返回的数据,并通过这些数据生成真正的页面内容,从而抓取到更多的内容。搜索弓I擎[2〗(SearchEngine)是为满足人们对网络信息的搜索需求而开展起来的技术,搜索引擎以一定的策略利用网络自动搜索功能,对各种信息资源分门别类地进行索引、建库,并对信息进行分析、提取、组织和处理,从而起到信息导航的作用,帮助人们从不同形式的数字化信息中进行搜索。搜索引擎起源于传统的信息全文检索理论,狭义上的搜索引擎仅指基于因特网的搜索引擎;广义上的搜索引擎除此之外还包括基于目录的信息检索效劳。搜索引擎的研究极具综合性和挑战性,它涉及到信息检索、人工智能、计算机网络、分布式处理、数据库、数据挖掘、数字图书馆、自然语言处理等多领域的理论和技术。1.2.2分类按照信息搜集的方法和效劳提供方式的不同,搜索引擎主要分为三大类-全文搜索引擎(FullTextSearchEngine),目录式搜索引擎(SearchIndex/Directory)和元搜索弓I擎(MetaSearchEngine).全文搜索引擎(FullTextSearchEngine)全文搜索引擎是从各个网站提取信息,建立数据库,检索与用户查询条件相匹配的记录后,按照一定的排列顺序返回结果,是名副其实的搜索引擎。全文搜索弓I擎的自动信息搜集有两种:一种是定期搜索,即每隔一段时间,搜索引擎主动派出爬虫程序,对一定IP地址范围的网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址参加数据库;另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,搜索引擎在一定时间内(两夭到数月不等)定期向提交的网站派出爬虫程序。全文搜索引擎中最具代表性的有国外著名的Google及国内的百度搜索。二、目录索引〔Search Index/Directory)目录索引13]是一种人工方式或半自动方式的搜索引擎,由编辑人员查看信息后,人工生成信息摘要,并将信息置于事先确定的分类框架中.由于目录索引只是一个按目录分类的网站链接列表,因此不能称为严格意义上的搜索引擎。由于目录索引中参加了人的智能,所以导航质量高,信息更准确,但也正因为如此,使得维护费用偏大,信息更新不及时。目录索引中最具代表性的有yahoo、新浪,三、元搜索弓I擎(Meta SearchEngine)元搜索引擎〖4]没有自己的数据,而是将用户的查询请求同时向多个搜索引擎递交,将返回的结果处理后,作为自己的结果返回给用户。元搜索引擎返回结果的信息量更大、更全,但是不能够充分利用所使用搜索引擎的功能,多的筛选。1.2.3开展历史搜索引擎技术伴随着互联网的开展引人注目,大约经历了三代的开展。第一代搜索引擎出现于1994年,是在传统检索学理论上开展起来的,用户只要输入检索词,计算机根据检索词比对网页、网站等进行不同的加权处理,根据权值对信息文献进行排序,权值越大计算机认为该条信息与检索词相关性越高。这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页和更新索引。而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。在实现技术上根本沿用较为成熟的IRdnformationRetrieval).网络、数据库等技术,相当于利用一些已有技术实现一个互联网上的应用。第二代搜索引擎大约出现在1996年,受文献引文索引的影响,人们通过对网页被引用的次数、引用者的权威性计算,对网页进行链接分析排序,链接分析排序技术一个最明显的好处是:在结合词频排序技术的情况下,兼顾到了排序的准确性和权威性。此时的搜索引擎大多采用分布式方案来提髙数据规模、响应速度和用户数量,一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2,000,000到100,000,000的网页索引-1998年至今为第三代,是搜索引擎空前繁荣的时期,这一时期的搜索引擎的开展有如下几个特点:索引数据库的规模继续增大,一般的商业搜索引擎都保持在10亿个网页以上。由于索引数据库的巨大规模,使得对应于搜索关键宇的返回结果数量非常大,检索结果相关度评价成为研究的焦点。相关的研究分为两类:一类是对超链接的分析;另一类是对用户反应信息的研究。开始使用自动分类技术,搜索引擎己成为一个新的研究、开发领域。因为涉及到分布式处理、数据库、信息检索、人工智能、计箅机网络、数据挖掘、数字图书馆、自然语言处理等多领域的理论和技术,所以具有综合性和挑战性。又由于搜索引擎有大量的用户,拥有很好的经济价值,所以引起了世界各国计算机科学界和信息产业界的高度关注,目前的研究、开发十分活泼•搜索引擎一般由搜集器、分析器、索引器、检索器和用户接口五局部组成,如图1-1所示。www分析器原始f据库弓用户接口-/‘f图1-1搜索引擎的体系结构⑴搜集器15】的功能是在互联网中漫游、发现和搜集信息。它常常是一个计算机程序,日夜不停地运行,尽可能多、尽可能快地搜集各种类型的新信息。同时因为互联网上的信息更新很快,需要定期更新已经搜集过的信息,以防止死链接和无效链接。搜索器的实现常常使用分布式、并行计算技术,以提高信息发现和更新的速度。搜索器搜集的信息类型多种多样,包括HTML、XML、pdf文件、doc文档、多媒体信息等等。1.3,2分析器分析器[6〗对本地文档库进行分析以便用于索引,文档分析技术包括分词、过滤和转换等。索引数据库一般“词〞能够表达完整的语义对象,所以通常选用词作为文本特征的元数据。在分词时,大局部系统从全文中抽取词条,也有局部系统只从文档的某些部分〔如标题等〕抽取词条。由于中文的基元是字而不是词,句子中各词语间没有固定的分隔符,汉语语义及结构上的复杂性和多边性给中文分词带来极大困难。

汉语分词主要有两大类方法基于词典与规那么,或者基于统计•前者应用词典匹配,汉语词法或其他汉语语言知识进行分词,如最大匹配法〔MaximumMatching)、最小分词方法等,其性能依赖于词典的完备性、规那么的一致性。后者基于字和词的统计信息,如相邻字间互信息,词频及相应的奉献信息等应用于分词。分词后通常要使用禁用词表〔stoplist)来去除出现频率很高的无意义词条,如aruthe、of、的。另外需要对词条进行单、复数转换,词缀去除,同义词转换等工作,如将jumps、jumped,jumper都归结成jump进行索引。索引器[5^^分析器提取的信息中抽取出索引项,用于表示文档以及生成文档库的索引表。索引表一般使用某种形式的倒排表(InversionList),即由索引项查找相应的文档。索引表也可能要记录索引项在文档中出现的位置,以便检索器计算索引项之间的相邻或相近关系(Proximity).索引项有客观索引项和内容索引项两种。客观索引项与文档的语意内容无关,如作者名、URL、更新时间、编码、长度、链接流行度(LinkPopularity)等;内容索引项是用来反映文档内容的,如关键词及其权重、短语、单字等。内容索引项可以分为单索引项和多索引项(或称短语索引项)两种.单索引项对于英文来讲是英语单词,比拟容易提取,因为单词之间有天然的分隔符(空格);对于中文等连续书写的语言,必须进行词语的切分。在搜索引擎中,一般要给单索引项陚予一个权值,以表示该索引项对文档的区分度,同时用来计算查询结果的相关度。使用的方法一般有统计法、信息论法和概率法。短语索引项的提取方法有统计法、概率法和语言学法。索引器可以使用集中式索引算法或分布式索引算法。当数据量很大时,必须实现即时索引(InstantIndexing),否那么跟不上信息量急剧增加的速度。索引算法对索引器的性能(如大规模峰值査询时的响应速度)有很大的影响,一个搜索引擎的有效性在很大程度上取决于索引的质量。检索器[5】根据用户的查询在索引库中找出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反应机制,检索器常用的信息检索模型有集合理论模型、代数模型、概率模型和混合模型四种。1.35用户接口用户接口〖5】为用户提供可视化的查询输入和结果输出界面,提供用户相关性反应机制。主要目的是方便用户使用搜索引擎,高效率、多方式地从捜索引擎中得到有效、及时的信息。用户接口的设计和实现使用人机交互的理论和方法,以充分适应人类的思维习惯。用户输入接口可以分为简单接口和复杂接口两种。简单接口只提供用户输入查询串的文本框;复杂接口可以让用户对查询进行限制,如逻辑运算(与、或、非〕、相近关系、出现位置(如标题、内容〕、信息时间、长度等。在输出界面中,搜索引擎将检索结果展现为一个线性的文档列表,其中包含了文档的标题、摘要、URL等信息,用户需要逐个浏览以便找出所需的文档。论文组织本论文共分六章。第1章绪论。本章介绍论文的选题背景和意义、国内外相关领域技术的现状以及论文的组织结构。第2章网络爬虫研究热点。本章主要介绍了网络爬虫的根本原理、工作流程以及目前网络爬虫的研究热点:聚焦爬虫和主题爬虫,分别介绍了它们的分类和体系结构。第3章AjaxCrawler概要设计。本章主要介绍Web 2.0相关技术和对爬虫的影响以及AjaxCrawler的整体架构、关键技术。第4章AjaxCrawler的实现。介绍网络爬虫的相关技术和AjaxOawler的实现,包括JS解释器、DOM支持模块、页面生成模块等几个局部。第5章测试和实验。介绍了 AjaxCrawler的测试以及传统爬虫和AjaxCrawler抓取结果的比照。第6章总结与展望。总结了论文创新点,展望了 AjaxCrawler值得继续优化和实现的问题。第2章网络爬虫研究热点作为搜索引擎关键技术之一的网络爬虫被称为WebCrawler,*ebWanderer或WebSpider,能够沿Web页面中的超链接在万维网中自动漫游,并读取漫游的Web页面的程序。网络爬虫的漫游是指根据HTML文档中的超链接,利用协议连续地从不同的效劳器中获取Web页面的过程。网络爬虫是通过网页的链接地址来寻找网页。从网站的某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,理论上讲网络爬虫可以把互联网上所有的网页都抓取下来。传统爬虫从一个或假设干初始网页的链接地址开始,获得初始网页上的地址,在抓取网页的过程中,不断从当前页面上抽取新的链接地址放入队列,直到满足一定的停止条件,如图2-1所示。开始初始链接地址获取网页将新的地址放入队列否结束图2-1传统爬虫的工作流程网页的抓取策略分为深度优先、广度优先和最正确优先三种,广度优先搜索策略是在抓取过程中先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。该算法的设计和实现相对简单。目前为覆盖尽可能多的网页,一般使用广度优先搜索方法,因为这个方法可以让网络爬虫并行处理,提高其抓取速度。对于图2-2,广度优先的抓取顺序JiA—B、C、D、E、F-H,G-I,深度优先是指网络爬虫会从起始页开始,一个链接一个链接抓取下去,处理完这条线路之后再转入下一个起始页,继续抓取链接。这个方法的优点是网络爬虫在设计时比拟容易,但是会导致爬虫的陷入问题。对于图2-2,深度优先的抓取顺序是A—F—G;E-H-I;B;C;D,最正确优先搜索最正确优先搜索策略[s】按照一定的网页分析算法,预测候选链接地址与目标网

页的相似度,或与主题的相关性,并选取评价最好的一个或几个地址进行抓取。它只访问经过网页分析算法预测为?有用〞的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最正确优先策略是一种局部最优搜索算法,因此需要将最正确优先结合具体的应用进行改良,以跳出局部最优点。图2-2抓取策略随着网络的迅速开展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎,例如传统的通用搜索引擎AltaVista,Yahoo!等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在一定的局限性,如:不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎效劳器资源与无限的网络数据资源之间的矛盾将进一步加深。⑶万维网数据形式的丰富和网络技术的不断开展,图片、数据库,音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。为了解决上述问题,定向抓取相关网页资源的聚焦爬虫产生了。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网

页与相关的链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。聚焦爬虫能有效地利用网络带宽,减少网络拥塞。相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题〖8〗-对抓取目标的描述或定义:对网页或数据的分析与过滤;对链接地址的搜索策略。抓取目标的描述和定义是决定网页分析算法与链接地址搜索策略如何制订的根底,而网页分析算法和候选链接地址排序算法是决定搜索引擎所提供的效劳形式和鹏虫网页抓取行为的关键所在。一、基于分类器的聚焦爬虫文献[9]是具有代表性的聚焦爬虫的早期研究之一,目前大多数的聚焦抓取都采用了类似的工作流程,其系统结构如图2-3所示。根据一个主题目录和用户指定的初始点来描述抓取目标,并在用户浏览过程中,将用户标注的感兴趣网页放入相应的主题目录,修改主题样本。系统的两个主要局部是网页分类器和网页选择器。网页分类器负责学习抓取目标的特点,计算网页的关联度,并过滤网页。选择器负责计算网页的重要程度,发现中心型网页,并由此动态决定网页的访问顺序。PriorityC^tt-olCrawlerFrontierTaxonomyVTabley VjablesJ^—--rReadExamplesDistiller—CIa5sifier(Filtermg)"ClassifierCTraining)^^opic''''^VModels^2-3基于分类器聚焦爬虫体系结构【9]二、基于数据抽取器的聚焦爬虫Extractor如图2-4,聚焦爬虫从网络上发现所需要的资源网页,传递给数据抽取器进行数据抽取工作。数据抽取可能是对HiddenWeb之后的数据库进行探测查询,也可能是通过wrapper或网页外观格式信息进行数据抽取。得到的原数据将由数据分析器做分析和标注,才能转化为符合系统数据库模式的结构化数据进行存储和WWWWebpageCrawlerFeedbaclData、AnalyzerJ图2*4基于数据抽取器的聚焦爬虫体系结构三、基于用户学习的聚焦爬虫协作聚焦爬虫的体系结构关键在于对用户的浏览模式的学习模块。文献[10]的爬虫体系结构如图2-5所示。系统通过记录用户在浏览到感兴趣的网页时,点击?有用〞按钮的行为,记录相关网页,为用户建立浏览模型。之后,系统对经过标注的网页进行LSI聚类,根据聚类结果构建概念图,表示不同类别之间的联系。这样,系统就可以利用不同网页间的链接关系来学习用户的浏览行为。

图2-5基于用户学习的聚焦爬虫体系结构2.3主题爬虫目前的搜索引擎大多数是面向所有信息的,可称之为综合性搜索引擎。随着信息多元化的增长,适用于所有用户的综合性搜索引擎已经不能满足特定用户更深入地查询需求,他们对信息的需求往往是针对受限领域和面向特定主题,综合性搜索引擎的召回率和查准率都比拟低。针对这种情况,需要一个分类细致精确、数据全面深入、更新及时的面向主题的搜索引擎。主题相关度的分析是主题爬虫设计的关键,最简单的可以基于关键词进行分析,更深入的可以上升到语义和概念层次。基于关键词的主题相关度分析的主要思路:首先在领域专家的参与下,确定一组带有权重的能够代表受限领域的关键词,用来表示确定的主题;然后对页面进行关键词提取,釆用向量空间模型算法计算网页的主题相关度,从而决定页面的取舍。基于关键词和基于概念的主题爬虫系统都是以普通爬虫为根底,对其进行功能上的扩充,在对网页整个处理过程中增加主题确立模块、优化初始种子模块、主题相关度分析模块和排序模块。如下图,主题爬虫的工作流程如下:第一步,爬行模块取回网页;第二步,调用相关度分析模块,对网页进行相关度分析;第三步,爬行模块根据分析的不同结果进行相应的处理;第四步,爬行模块从数据库取出等待处理的URL继续工作,返回到第一步,直到没有新的URL;第五步,对网页的重要程度进行排序。HTML文档爬行模块初始种子模块‘們数据库相关度分析模块排序模块图2-6系统结构[111本章主要介绍了网络爬虫的原理、工作流程和研究热点:聚焦爬虫和主题爬虫,分别介绍了它们的分类和体系结构。

第3章AjaxCrawler概要设计的影响HTML语言是网络世界进行信息交换的最主要语言之一,HTML语言属于一种标记语言,它将纯文本和格式化指令混合在一起反映格式化文本。HTML语法由标记TAG和数据两局部组成标记TAG是’<’和’>’之间的局部,由标记名和属性组成。比方<ini)ut^e='button'value='ok'>,input是标记名,type、value是属性名,button、ok是属性值,标记名和属性是大小写无关的。HTML元素按功能分为三类:>用于表示HTML文档结构的元素,如list、table>用于表示HTML文档显示样式的元素,如font、color>用于提供HTML文档交互功能的元素,如form、script数据局部是HTML文挡中标记以外的局部,一般解析这些数据为文字。—个HTML文档通常包括如下三个局部->一个包含HTML版本信息的行>文档头局部,由元素HEAD标识>文档体局部,由元素BODY标识下面是一个简单HTML文档:<!DOCTYPEHTMLPUBLIC"-/AV3C//DTDHTML4.01//EN"“.dttr><HTML><HEAD><nTLE>thisisasample</nTLE></HEAD><BODY><P>Hello’world</BODY></HTML>互联网上有不计其数的网页,制作这些网页的标准语言就是HTML语言,这些网页包含很多链接,有指向其他网站网页的,也有指向与自身同一效劳器网页的,用户通过点击这些链接就可以从一个网页跳到另一个网页,这些链接使用统一资源定位符〔UniversalResourceLocator,URL)跳到其他网页,URL是网页和其他资源的地址。随着网络技术的开展,网站变得越来越复杂,网站开发从单纯使用静态HTML到使用HTML和脚本语言,从而实现更多的功能。如今,使用脚本代码构建网页己经比拟普遍,例如动态生成网页内容,通常都需要利用很多变量和复杂的脚本,给网络爬虫抓取和分析此类网页带来很多困难。在脚本代码用于网页之前,所有的链接都是由HTML的<A>标签标识,网络爬虫只需要分析页面中的<A>标签,就能比拟完整地抓取这个网站的网页。但是随着脚本代码越来越多地用于网页的逻辑处理、页面呈现等等,尤其是近年来,随着的兴起,AJAX技术的流行,很多网站将脚本的应用发挥到及至,极大地提高了用户体验。Web的概念是2004年3月O'Reilly公司的DaleDougherty与MediaLive公司的CraigCline在一个头脑风暴会议上提出的。O'Reilly公司副总裁DaleDoughety在这次会议上指出,网络非但没有破灭,而且随着许多令人冲动的新程序和网站让人惊讶的突然出现,网络比以往的作用更重要。Web是互联网的一次理念和思想体系的升级换代,原来自上而下的、少数资源控制者集中控制主导的互联网体系,现在转变为自下而上的、由用户集体智慧和力量主导的互联网体系。Web内在的动力来源是将互联网的主导权交还个人,从而充分开掘了个人的积极性。广阔个人所奉献的影响和智慧以及个人联系形成的社群影响替代了原来少数人的影响,从而极大地解放了个人的创作和奉献的潜能,使互联网的创造力上升到了新的量级。Web不单纯是技术或者解决方案,而是一套可执行的理念体系,实践着网络社会化和个性化的理想。具体的说从模式上是单纯的读向写、共同建设的发展。Web是以Flickr、Tribes等网站为代表,以Blog、TAG、SNS、RSS、wiki等社会软件的应用为核心,依据六度分隔、分形、XML、AJAX等新理论和技术实现的互联网新一代模式,3.1.2AJAX利用Web幵发应用程序因其易于部署、节省本钱的特点而逐渐成为技术的主流,浏览器将是未来唯一需要的客户端。J2EEWeb技术己经从一个静态的内容提供环境迅速开展为一个在Intranet和Internet上运行的动态业务应用程序的可靠平台•过去几年中在后端(后端机制,backendmechanics)投入了太多的时间,而在Web用户界面对用户交互和响应灵敏方面却投入缺乏。用户在强大的业务逻辑背后,还忍受着‘‘提交一响应一等待一刷新〞的同步运行机制,不管在页面呈现上的变化多么小,都需要耐心地等待效劳器将整个页面重新发送给客户端。为了构建更为动态和响应更灵敏的Web应用程序,实现浏览器和效劳器的异步并行处理,减轻效劳器端负担,JesseJamesGarrett提出了AJAXH3〗(AsynchronousJavaScriptandXML)这一新的概念,AJAX是一种创立交互式网页应用的网页开发技术,由多种技术组合而成,包括〖13]:>基于XHTML和CSS标准的表示;>•使用DocumentObjectModel进行动态显示和交互;>使用XMLRequest对象与效劳器进行异步通信;>使用JavaScript绑定一切。与传统的Web开发不同,AJAX并不是以一种基于静态页面的方式来看待Web应用的。从AJAX的角度看来,Web应用应由少量的页面组成,其中每个页面是一个更小型的AJAX应用,每个页面包括有一些使用JavaScript开发的AJAX组件。这些组件使用XMLlfequest对象以异步的方式与效劳器通信,从效劳器获取需要的数据后使用DOMAPI来更新页面内容,与传统Web应用的比拟如图3-1所示,在传统的浏览器与效劳器的交互方式中,用户浏览Web资源时,首先由客户端浏览器向Web效劳器发送请求。Web效劳器对用户的请求进行处理,并把处理结果以HTML页面的形式返回给客户端浏览器。当用户的请求在发送或Web效劳器在处理请求时,用户必须等待。另外用户还经常遇到仅仅是改变页面的一小部内容,ITeb效劳器都要返回一个完整的ffeb页,造成用户每次都要浪费时间和带宽去重新读取整个页面。如图3-2所示,AJAX的工作原理相当于在用户和效劳器之间加了一个中间层一一AJAX引擎,使用户操作与效劳器响应异步化并不是所有的用户请求都提交给效劳器。一些数据验证和处理由AJAX来做而不必交给效劳器处理,只有确定需要从效劳器读取新数据时再由AJAX引擎向效劳器提交请求。在使用AJAX引擎后,用户从感觉上几乎所有的操作都会很快响应,并且没有页面重载(白屏)的等待?AJAX引擎实际上是一个比拟复杂的JavaScript应用程序,用来处理用户请求然后根据需要动态读写效劳器和更改DOM内容。以前为了使网页能无缝化重构,也就是在页面已经下载完毕后改变页面内容,开发人员_直通过JavaScript和DOM来实现。但是要使网页真正动态起来,不仅需要内部的互动,还需要从外部获取数据,在XMLReciuest对象出现以前是让用户来输入数据并通过DOM来改变网页内容的,但现在XMLRequest对象可以在不重新载入页面的情况下读写效劳器上的数据,使用户的输入到达最少。AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络效劳器间的交流。所以就算当请求和响应在引擎和效劳器之间被来回传送,用户还是能与应用程序交互。从而可以用JavaScript调用AJAX引擎来代替产生一个的用户动作,同时引擎本身能够立即处理不需要请求效劳器的动作,就像桌面应用程序处理一样,例如在内存中编辑数据,验证数据等。dassk:webapplicatk^(syrKJin^KHs):Ajaxwebapplk^tionmod^(asywrftronoi^)M^vMl偏 server德同步交互〔上〕和异步交互〔下〕的比拟【13〗server-sidesystemssei^er'sidesystems图3-2传统Web应用和基于AJAX的Web应用的比拟XMLRequestAJAX的核心是JavaScript对象XMLRequest,简称为XHR,是AJAX引擎解决无需刷新整个页面就可以从效劳器获取数据的关键所在,该对象在InternetExplorer5中首次引入,是一种支持异步请求的技术。简而言之,XHR为运行于浏览器中的JavaScript脚本提供了一种在页面之内与效劳器通信的手段。员面内的JavaScript可以在不刷新页面的情况下从效劳器获取数据,或者向效劳器提交数据。XHR的出现为Web开发提供了一种全新的可能性,甚至整个改变了人们对于Web应用由什么来组成的看法,它可以使我们以一种全新的方式来做ffeb开发,为用户提供更好的交互体验。在微软IE平台下XHR是XML组件一个对象,它通过允许幵发人员在Web页面内部使用XMLActive)(组件扩展自身的功能,开发人员可以不用从当前的Web页面导航而直接传输数据到效劳器上或者从效劳器取数据。这个功能是很重要的,因为它帮助减少了无状态连接的痛苦,还可以排除下载冗余web数据的需

要。在其他Web浏览器平台下,例如Mozilla,Konqueror和Opera,也创立了自己的m代理类一一XMLRequest类。对于大多数情况,XMLRequest对象和XML组件很相似,方法和属性也类似,如下表所示:表3]XMLRequest对象方法方法描述Abort停止当前请求getAllResponseHeaders返回完整的heads,字符串类型getResponseHeader返回单个header标签,字符串类型Open设置请求目标URL,方法和其他参数Send发送请求setRequestHeader设置header并和请求一起发送表3-2XMLRequest对象属性属性描述onreadystatechange状态改变的事件触发器readyState对象状态—未初始化—读取中—已读取-交互中—完成responseText效劳器返回的文本responseXMLStatus效劳器返回的状态码,如404文件未找到200—成功statusText效劳器返回的状态文本信息优点AJAX具有如下优点-⑴减轻效劳器的负担^AJAX的原那么是“按需取数据〞,最大程度地减少冗余的请求和响应对效劳器造成的负担,同时AJAX可以把原来需要效劳器做的许多事情放到客户端来做。(2)无刷新更新页面——减少用户等待时间。特别的,当要读取大量的数据时,不会出现白屏或访问超时的情况。在数据的读取过程中,用户所面对的是原来的页面内容(一般页面上有一个正在加载的提示框)。只有当数据接收完毕之后才更新相应局部的内容,而这种更新是瞬间的,用户难以发觉。(3>带来更好的用户体验——由于用户等待时间的减少,提高了用户网络体验的质量。充分利用资源——^ffi—些传统方式下由效劳器负担的工作转移到客户端。利用客户端闲置的能力来处理数据,减轻效劳器和网络的负担,节约空间和带宽租用本钱。可以调用外部数据。基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。进一步促进页面呈现和数据的别离,AJAX在整个Web效劳系统的位置决定了AJAX引擎只要从效劳端获取XML或者其他格式的数据,便可定制整个Web界面。从而可以使得效劳端注重数据逻辑处理而不必关心Web界面的呈现,将数据呈现的工作交给AJAX引擎来做,这样有利于分工合作、减少非技术人员对页面的修改造成的Web应用程序错误、提高效率,更加适用于现在的发布系统。AJAX提升了用户体验,但同时给网络爬虫的抓取带来了极大的挑战,因为很多页面内容都是通过异步向效劳器发请求后得到,而传统的爬虫仅仅分析静态HTML页面里的超链接,显然,在利用AJAX技术的网站中使用传统爬虫抓取网页是不够的,抓取的信息很不完善,这将导致搜索引擎查询结果准确率的下降,因此有必要设计新的爬虫,能够支持AJAX,并且截获异步调用返回的结果,以及分析由此结果生成的新内容,尽可能多的抓取页面信息。总体结构对于使用AJAX技术的网站,比方网易博客〖i4],使用firefox浏览器翻开,然后查看网页源码,重点查看每日推荐的内容,如图3-3很容易发现源码里的内容远少于页面呈现的东西,从图3-4中看到呈现每日推荐内容的HTML元素是id为recomDailyContent的div节点,源码中此元素一点内容都没有,但是页面上每日推荐却有很多内容〔超链接〕,因此可知此页面内容都是通过后加载方式利用DOM操作动态呈现出来的,用户发觉不出来。田拷,米兰伦P米兰vs»罗伦南山樵夫,那淡淡的蓝色倜怅贝克汉姆打抗老针罗纳尔多不希望小罗加盟米兰弗誇爷基恩师徒同时夺冠斑马动态布冯转会寅成再克雪斯波去尤文火箭,生的伟大,死的不荣耀駄奔南 成舰?職招糊雅典湖来了■花开-滚蛋的永远是软蛋欧冠集鮮的米兰队敢"去吧!华仔!对蕃你的目标I“立体决fitft七〔附ffl)僵尸王I受m为年轻付出代价W^J体宵菊野辆ffiS^的跡“卧底"鄉月领衔NBA坂无间道火箭队缺乏一种頼气3-3网易博客的每日推荐页面呈现-»"><•hr.f='r</div> ‘?曰鮮1|4~>ftsuplHUuirRiCHiTik'ick=-onrl;■t'丨XdiTcl.«='.'X»hrcf^'t"ondiclp-rilarn 人文</»></drrX/lXdivcUs,="»*X4 inidiclt='rtturnfil«.*>50轻</•></dirX/l<4itilup'.'Xihrtf='rmtlidP'r.tmi </»></iUt></1iVdiF'Uietdii'Wh.■>««</•X('dlT></ll>fiiii,'端糾•>vd>v><ai>filsi,">tt^</»></di.^X/li»></dlTX/ll图34网易博客每日推荐的页面源码片段我们知道,传统爬虫是通过页面源码中的超链接标签在互联网上漫游的,而从上面的例子可以看到,页面源码里的超链接个数是少于页面呈现中的超链接个数的,也就是说传统爬虫抓取的内容是不完整的,这对于搜索引擎是不利的。针对传统爬虫的缺乏,AjaxCrawler将重点分析页面后加载的内容,也就是通过分析页面中的js文件和js代码,模拟浏览器的行为,根据后加载的内容执行DOM操作后得到真正的页面信息,支持AJA)(的爬虫由网页抓取模块、网页分析模块、JS解析模块,DOM支持模JS代码和文件DO]iM操作代码图3-5支持AJAX的爬虫总体结构网页抓取模块主要是通过请求,获取需要抓取的页面。网页分析模块主要是分析页面元素信息,和传统爬虫不同的是,AjaxCrawler不仅仅分析页面中的<A>标签和页面内容,还分析<SCRIPT>标签,如果是JavaScript脚本文件,那么通过请求获取此文件然后保存到本地;如果是脚本代码,新建临时文件存储在本地,供JS解析模块使用。JS解析模块主要执行上一模块中得到的JS代码,这些代码往往包含AJAX调用,获取从效劳器返回的请求内容,得到内容后通过DOM支持模块,在页面中添加或者修改HTML元素,因此DOM支持模块主要是支持类似浏览器中的DOM操作,最后,页面生成模块利用上一模块的结果重新组合生成新的页面内容,然后提取页面中的超链接和文本内容。关键技术JavaScript的解析浙江大学硕士学位论文 块、页面生成模块五局部组成,如下列图所示。网页抓取模块网页分析模块传统爬虫抓取网页后仅仅分析页面源码中的<八:>标签,然后通过这些超链接去抓取另外的网页,但是对于那些使用AJAX技术的网页,页面源码中的内容比较少,更多的内容是AJAX通过异步调用的方式后加载出来的,在页面源码中这些内容都不存在,所以必须分析页面源码中的JavaScript代码,找到那些调用了AJAX的代码,然后执行这些代码从而获取从效劳器返回的数据,为了能够执行

浙g大学硕士学位论文 第3章AjaxCrawler概要设计这些代码,需要实现JavaScript解析器。操作的解析对于使用AJAX技术的网站,嵌入网页源码的JavaScript代码中往往包含修改DOM树的语句,例如改变某个页面元素的内容、隐藏某个页面元素等等,AJAX正是利用这些JavaScript代码动态改变页面内容的呈现。由于JavaScript解析器是解析纯JavaScript代码的,对于这些操作DOM树的代码并不支持,因为JavaScript解析器并不知道将被修改的页面元素,因此需要在JavaScript解析器的根底上支持JS代码中的DOM操作,主要有获取页面元素、修改页面元素的内容等。经过JavaScript解析和JS代码中DOM操作的解析,最终可以得到和页面呈现根本一致的页面内容,为分折页面中的超链接和文本内容做好准备。本章小结本章主要介绍了Web对爬虫的影响和支持AJAX爬虫的设计,对AjaxCmwler进行了整体性的描述和概要的内部流程描述,最后介绍了AjaxCtawler的关键技术。第4章AjaxCrawler的实现协议(HyperTextTransferProtocol,超文本传输协议〕是为分布式和合作式超媒体信息系统设计的协议,是一种无状态、无连接、面向对象的协议,具有简单、灵活等特点,能满足简单数据传输的需要,是WWW的标准通信协议。网络爬虫在万维网上的信息采集都是通过协议实现的’下面介绍实现网络爬虫中需要用到的主要方法和信息头格式[12】。一、的信息头协议利用信息头来描述每次事务的处理,主要的信息头和信息域的定义如下:请求头〔Request Headers)User-Agent:客户名及版本号;From:客户端使用者信息;Accept:客户端可接受的数据类型;Accept-Charset:客户端可接受的字符集;Accept-Language:客户端能理解的语言。应答头(Response Headers)-Version:效劳器支持的版本号Status-code:效劳器处理本次请求的状态码,常见的有:200正常400请求错误404请求的资源未找到500效劳器内部错误请求的资源已经移动请求的资源被临时移动Server:Web效劳器软件名和版本号;Last-Modified:客户端请求资源的最后修改时间;Content-Length:本次传输数据的长度;Content-Type:本次传送数据的类型,由效劳器根据文件扩展名决定;Content-Transfer-Encoding:表示效劳器采用的编码机制:Content-Language:标识本次传送数据采用的语言种类。二、的主要方法方法〔Method)描述了在指定资源上将要执行的动作,协议中定义了多种方法,其中最常用的如下-GET:负责取回指定资源HEAD:请求效劳器传送指定资源的大小、最后更改时间等描述性信息POST:用于客户端向效劳器发送数据,主要是发送FORM内容,供效劳器端处理。起始URL是网络爬虫的搜索起点,起点选择的不同会影响到信息搜集的效果,在实际应用中,根据信息发现系统的具体目的选择适当的起始地址。搜索引擎系统的目标是尽量广泛地采集和索引Web页面,对采集文档有质量性和覆盖性的要求,即采集的Web文档应该是那些质量较好、用户认可度高且是平均分散在整个网络中的页面。因此,搜索引擎系统中网络爬虫的起始地址选择比拟关键,一般釆用如下的策略:选择访问人数多的站点地址为起始地址;选择高质量的综合性站点地址为起始地址;根据域名的划分选择起始地址;根据地理区域的划分选择起始地址;根据IP地址的区段选择起始地址在搜索引擎中,由于系统对信息的需求是有目标的,因而对网络所抓取的文挡有目的性要求,即所抓取的文档应尽量与信息发现目标相关。可按照如下方法确定网络爬虫的起始地址:首先根据发现目标提取目标特征描述,再根据目标特征描述在Yahoo等著名的资源索引与检索系统中进行查询,取各站点返回的结果地址作为网络爬虫釆集的起始地址,万维网是一个超大型的超文本系统,信息容量极为庞大,为了提高检索系统信息釆集的效率,检索系统一般可同时运行多个网络爬虫,并行采集Web文档。并行文档釆集是通过将所漫游的万维网空间划分为多个子空间,在每个子空间中运行一个网络爬虫实现的,而且漫游空间的划分便于对网络爬虫漫游路径与漫游范围的控制。对网络爬虫漫游空间的划分与控制策略主要有三种:按域名空间划分漫游空间按照域名进行划分,如按照“.edu〞、“〞等域名后缀进行划分,具体划分时可根据子空间的大小取不同级次域名进行划分。按照域名划分空间可使网络爬虫所采集到的网页相对集中,有利于后续处理。按地理空间划分漫游子空间可以按照国家、地区、省份等地理区域进行划分,这样划分可以使网络爬虫所要漫游的效劳器相对集中于某个地域或网段内,釆集网页的时延相差比拟小,有利于对网络爬虫和后处理模块的负载均衡,也能保证所釆集到的文档有一定的地理覆盖性。按IP地址空间划分这种划分是比拟简单的划分规那么,可根据子空间的大小取不同区间的地址为子空间,按地址划分有利于对漫游范围的控制,使得网络爬虫漫游到子空间内所网络爬虫是搜索引擎系统的重要组成局部,几乎每一个搜索引擎系统都运行自己的网络爬虫进行信息采集。每个Web页面的采集都要经过资源请求、效劳器应答和网络信息传送三个阶段才能下载到本地,所有效劳器间的通信与文档下载都需要经过Internet的传送,网络中传输的数据量很大,将大幅度增加网络和服务器的负载。因此,网络爬虫使用不当或过分使用都会使网络和被访问效劳器的负载增大,甚至造成网络传输的拥塞和Web应用效劳器的崩浪。另一方面,由于万维网是一个复杂的异构信息效劳网络,网络中可能存在一®链接“黑洞〞〔如由一些数据库或CGI程序动态生成的页面,网络爬虫一旦陷入就很难摆脱〕和一些废弃的页面,网络爬虫不应去采集这些信息。所以为了减轻网络爬虫程序对网络和效劳器的巨大负载,保证网络爬虫不影响其他系统正常工作,并使网络爬虫保持正常、有效地运行,有必要对爬虫的漫游行为采取适当的控制。主要有下面几个原那么:(1)标识网络爬虫爬虫在运行时,应在协议的User-Agent域中标识出是网络爬虫客户,并在From域中标识出使用者的联系方法。这样做可以使得被访问用户能够与网络爬虫的使用者保持联系,假设被访问系统受到爬虫的干扰,可及时通知爬虫的使用者进行修正。并且网络爬虫应在拥有域名的机器上运行,使被访问用户能识别网络爬虫的运行位置。合理采集资源为了降低爬虫对网络和被访问系统的影响,应合理采集资源。爬虫发送请求的速度不要太快,否那么被访问系统可能会因为过多的效劳请求而崩澳。因此,在向同一个效劳器发送请求时,应保持一定的时间间隔,此间隔需根据网络状况与效劳器能力而定,并且爬虫应在网络负载较轻的夜间运行。在对一个效劳器进行刷新访问时,应先读取请求页面的头信息,判断页面自上次访问后有无变化,假设确定发生变化再进行读取,并根据各效劳器信息资源的更新周期确定对效劳器资源的刷新访问频率。在发送请求时还应在请求头的Acc印t域中标识出爬虫需要的资源种类,减轻效劳器的压力。利用Robot,txt是Web应用效劳器专门向爬虫程序提供的用来描述本身资源的信息元文件,般存储于效劳器的根目录。包含了自身资源结构描述、内容描述和更新时间等信息,并注明了哪瘦资源爬虫可以采集、哪些禁止采集。中不允许采集的内容一般是黑洞页面、动态页面、过期页面、未完成或有错误的页面和拥有者不愿公开的页面。现在Robot,txt所釆用的描述格式一般都遵循MartinKoster所制订的网络爬虫排他标准〔StandardforRobotExclusion,SRE),在SRE中定义了User-Agent和Disallow两个描述域,用来标识对特定网络爬虫的禁止访问区域。因此在爬虫访问某台效劳器时,应首先读取并分析效劳器的Robot,txt文件〔绝大多数正式Web应用效劳器都向网络爬虫程序提供此文件〕’这样既可以提高网络爬虫的运行效率和文档采集的有效性,又可以减少对被访问系统的不利影响。4.1.5内容提取对于网页内容的提取,一直是网络爬虫中重要的技术。整个系统一般采用插件的形式,通过一个插件管理效劳程序,遇到不同格式的网页采用不同的插件处理。这种方式的好处在于扩充性好,以后每出现一种新的类型,就可以把其处理方式做成一个插件补充到插件管理效劳程序之中。对于doc、Pdf等文档,这种由专业厂商提供的软件生成的文档,厂商都会提供相应的文本提取接口?网络爬虫只需要调用这些插件的接口,即可提取文档中的文本信息和文件其它相关的信息。HTML等文档不一样,HTML有一套自己的语法•通过不同的命令标识符来表示不同的字体、颜色、位置等版式,提取文本信息时需要把这些标识符都过滤掉。对于多媒体、图片等文件,一般是通过链接的描文本(即链接文本)和相关的文件注释来判断这些文件的内容。例如有一个链接文字为“刘德华照片〞,其链接指向一张jpg格式的图片,那么爬虫就知道这张图片的内容是“刘德华的照片〞。这样,在搜索“刘德华"和‘‘照片〞时都能让搜索引擎找到这张图片。另外,许多多媒体文件中有文件属性,提取这些属性也可更好地了解文件的内容。本模块根据超链接地址通过请求获得相应的网页,根据返回的状态码判定当前URL是否有错,如果有错直接返回错误信息;如果不能连接或连接超时,设定重连次数,最终得到此页面或者返回错误信息。—、网络编程根本概念,TCP/IP协议简介网络根底知识网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层那么提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/效劳器〔C/S)结构,即通信双方的一方作为效劳器等待客户提出请求并予以响应。客户那么在需要效劳时向效劳器提出申请。效劳器一般作为守护进程始终运行,监听网络端口,一且有客户请求,就会启动一个效劳进程来响应该客户,同时自己继续监听效劳端口,使后来的客户也能及时得到效劳。两类传输协议:TCP和UDP虽然TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层存在TCP和UDP两个协议。(1)TCP是TransferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无过失的数据流。发送方和接收方的两个socket之间建立连接,以便在TCP协议的根底上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。UDP是UserDatagramProtocol的简称,是一种无连接的协议,每个数据包都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的,两种协议的比拟-使用UDP时,每个数据包中都给出了完整的地址信息,因此无需建立发送方和接收方的连接-对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必须建立连接,所以在TCP中多了一个连接建立的时间。使用UDP传输数据时是有大小限制的,每个被传输的数据包必须限定在64KB之内。而TCP没有这方面的限制,一且连接建立起来,双方的socket就可以按统一的格式传输大量的数据-UDP是一个不可靠的协议,发送方所发送的数据包并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输〔FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序,UDP协议的存在,主要有两个原因,一是可靠的传输需要付出代价,对数据内容正确性的检验占用计算机的处理时间和网络带宽,因此TCP传输的效率不如UDP髙。二是在许多应用中并不需要保证严格的传输可靠性,比方视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性即可,这种情况下使用UDP更合理,二、Java网络编程1.统一资源定位器URLURL表示Internet上某一资源的地址。通过URL可以访问Internet上的各种网络资源,比方最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL的组成格式如下:protocol://resourceName,协议名(protocol)标识获取资源所使用的传输协议,如、ftp、gopher、file等,资源名〔resourcename)是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:.RQO/是协议名://主机名./indeji.html是协议名://机器名+文件名./netffQrk.html#ref是协议名://机器名+端口号+文件名+内部引用创立URL为了表示中实现了类URL,可以通过四种方式初始化一个URL对象:publicURL(Stringspec);publicURL(URLcontext,Stringspec);publicURL(Stringprotocol,Stringhost.Stringfile):publicURL(Stringprotocol,Stringhost,intport.Stringfile);解析URL—个URL对象生成后,其属性是不能被改变的,可以通过类URL所提供的方法来获取这些属性:表4-丨URL类的方法说明方法说明getProtocolO获取该URL的协议名getHostO获取该URL的主机名getPortO获取该URL的端口号,如果没有设置端口,返回-1getFileO获取该URL的文件名getQueryO获取该URL的査询信息getPathO获取该URL的路径getAuthorityO获取该URL的权限信息getUserlnfoO获得用户信息getRefO获得该URL的锚5.从URL读取WWW网络资源使用URL的方法openStreamO通过VRL对象读取指定的ffWW资源,方法openStearaO与指定的URL建立连接并返回InputStream类的对象以便从这一连publicclassURLReader{publicstaticvoidniain(String[]args)throwsException{//构建URL对象URLtire=newURL('.163.com/');BufferedReaderin=newBufferedReader(newInputStrearaReader(tire.openStreamO));//使用openStream得到输入流并由此构造一个BufferedReader对象StringinputLine;//从输入流不断的读数据,直到读完为止while((inputLine=in.readLineO)!=null)System,out.printIn(inputUne);//把读入的数据打印到屏幕上in.close0;//关闭输入流6.通过URLConnetction连接WWW通过URL的方法openStreamO只能从网络上读取数据,如果同时需要输出数据,必须先与URL建立连接,然后才能对其进行读写,需要用到URLConnection类。类URLConnection也在包中定义,它表示Java程序和URL在网络上的通信连接,当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnectionO生成对应的URLConnection对象,例如下面的程序段首先生成—个指向地址,163-00111的对象,然后用openConnection()翻开该URL对象上的~个连接,返回一个URLCormection对象。如果连接过程失败,将产生lOExc印tion异常。Try{URLnet=newURLr,163.com");URLConnectonntc=;)catch(MalformedURLExceptione){//创立URU)对象失败}catch(lOExceptione){//openConnectionO失败4.3网页分析模块嵌入JavaScript在HTML中嵌入JavaScript的方式有如下几种:一、将JS代码放在标记对<80491>和</8014?1>之间一般格式如下:〈scripttype="text/javascript">//jscode</script>可以在〈script〉标记对之间放置多条JavaScript语句,这些语句的放置顺序就是它们的执行顺序,而且执行的过程是文档装载过程的一局部。标记〈script〉既可以出现在HTML文档的<head>局部,也可以出现在<body>局部。一个HTML文档可包含任意多个不重叠的〈script〉标记对,虽然在装载和解析一个HTML文件的过程中,各个脚本在不同时刻执行,但是这些脚本却是同一个JavaScript程序的组成局部,因此在一个脚本代码中定义的函数和变量适用于随后出现的同一文件中的所有脚本。二、放置在*<script>标记的src属性指定的外部文件中从JavaScript1.1起,〈script〉标记就支持src属性,这个属性的值指定了一个JavaScript代码文件的URL,用法如下:〈scriptsrc="../js/utils.js"></script>JavaScript文件的扩展名通常是.js,只包含纯粹的JavaScript代码,其中既没有〈script〉标记,也没有其他HTML标记。使用src属性有很多优点-把大型JavaScript代码块移出HTML文件,简化了 HTML文件;减少JavaSrcipt代码的重复;src属性的值可以是任意URL,因此Web效劳器的JS程序可使用另一个Web效劳器上JS文件中的代码。三、放置在事件处理程序中,如onclick等HTML属性值指定。在HTML文件在浏览器中加载时,脚本中的JS代码只执行一次,仅使用这种静态脚本程序是不能动态地响应用户的。很多动态性的程序都定义了事件处理程序,当某个事件发生时〔如用户点击了一个按钮),浏览器会自动调用响应事件处理程序。举例如下:

<inputtype="button"value="subinit"onclick="doSoniething();"/>从例子中可以看到,onclick的属性值是字符串,其中包含一条或多条JS语句。假设有多条语句,须用分号隔开,也可以将这些语句写到一个函数里,然后调用此函数。当指定事件〔在这里是点击〕在这个按钮发生时,就执行这些JS代码。4.3.2网页分析流程是is文件本模块根据网页抓取模块获取的网贺,遍历此网页的每个节点,如果是script节点,如果是JavaScript类型,再分析是文件还是代码,假设是文件,通过请求获取此文件;假设是代码,直接将这些代码保存到本地文件。流程如下:HTML元素将js代码保存至临时文件获取js文件网页分析流程解析模块4.4.1JavaScript简介JavaScript语言已经开展几年了,Netscape公司发布了多个版本,微软公司也发布了与JavaScript语言相似的版本,名为JScript,另外,ECMA〖i5]S布了三

个版本的ECMA-262标准,对JavaScript语言进行标准化,命名为ECMAScript。JavaScript是一种轻型的、解释型的程序设计语言,具有面向对象能力。在句法构成上,JavaScript的核心与C、C++和Java相似,都具有诸如if语句、while循环和M运算符这样的结构。但是,JavaScript与这些语言的相似之处也仅限于句法上的类同。JavaScript是一种弱类型语言,变量不需要有一个明确的类型。把JavaScript解释器嵌入Web浏览器就形成了客户端JavaScript,这是迄今为止最普通的JavaScript变体。当人们提到JavaScript时,通常所指的是客户端JavaScript.客户端JavaScript将JavaScript解释器的脚本化能力与Web浏览器定义的文档对象模型〔DOM)结合在一起。这两种技术是以一种相互作用的方式结合在一起的,产生的效果也大于两局部能力之和,即客户端JavaScript使得可执行的内容散布在网络中的各个地方,它是新一代动态DHTML(DynamicHTML)文档的核心。这样一来,网页就不再是静态的HTML了,而是包含与用户进行交互、控制浏览器以及动态创立HTML内容的程序。通过网页分析模块得到了当前URL包含的所有JS代码和文件,接下来需要模拟浏览器的行为,按照JS代码加载的顺序执行这些代码,解释器的总体结构如图4-2所示,解释器系统分为前端和后端两局部•前端系统首先进行词法分析,然后进行语法分析,语法分析的结果产生一棵语法树,并根据语法树产生相应的中间代码。中间代码存入代码段中,以供后端系统解释执行。对后端系统而言,前端系统产生的中间代码即为所需的目标码,对其进行解释执行并输出结果即可。符号表模块那么贯穿于整个系统的生存期,前端系统主要对符号表模块进行查找、添加、删除操作,后端系统那么对符号表模块进行查找操作。图中各模块功能简要介绍如下:(1)词法分析:以嵌入在html文本中的JavaScript脚本程序作为输入形成单词链表,以便语法分析。⑵语法分析:以单词链表为输入,依照JavaScript语言的语法规那么形成中间数据结沟。执行控制器:以中间代码为输入负责对语句解释执行的控制。语句解释器:完成各类型控制语句的解释执行,该模块可能会调用解释

执行器而形成递归调用。前端系统产生的中间代码采用自定义的字节码,好处是字节码与平台无关,在不同的平台上使用不同的解释器对它进行解释执行,即可实现在字节码级与各平台兼容,而不必对字节码做任何修改。字节码指令由操作码和操作数组成。操作码为定长(1个字节),而操作数紧跟其后,可以为0个或多个字节。因而后端系统看到的中间代码实际是一些字节流,而代码段那么是存放字节码的字节数组。符号表模块包括一张符号表和张常量表。符号表记录各种变量信息,常量表记录常量信息以及对象的属性名信息。符号表和常量表的结构均采用Hash链表的结构,以提髙查找速度。符号表记录的主要信息有:变量名及其对应的Hash值、变量的类型等。如果变量的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论