网络爬虫基本原理范例(3篇)

daniel 0 2024-12-12

网络爬虫基本原理范文篇1

关键词:动态网页;AJAX;Web2.0;网络爬虫

中图分类号:TP393文献标识码:A文章编号:2095-2163(2013)06-0057-04

0引言

Web2.0是相对Web1.0的新一代互联网应用的统一名称。Web1.0的重要特征是用户通过使用浏览器获取静态的网络信息。Web2.0则侧重于用户与用户之间的交流和沟通,用户不仅作为网页内容的查看者,同时也是网页内容的创造者。所说的网页内容的创造者是指互联网上的所有用户不再只是互联网内容的读者,同时也成为了互联网内容的作者;不再仅是冲浪于互联网海洋之中,同时也是海洋波浪的制造者;在模式上由纯粹的“只读”变为“读写”进而发展成为“共同建设”;由简单被动地接收互联网信息转变为主动创造互联网信息,从而增加了互动,更加符合用户的使用习惯。

近年来,随着Web2.0的兴起,在Web开发中运用AJAX技术的网站越来越多,这些技术的应用带来了更好的用户体验、很多新概念和WebUI设计,同时,由于AJAX技术可以动态改变页面内容,改造了传统Web页面的结构,导致单纯抓取静态Web页面的网络爬虫抓取的内容少于页面呈现的内容,这些动态内容给网络爬虫的设计带来极大挑战,使得爬虫不能获取到网页页面所呈现的全部文本。

本文研究能够支持AJAX的网络爬虫的原理,实现一个支持AJAX且能够进行定制任务的网络爬虫,高效率地对网页信息进行采集。第1节介绍国内外对AJAX页面的抓取研究情况,第2节介绍支持AJAX的爬虫的设计及具体实现,第3节通过实验验证了支持AJAX的爬虫的可行性。

1相关工作

现阶段,主流的搜索引擎,例如:Yahoo!和Google等,都无法对AJAX动态网页建立索引,也就是说不能利用现有的搜索引擎来查询动态网页的内容。而能够支持AJAX的搜索引擎还处于研究阶段,罗兵使用基于协议的动态页面抓取方法,获取AJAX网页内包含的JavaScript代码片段,通过设计脚本语言解释器直接分析脚本代码,仿照浏览器功能顺序执行脚本文件,用来模拟页面的状态转换[1],肖卓磊在之后的研究中也采用了类似的处理方法[2];曾伟辉、李淼利用切片算法构造了程序层次模型,解决了有序执行JavaScript脚本的问题[3];Frey[4]和Matter[5]改进了开源的JavaScript解释器Rhino[6],用来实现状态转换和脚本执行。实现全部功能的脚本解释器较为困难,即便是已开发多年的Rhino项目,依旧有很多的脚本代码不能正常执行,于是,更多的研究人员将研究重点落定于嵌入式浏览器组件,运用组件来模拟AJAX页面的渲染并实现脚本的执行,以达到自动转换状态的目的;在国内,采用类似方法研究的是王映[7]和金晓鸥[8],研究对使用网络爬虫分析脚本语言的技术进行了一些研究,前者使用的是开源的JavaScript引擎SpiderMonkey,而后者利用的是Rhino。因其均解析了包含JavaScript脚本代码的动态页面,从页面中抓取了JavaScript代码,由此获得了网页上的URL,并实现了内容爬取。Frey和Matter扩展了Cobra工具集[9],完成了动态解析和加载HTML代码,然后在内部形成DOM结构树,并通过DOM树获取状态包含的内容。类似于状态转换问题,为了最大限度地利用现有的技术,多数的状态内容获得方式是采用嵌入浏览器组件作为运行AJAX容器,并使用浏览器的外部接口实现和DOM树的数据交互,由此而获得完整的内容[10-13]。

在控制转换方面,较为常用的方式是采用事件过滤机制,对已经过滤后的事件逐一进行触发。为了提高执行效率,Xia[12]和Duda[14]均提出让用户能够自定义过滤规则,也就是加入拒绝规则和接收规则,如此即使得只有在符合规则的集合里才能进行状态转换;Mesbah等采用面向领域的手工配置、HTML元素注解和全自动扫描三种方式来对状态转换进行控制[10];Matter则提出了一种启发式的爬行策略,尽量避免从不同路径进入相同的页面状态[5]。

2AJAXCrawler爬虫设计方案及实现

由于Web2.0的流行,使用AJAX技术的网站越来越多,本文采用了Rhino引擎对AJAX进行了支持。

2.1JavaScript引擎Rhino

Rhino采用Java语言实现的JavaScript脚本引擎。Rhino用在Java程序中,为最终用户提供脚本化能力。Rhino包含JavaScript编译器、JavaScript解析器、JavaScript调试等模块。下面即对脚本编译模块和脚本解释模块进行全面分析。

2.1.1脚本编译模块

编译器的输入是JavaScript代码,输出是JavaScript数据对象。JavaScript结构中包含了字节码、注释、string池、数据以及标识符。JavaScript中还包含Objects,函数等。其中,函数也是一段嵌套的JavaScript代码。编译器由以下三部分组成:随机逻辑(randomlogic)的词法扫描器,用来创建AST的递归下降分析器,tree‐walking代码生成器。编译过程是由函数Main.processSource()来完成的,将输入的字符串或者JavaScript代码转化成流文件进行编译。在编译过程中,所有的变量,符号以及命令等都由词法分析器进行解析,再利用内部特定的符号标识,放入对应的数据栈中,最后将得到的数据用树形结构返回,便于Rhino引擎编译。在少分号或者是可赋值表达式等情况下,用语义和词法的反馈(feedback)机制来消除歧义。编译器没有错误校正,因此,只要遇到错误,就立即停止。另外,编译器还在编译完成的script结构中加入sourcenotes信息,以便用户调用toSource()函数进行反编译时使用。

2.1.2脚本解释模块

类似大多数的JavaScript引擎,Rhino的interpreter是一个单线程的大型循环函数,该函数每次解释bytecode的一个指令。在这个大型函数中,采用的是switch语句,即根据所要执行的bytecode的不同,跳转到不同的执行代码段中。大多数情况下,如果一段JavaScript代码调用另一段JavaScript代码,则引擎只会使用JavaScript的栈空间,interpreter也是顺序执行的。但如果JavaScript代码调用了java代码,再由java代码调用JavaScript代码,就会引起interpreter的重入问题。需要一提的是,这个大型函数是可重入的。对于interpreter所需要的各种状态都是通过参数的形式在interpreter函数进入时完成传递的。绝大多数的状态都保存在数据结构Context中。因此,在Rhino里,所有的公共API接口以及大部分的函数接口中,第一位参数均是一个Context的指针。

2.2AJAX爬虫架构设计

爬虫系统分为两部分,第一部分是预处理阶段,这个阶段实现URL净化,并去除不必要抓取的URL,类似于过滤器的功能。第二部分是网页真正抓取的部分,由于网页下载比较耗时,为了充分利用资源,此处采用了多线程。抓取阶段获得网页,析出网页内部的链接,而后进行预处理。并不是每个网页内部的链接都是需要抓取的,网页内部的链接可能包含以前抓取过的重复URL,Robots协议禁止抓取的URl等。CleanURLs是经过净化后的URL库,里面存放的都是需要抓取的URL。爬虫的架构如图1所示。

2.3AJAX引擎设计

AJAX引擎提供对网页中AJAX的支持,能够对网页中的js代码进行解析、执行,由此得到网页动态内容。AJAX引擎架构如图2所示。

由图2中可见,AJAX引擎主要有三个组成部分。对AJAX页面的解析按照下面的顺序进行。

(1)Crawler通过HTTP请求,获取需要抓取的页面。此时的页面是一个含有AJAX代码的页面,其中没有真正的内容;

(2)DOMBuilder对页面进行分析,建立DOM树,提取出其中的JS代码,触发相应的事件;

(3)将AJAX代码送入JavaScript引擎执行,在执行的过程中,同时根据JS对象与HTML对象映射修改HTML对象;

(4)将执行结果重新组合生成新的页面内容,返回给Crawler。

3实验数据结果

实验基于Java平台,开发环境采用Eclipse,Java虚拟机版本为JDK1.6.0,Rhino版本为1.7R2,实现AJAXCrawler。本文主要对AJAXCrawler进行了吞吐量的测试,并与普通的爬虫进行下载速度的对比。

3.1吞吐量实验

吞吐量实验是测试AJAXCrawler数量以及每个AJAXCrawler启动线程数与下载速度的关系。若启动的AJAXCrawler或者每个AJAXCrawler中的线程数太少,则系统不能完全利用计算机的资源,反之则会因为带宽、数据竞争等而降低效率。测试机器为一台普通PC机,硬件配置以及软件配置如表1所示。

表1服务器配置表

Tab.1ServerconfigurationlistCPU2*AMDAthlon(tm)ⅡX2215Processor2.70GHz网卡100Mbps内存2.00GB操作系统Windows7JAVA环境JRE1.6.0_24

AJAXCrawler测试任务为天涯博客,通过改变AJAXCrawler以及每个AJAXCrawler内线程的数目,测得的数据如表2所示,绘制成折线图,如图3所示(单位:页面数/10分钟)。

由表2和图3可以看出,在当前的计算环境和网络环境下,当选取任务数为3,每个任务内有3个线程的时候,系统运行效率达到较优,平均每10分钟能够下载网页1679页。

3.2AJAXCrawler与普通爬虫比较实验

此实验以网易的评论为测试对象,分析AJAXCrawler的效率。由于普通爬虫无法抓取到动态内容,此处的量化指标不再以页面数/10分钟作为单位,而是选择Kb/second作为单位。测试结果如表3所示,绘制成折线图如图4所示。

由表3和图4可以看到,AJAXCrawler无论是几个任务并发执行,都相应地比普通的WebCrawler下载速度慢。除去实验环境偶然因素外,最主要的影响因素应该是AJAXCrawler对AJAX脚本的解析和DOM树的更新操作。因为AJAXCrawler在关闭掉动态页面支持时,速度跟普通WebCrawler相差不大。图4中的两条线几行,表明两种爬虫此时的加速比也相差不多。而AJAXCrawler的加速上升趋势已开始走缓,这就说明AJAXCrawler需要更多的资源。另外,若对比下载的页面数,两者相差了十余倍,而下载速度却相对不是很大,进一步说明了动态网页包含的内容丰富。

4结束语

本文设计的能够抓取支持AJAX动态网页的网络爬虫,在抓取动态网页方面,取得了良好的结果。与普通爬虫相比,AJAXCrawler的下载速度稍慢,主要是对AJAX脚本的解析和DOM树的更新会相对浪费时间。不过,下载的页面数与普通爬虫相比,数量却多出了十余倍,抓取的内容会比普通爬虫的内容要丰富很多。

参考文献:

[1]罗兵.支持AJAX的互联网搜索引擎爬虫设计与实现[D].杭州:浙江大学,2007.

[2]肖卓磊.基于AJAX技术的搜索引擎研究[D].武汉:武汉理工大学,2009.

[3]曾伟辉,李淼.基于JavaScript切片的AJAX框架网络爬虫技术研究[J].北京:计算机系统应用,2009,18(7):169-171.

[4]FREYG.IndexingAJAXWebApplications.Zurich:SwissFederalInstituteofTechnologyZurich,2007.

[5]MATTERR.AJAXCrawl:MakingAJAXApplicationsSearchable.Zurich:SwissFederalInstituteofTechnologyZurich,2008.

[6]MOZILLA.Rhino:JavaScriptforJava.[2009-03-22].

[7]http:///rhino/.

[8]王映,于满泉,李盛韬.JavaScript引擎在动态网页采集技术中的应用[J].计算机应用,2004,24(2):33-36.

[9]金晓鸥,钟宝燕,李翔.基于Rhino的JavaScript动态页面解析研究与实现[J].计算机技术与发展,2008,18(2).

[10]COBRA.JavaHTMLRenderer&Parser.[2009-01-19].

[11]http:///cobra.jsp.

[12]MESBAHA,BOZDAGE,VANDEURSENA.CrawlingAJAXbyinferringuserinterfacestatechanges[C]//Proceedingsofthe8thInternationalConferenceonWebEngineering,YorktownHeights,NJ.Washington,DC,USA:IEEEComputerSociety,2008:122-134.

网络爬虫基本原理范文

【关键词】爬虫ajax并行

1背景

自媒体时代,网络舆论管理、议题管理和危机管理变得十分困难,解决难题的关键是对网络用户身份的有效识别。目前,用户身份识别主要依赖人工检索结合技术提纯的方式,也就是通过在网络中检索用户分享的数据,从中查找身份信息之间的相关关系、身份特征信息,最后结合技术手段获取真实身份,简单来说就是先检索再发现最后收集的过程。优势是,随着用户分享带来的数据丰富性,可以挖掘的潜在相关关系越丰富。然而,缺陷也很明显,一是效率不够,对广泛互联网数据的搜索需要花费大量人力;二是缺少真实性评估,相关关系没有绝对,只有可能性,面对不对称的检索结果,真实性势必受到主观偏见的影响;三是时效性带来的数据丢失,无论是用户的主动删除还是资源平台的被动删除,缺少主动收集机制造成的数据丢失不可避免。

为了解决上述存在的缺陷同时让优势大放异彩,本文提出一种用于网络原型挖掘的AjaxCrawler系统,通过主动收集的方式对现有工作模式进行有效升级。

2设计目标和详细设计

网络原型挖掘的对象主要是提供用户数据交互的web、bbs站点,而此类站点为了提供更好的用户体验多在开发中采用AJAX技术,所以AjaxCrawler的设计重点是实现对支持AJAX技术的动态网页的有效挖掘。

2.1设计目标

设计主要考虑几方面因素:一是抓取质量,针对Web、Bbs采取不同的抓取策略,通过JavaScript解析器实现对AJAX动态页面完整抓取,同时支持JS代码中的DOM操作,以获取页面元素、修改页面元素的内容;二是抓取效率,针对网络延迟、站点限制等因素采取并行策略,使爬虫同时处理不同的URL,以提高网络带宽利用率,加快处理速度;三是抓取策略灵活性,能够设定采集范围、采集频度、采集时间和采集深度,以期能达到最好的特定信息采集效果。

2.2详细设计

系统采用四层结构。第一层Client节点是门户和命令入口,用户通过它进行任务下发、查看执行结果;第二层Master节点是唯一的控制器,连接Client和Crawler,进行任务的抽取和分发;第三层XCrawler节点由不同的Crawler组成,结构上便于扩展,同时,将Ajax模块独立出来以降低系统耦合性,便于针对非JS脚本页面添加其它引擎;第四层Depository节点是系统仓库,存储运行结果等信息,此讨论重点将不再提及。本系统的通信库基于MINA开发,系统各节点之间通信,只需要调用相应的API即可,不用关心通信细节。系统体系结构设计,如图1所示:

2.2.1XCrawler设计

XCrawler是具体执行任务的节点,分为WebCrawler、BBSCrawler,架构基本相同,仅抓取策略和方式有所区别。其架构如图2所示:

爬虫系统分为两部分,第一部分是预处理,负责净化URL,去除不必要抓取的URL,类似于过滤器。第二部分是网页抓取,由于网页下载比较耗时,为充分利用资源,采用多线程。抓取阶段获得网页,析出网页内部的链接,然后进行预处理,以净化可能包含有以前抓去过的重复URL、Robots协议禁止抓取的URL等。CleanURLs是净化后的URL库,存放需要抓取的URL。

2.2.2页面预处理

(1)页面去重为避免页面重复抓取,系统包含网页去重管理机制,建立了一个可维护的HASH表,记录已处理过的URL的MD5值。页面预处理通过判断任务URL的MD5值在HASH表中是否存在,来判断URL是否重复。

(2)HTTP协议控制和URL文件格式控制目前只支持HTTP协议,HTTP协议控制用来检测URL协议,如果不是HTTP协议直接抛弃;系统收集对象是包含用户身份信息的网页文本,一些多媒体格式,比如MP3,AVI和JPG等格式并不需要,URL文件格式控制用来过滤不支持的URL。

(3)Robots控制。遇到一个新网站时,首先会通过Robots文件管理模块获取该网站的robots.txt文件,然后根据robots.txt的文件规定控制URL的抓取。

2.2.3AjaxEngine设计

3AjaxCrawler的实现

3.1Crawler的实现

对于Internet上不同类型的网站,采用单一的抓取模式、抓取策略,显然不合适宜。如前文所述,本系统Crawler包括WebCrawler、BbsCrawler两种Crawler,以下逐一叙述。

3.1.1WebCrawler

对于最基本的Web内容,设置一定的抓取深度,配置广告等无关内容的过滤器,依照Web内容更新频度设定爬虫的更新频率,依照详细设计中的XCrawler的框架,实现较为简单,这里不再赘述。

3.1.2BBSCrawler

3.2.2DOMBuilder

DOMBuilder建立JS对象与HTML对象的映射,构造DOM树,触发事件等功能。本系统借助NokoHTML扫描HTML文本,建立DOM树。NekoHTML还能增补缺失的父元素、自动用结束标签关闭相应的元素及不匹配的内嵌元素标签。使用NekoHTML进行DOM树建立接口很简单,使用NekoHTML中DOMParser对网页进行解析即可。

Rhino在执行JS代码时,需要根据JS对象与HTML对象映射表修改DOM树中的元素内容。本系统中,借用了HtmlUnit建立的JS对象与HTML对象之间的映射关系。在HtmlUnit中,继承了W3C的DOM接口,同时实现了JS对象与HTML对象之间的映射。

4结束语

本文在分析了互联网身份管理的现状和优缺点后,根据大数据相关关系分析法的理念基础,提出一种通过爬虫技术对互联网交互式站点中开放数据进行主动收集,挖掘其中存在身份信息以及身份信息件存在的相关关系的工作方法,从而通过已知身份挖掘出可能尚未掌握的未知身份信息,同时针对现有交互式网站普遍采用Ajax技术模式详细设计实现了AjaxCrawler挖掘模型,是现有网络身份管理模式的升级和有力补充。最后,作者相信随着科技浪潮的发展,更多的管理困境将找到更好的解决方案。

参考文献

[1]马民虎.互联网信息内容安全管理教程[M].北京:中国人民公安大学出版社,2008.

[2]李学凯.面向多任务、多通道并行爬虫的技术研究[D].哈尔滨:哈尔滨工业大学,2009.

[3]曾伟辉,李淼.基于JavaScript切片的Ajax框架网络爬虫技术研究[J].计算机系统应用,2009.

[4]ViktorMayer-Sch?nberger,BigData:ARevolutionThatWillTransformHowWeLive,Work,andThink[M].Hodder,2013.

[5]罗兵.支持AJAX的互联网搜索引擎爬虫设计与实现[D].杭州:浙江大学,2007.

网络爬虫基本原理范文

关键词:爬虫技术;互联网;JAVA多线程;网页挖掘

中图分类号:TP393文献标识码:A文章编号:1009-3044(2016)15-0062-03

1引言

随着云时代的来临,大数据的发展也越来越成为一种潮流。大数据通常用来指公司创造的大量结构化和非机构化化数据,这些数据被获取并存放到关系型数据库,在分析数据时往往会花费大量的时间和精力。“大数据”在互联网领域是指:互联网公司在正常运行过程中会生成、累积用户行为的网络数据。这些数据的规模是非常庞大,甚至大到不能用G或T的计量单位来衡量。在大数据时代,爬虫技术成为获取网络数据的重要方式。

互联网金融发展过程中需要搜集大量的数据资源,这个过程非常关键,并且实施起来较为困难。金融数据的搜集,是通过计算机技术与金融领域相关知识的综合,将金融经济的发展与相关数据进行集中处理,能够为金融领域的各个方面如经济发展趋势、经融投资、风险分析等提供“数据平台”,真实的数据资源还可以推进金融经济的快速发展和金融理论的创新。当今互联网的快速发展,网络上也充满各种金融信息,并且更新速度快,这使互联网成为金融领域获取数据资源重要一大方式。例如Butler,Leone,Willenborg和Frank等公司都是利用互联网采集技术来抓取所需的数据资源。

2互联网金融数据抓取的特点

2.1互联网上金融方面的数据一般具有的特点

1)数据量大、种类繁多。对于一些规模较小且只需抓取一次的数据,一般复制粘贴或者手工记录即可,没有什么技术上的要求。但是,金融经济市场领域的数据一般规模巨大,例如需要获取某个结构一年的交易记录,数据量就是非常大的,而且数据资源往往来源于不同的机构或者不同的部门,想要准确地获取数据资源不是很容易。

2)可靠性、实时性。在研究金融理论或者做金融分析时,对数据的可靠性、实时性要求非常高。金融经济的发展模式瞬息万变,更新速度很快,为了及时的反映市场上经济发展状况,要求数据的来源具有实时性和可靠性。

3)金融经济领域的数据类型一般以文本和数值型为主,图片和视屏等多媒体类型的数据较少。

4)数据一般会从较官方的网站抓取。为了保证数据来源的可靠性和准确性,数据一般从较权威的机构获取,例如金融交易所、国家有关权威决策与信息部门和国内外各大互联网信息提供商。

5)抓取数据的目标网页主要有两种类型。第一类是URL固定但是信息实时更新的网页要定期访问并获取数据,例如一些网站的股票行情类数据;第二类是规模较大且近似网页中具有固定特征的数据。例如某些国家权威机关按时以某一固定格式各种数据报告。

我们可根据金融经济数据的这些特点,制定相应的方法与策略抓取数据资源。对于地址相对固定的网页,所面临的数据采集问题比较集中,不需要考虑各种技术因素的变化对采集的影响,我们可以更有针对性的收集数据,制定更高效、更合理的抓取策略。

2.2获取网页信息

目前主流的网站开发技术主要有php、net和java的Alexa等,虽然说开发的网页格式五花八门,但它们传输数据的原理都一样,都是通过超文本传输协议(HTTP协议)将数据资源传送到客户的。微软公司提供的可扩展标记语言(XML)服务集合中的组件MSXML(执行或开发xml所设计的程序)里面有个XMLHTTP浏览器对象。该对象的原理基于HTTP协议的,里面封装着很多方法和属性,这些方法和属性与网站信息双向交流有关。客户端调用XMLHTTP对象搜集网页信息的过程主要包括以下几个步骤:

①首先建立XMLHTTP对象;

②利用XMLHTTP对象里面的Open方法与服务端建立连接,制定网页的地址(URL)和命令的发送方式;

③通过XMLHTTP中的Send方法发送信息;

④等待服务端处理并返回结果。

数据的抓取在金融领域的研究中是一个关键环节。互联网中的数据具有规模庞大、实时性、准确性等特点,为金融经济的发展提供了重要的数据来源。通过爬虫技术抓取数据资源,可以高效的在互联网海量的数据中提取所需的数据资源。灵活而方便地定制抓取数据地方案,使抓取到的数据成为金融经济发展的可靠保证。

3爬虫技术的实现

爬虫技术的设计是搜索引擎实现的关键技术,爬虫算法的好坏直接关系到搜索引擎性能的优良。经过多方面研究表明,“最好优先算法”应用于多重搜索中效果较好,但是这个算法本身也存在缺陷,例如收敛速度过快致使搜索的数据不全面,“查全率”太低。基于这个问题,本文研究如何改进这种算法,并实现网络爬虫。

3.1网络爬虫的算法分析

爬虫在整个网络系统中自由搜索,能够自动识别URL,自动下载网页,并提取数据信息,存放到数据库中。整个过程都不需要人工的参与。当前主流的爬虫算法主要有广度优先算法、深度优先算法和最好优先算法等。传统的图算法主要应用在第一代web爬虫索引整个网络,该算法是以一个网页链接集作为核心,去递归的链接其他的网络页面,不关心网络中的数据内容,只追求在网络上最大的覆盖率,网页的个数越多越好。算法如图1所示。

3.1.1深度优先搜索算法

深度优先搜索算法(DFS)在研究爬虫技术早期使用较多,它的搜索目标是要到达结构的最外结点,即搜索到不包含超链接的HTML文件。在一个网页中,当一个链接被选择后,链接的HTML文件执行DFS算法,完整的沿着一条链接搜索,走到边缘节点为止(即不包含任何链接的HTML文件),然后返回上一个页面链接的但是未搜索过的页面,再沿着这个搜索到的页面执行DFS算法即可。直到所有连接到的页面被搜索完成,算法结束。DFS算法的优点是能根据一个HTML文件查找到其所链接的所有HTML文件,能查出这个网页在互联网中的链接结构。但是DFS算法也有很大的缺点,因为整个网络的结构是非常深的,各个网页之间的链接关系也很复杂,很有可能陷入其中就无法返回。对于图4-1中的结构,使用深度优先遍历算法的返回结果是:A-F-G;E-H-I;B;C;D。

3.1.2宽度优先搜索算法

广度优先(BFS),也叫宽度优先,在这里的定义就是层层爬行,沿着结构的宽度方向层层搜索。给定一个网页的URL时,首先搜索这个URL所链接的所有网页,遍历完这网页链接的所有网页之后,再遍历子网页所链接的所有网页,直至遍历完所有的网页为止,一般采用BFS策略来覆盖范围更广的网页。广度搜索相对于深度搜索,对数据抓取更容易控制些。对服务器的负载相应也明显减轻了许多,爬虫的分布式处理使得速度明显提高。而且BFS算法能够找到两个网页之间的最短路径,并且不会像DFS那样使程序陷入深层查找无法返回。缺点查找深层网页时效率较低。对于图4-1中的机构,BFS算法的访问顺序为A-B;C;D;F-G;E-H-I。

3.1.3最好优先搜索算法

最好优先搜索(Best-First)是宽度优先搜索的扩展,基本算法思想是将各个节点表按照据目标的距离排序,再以节点的估计距离为标准选择待扩展的节点。

搜索过程为:

1)先建立一个搜索图G,里面包含初始节点集合S,open=(S),closed=()表示空表;

2)若集合open为空,则查找失败,并退出程序;

3)n=first(open);remove(n,open);add(n,closed);

4)若n为目标结点,则查找成功,并可给出S到n的路径;

5)否则,扩展结点n,生成不是n的祖先的后继结点集M={m}把每个m作为n的后继结点加入G;

6)Ifm没有在open和closed集合中出现过Thenadd(m,open);

7)Ifm在open集合中有重复结点k,且g(m)

8)Ifm在closed集合中有重复结点k,且g(m)

①将closed集合中的结点k改为结点m(只需修改主链指针和f、g);

②按后继元素,修改k在open集合和closed集合中的后继元素f,g的值;

9)按f值,按从小到大的顺序对open表中的结点排序,并重新返回到2步。

这些算法虽然都有各自的优点,但是它们的综合性能都不是很优。本文对这些算法进行了测试,结果表明最好最优搜索算法在爬虫技术应用上性能最佳。所以重点对Best-First算法进行研究并发现,虽然算法查找网页的准确率很高,但是由于算法存在收敛速度过快的缺点,使得不能在较大规模的网络上全面查找数据,即“查全率”太低。如何设计程序,提高最好最优算法的“查全率”才是网络爬虫技术实现的关键问题。

3.2算法改进

对图2中的网络模型进行最佳优先算法的搜索,假设A1,A3,B1,B2,B3,B4,B5是相关的URL,A2是干扰页面,网络爬虫从A1开始查找。算法思想是:爬虫程序经过一定的计算,如果发现A2是不是查找目标,但是发现A1是要查找的网络页面,程序就会把A2的链接直接忽略掉,沿着A1的链接继续搜索。这样就会导致A3、B2、B3、B4、B5这些相关的页面被爬虫程序给忽略掉,从而大大降低了搜索效果,不能时爬虫全面搜索整个网络页面。

其中:A1、A3、B1、B2、B3、B4、B5是相关页面;

A2是干扰页面;

C0、C1、C2、C3、C4、C5、C6是访问路径。

本文提出的改进算法思想是,当查找到A2页面时,虽然这个页面与主题无关,但程序并不忽略这个链接,而是暂时保存起来,然后爬虫程序计算A2所链接的页面中是否存在需要用户需要查找的页面。算法设定一个参数f记录crawler在遇到干扰页面的链接时搜索的深度。只有当爬虫程序在搜索到f深度仍然没有发现所需要的页面,这时才会A2页面忽略掉。例如在上图中,如果爬虫经过c2、c3、c4、c5、c6这几条路径能够找到相关页面,就说明A2这个网页包含很多所需要的网页链接。根据这个思想,对最好优先搜索算了进行改进,以提高爬虫程序的“查全率”。改进算法利用了JAVA中的多线程机制,核心算法如下:

BF-BF(topic,starting-urls){

link_1=fetchlink(starting_url);

While(visited

doc=fetch(link_1);

if(score_r1>r1)

{enqueue_1(frontier,extract_links(doc),score_r1);}

else

{score_r2=link_score_r2(D,links);

if(score_r2>r2)

enqueue_1(frontier,extract_links(doc),score_r2);

else

enqueue_2(links);}}}

4结束语

本文阐述了爬虫技术在互联网中的应用,并以爬虫搜索方法为研究目标,通过Java多线程对其中的最好最全算法进行算法实现。随着硬件技术、信息技术和物联网技术的不断发展,未来必将会出现大规模基于网页信息攫取的算法设计,各种新型的网络应用协议也会不断问世,这些技术成果都将极大地促进各类异构网络的融合过程,进一步提高计算机通信网络的数据分析功能。

参考文献:

[1]OtisGospodnetic,ErikHatcher.LuceneINACTION[M].ManningPublicationCo,2006.

[2]袁津生,李群.搜索引擎基础教程[M].清华大学出版社,2010.

[3]刘兵.Web数据挖掘[M].余勇,等,译.北京:清华大学出版社,2009.

  • 下一篇:第二学期保健工作总结(收集4篇)
    上一篇:年幼小衔接个人工作计划(整理6篇)
    相关文章
    1. 绿色分析化学范例(3篇)

      绿色分析化学范文关键词:对比分析;绿色化学;应用研究对比分析是我们学习和研究的基本方法之一。对比分析教学法是指在教学过程中,将一些有某种联系和区别的教学内容放在一起进..

      daniel 0 2024-12-12 18:42:13

    2. 培养学生独立思考的能力范例(3篇)

      培养学生独立思考的能力范文篇1关键词:初中数学;教学;独立思考数学是古老的学科,是智者的思考方法,是探索世界的基础.数学的教学也许会枯燥无味,也许会生机勃勃,决定着的是教师的..

      daniel 0 2024-12-12 16:07:12

    3. 行为社会科学基本问题范例(3篇)

      行为社会科学基本问题范文篇1关键词主流宪法学非主流宪法学宪法问题学科建设学术竞争在中国宪法学界,越来越多的中青年学人关注并致力于宪法学分支学科的建设,这种倡导并实践..

      daniel 0 2024-12-12 13:32:12

    4. 多媒体教学案例分析范例(3篇)

      多媒体教学案例分析范文篇1关键词:案例教学法;教学改革;计算机网络与多媒体计算机网络与多媒体技术是当前迅速发展的信息化关键技术,是反映大学计算机基础课程体系三个层次中的..

      daniel 0 2024-12-12 10:57:12

    5. 主要审计方法范例(3篇)

      主要审计方法范文一、我国国家审计的基本特点(一)国家审计的独立性强一是组织上的独立性。审计机构是单独设置的,不隶属于其他任何部门或业务机构。审计署受国务院总理领导,地..

      daniel 0 2024-12-12 08:22:12

    6. 线上活动方案策划范例(3篇)

      线上活动方案策划范文文章标题:酒店策划部启动方案阳光卡策划部启动方案一、架构:架构鉴于当前策划部的工作,需要再配备文案策划一名。以完善策划队伍。要求:具有较好的文学功..

      daniel 0 2024-12-12 05:47:12

    7. 主要工作汇报范例(3篇)

      主要工作汇报范文篇1(一)切实强化责任,全面落实民政工作。一是全面从严治党。组织全体党员上党课5次,开展8次“讲习所”活动,党组书记、局长多次带头宣讲省厅组织的贯彻新时代中..

      daniel 0 2024-12-12 03:12:13

    8. 主要事迹材料范例(3篇)

      主要事迹材料范文程昌文安图森林公安局王朝彪八家子森林公安局赵宏君大兴沟森林公安局刘国庆大兴沟森林公安局刘国庆现为大兴沟森林公安局交警大队长。刘国庆同志把"视人民..

      daniel 0 2024-12-11 21:17:13