网络爬虫基本原理范例6篇

网络爬虫基本原理

网络爬虫基本原理范文1

关键词:网络爬虫;互联网;数据结构

中图分类号:TP391.3

经过最近这些年的发展,搜索引擎已经改变了信息的获取甚至存储方式。用户不再需要将大量信息存储在终端机上,而是在需要信息的时候直接运用搜索引擎来获取,这样不仅节约了存储空间,也能获取到最新、最准确的数据,从某种意义上来说,由于有了搜索引擎,我们便可以把一些记忆任务交给机器来完成。搜索引擎有运行在大规模云计算的通用搜索引擎,也有一些行业搜索以及网站搜索。通用搜索引擎是大颚,每一只都有自己独立的领地。行业搜索是领头雁,是各行业的旗帜。而网站搜索则像一只只小麻雀,虽小却五脏俱全。无论是哪一种搜索引擎都包含采集数据的爬虫和索引库的管理以及搜索页面展现等部分,而网络爬虫则是开发一个搜索引擎最常用的技术。

网络爬虫(Crawler)的主要作用是获取互联网上的信息。例如,一个医药采购人员需要找到药品行业的有竞争力的厂家和价格等信息;金融公司员工需要找到有潜力的投资公司;媒体行业人士需要找到能够迅速变热的话题;这些都可以使用网络爬虫来抓取实现;网络爬虫从互联网上源源不断的抓取海量信息,搜索引擎结果中的信息都是来源于此。所以,如果我们把互联网比喻成一张覆盖全球的蜘蛛网,那么抓取程序就是在网上爬来爬去的蜘蛛。

网络爬虫需要实现的基本功能包括下载网页以及对URL地址的遍历。为了高效的快速遍历网站还需要应用专门的数据结构来优化。网络爬虫很消耗宽带资源,设计时需要仔细的考虑如何节省网络宽带资源。下面就基于C#语言的网络爬虫而言,进行优化设计。

1 网络爬虫的原理

我们在浏览网页的时候,每一个网页都可以链接到其他网站,那么搜索信息也可以从一个网站开始,跟踪所有网页上的链接,然后就可能遍历整个互联网。

为了更快的抓取到想到的信息,网页抓取首先从一个已知的URL地址列表开始遍历,在搜索引擎中,爬虫程序从一系列子链接中把这些初始网页中的URL提取出来,放入URL工作队列(Todo队列),然后开始遍历所有工作队列中的URL,下载网页并把其中新发现的URL再次放入工作队列,为了判断一个URL是否已经遍历过,需要把所有遍历过的URL放入历史表(Visited表)。遍历的流程如下图:

在抓取的过程中,将要访问的链接和已经访问过的链接分别存储在list中,爬虫从种子站点开始判断,如果有需要遍历的链接,则逐个遍历,在访问了某个链接后,便将该链接从Todo列表中删除,同时增加到Visited列队的尾部,最后再通过正则表达式提取链接。

服务器的名称通过DNS服务器转换成对应的IP地址,即通过DNS取得该URL域名的IP地址,需要选择一个好的DNS服务器,在Windows下DNS解析的问题可以用nslookup命令来解析,如:

C:\Users\Administrator>

服务器:

Address:202.108.53.181

应答:

名称:

Address:211.189.214.127

2 网络爬虫的架构

一般网络爬虫软件都由以下几个模块组成:

2.1 保存种子和爬取出来的URL的数据结构

农民会把有生长潜力的农作物籽用作下一季的种子,而技术人员则把一些活跃的网页用作种子URL,例如网站的首页或者列表页,因为在这些页面经常会发现新的链接。通常爬虫都是从一系列的种子URL开始爬取,一般从数据库表或者配置文件中读取这些种子URL。而保存待抓取的URL的数据结构却会因为系统的规模、功能不同有可能采取不同的策略。一个比较小的示例爬虫程序,可能就使用内存中的一个队列,或者是优先级队列进行存储。一个中等规模的爬虫程序,可能使用内存数据库来存储,如果内存不足还可以序列化到磁盘上。但是真正大规模的爬虫系统,是通过服务器集群来存储已经爬取出来的URL,并且还会在存储URL的表中附带一些其他信息,比如说pagerank值,供以后的计算使用。

2.2 保存已经抓取过的URL的数据结构

已经抓取过的URL的规模和待抓取的URL的规模是一个相当的量级。正如我们前面介绍的TODO和Visited,但是,它们唯一的不同是Visited表会经常被查询,以便确定发现的URL是否已经处理过。因此,如果Visited表数据结构是一个内存数据结构的话,可以采用散列表来存储,如果保存在数据库中的话,可以对URL列建立索引。

2.3 页面获取模块

当从种子URL队列或者抓取出来的URL队列中获得URL后,便要根据这个URL来获得当前页面的内容,获得的方法非常简单,就是普通的I/O操作。在这个模块中,仅仅是把URL所指的内容按照二进制的格式读出来,而不对内容做任何处理。

2.4 提取已经获取的网页的内容中的有效信息

从页面获取模块的结果是一个表示HTML源代码的字符串。从这个字符串中抽取各种相关的内容,是爬虫软件的目的。因此这个模块就显得非常重要。

通常在一个网页中,除了包含有文本内容还有图片,超链接等等。对于文本内容,首先把HTML源代码的字符串保存成HTML文件。关于超链接提取,可以根据HTML语法,使用正则表达式来提取,并且把提取的超链接假如到TODO表中,也可以使用专门的HTML文档解析工具。在网页中,超链接不光指向HTML页面,还会指向各种文件,对于除了HTML页面的超链接之外,其他内容的链接不能放入TODO表中,而要直接下载。因此,在这个模块中,还必须包含提取图片,JavaScript,PDF,DOC等内容的部分。在提取过程中,还要针对HTTP协议,来处理返回的状态码。

2.5 负责连接前处理模块,负责连接后处理模块和过滤器模块

如果只抓取某个网站的网页,则可以对URL按域名过滤。

2.6 多线程模块

爬虫主要消耗三种资源:网络宽带,中央处理器和磁盘。三者中任何一者都有可能成为瓶颈,其中网络快带一般是租用,价格相对昂贵。为了增加爬虫效率,最直接的方法就是使用多线程的方式进行处理。在爬虫系统中,将要处理的URL队列往往是唯一的,多个线程顺序地从队列中取得URL,之后各自进行处理(处理阶段是并发进行)。通常可以利用线程池来管理线程。

2.7 分布式处理

分布式计算是当今计算技术的主流。这项技术也可以同时用在网络爬虫上面。把抓取任务分不到不同的节点分布,主要是为了可扩展性,也可以使用物理分布的爬虫系统,让每个爬虫节点抓取靠近它的网站。

3 网络爬虫遍历与实现

网络爬虫的抓取原理是从互联网中的一个网页开始,根据网页中的超级链接逐个抓取网页中链接的其他网页。而网页通过超级链接互相链接,组成了一个庞大的无形的网,信息量十分庞大,网络爬虫不可能抓取所有的网页信息,所以使用网络爬虫抓取网页要遵循一定的原则,主要是广度优先原则和最佳优先原则。

广度优先是网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页继续抓取在此网页中链接的所有网页。这是最常见的方式,这个方法也可以让网络爬虫并行处理,提高它的抓取速度。

最佳优先爬虫策略则又被称为页面选择问题,通常在有限宽带条件下,尽可能的照顾到重要性高的网页是一个很重要的考虑原则。实现最优先爬虫最简单的方式可以使用优先级队列(PriorityQueue)来实现TODO表,这样,每次选出来扩展的URL就是具有最高重要性的网页。在队列中,先进入的元素先出,但是在优先队列中,优先级高的元素先出队列。

例,假设有如下重要关系的节点D>B>C>A>E>F>I>H,则整个遍历过程如表所示。

如果一个新的连接请求进来的时候,连接池管理器检查连接池中是否包含任何没用的连接,如果有的话,则返回一个。如果连接池中所有的连接都忙并且最大的连接池数量没有达到,就创建新的连接并且增加到连接池。当连接池中在用的连接达到最大值,所有的新连接请求进入队列,知道一个连接可用或者请求超时。程序一开始初始化需创建若干数量的长链接。给它们设置一个标识位,这个标识位表示该链接是否空闲的状态。如果需要发送数据的时候,系统给它分配一个当前空闲的链接。同时,将得到的链接设置为忙,当数据发送完毕后,把链接标识位设置为闲,让系统可以分配给下一个用户,这样使得两种方式的优点都充分的发挥出来。

4 结束语

搜索引擎的使用,使人们能够更加方便快捷地从网络上获取想要的信息。随着互联网和计算机技术的不断发展,传统的通用搜索引擎已经很难满足人们的信息检索要求,而主题搜索引擎的产生为信息检索服务水平的提高带来了福音。而作为搜索引擎的基础部分,网络爬虫对于信息检索服务的实现起着举足轻重的作用。因而只有根据搜索引擎的发展和创新不断优化网络爬虫的设计,才能提高网络爬虫的性能以及主题搜索引擎的应能。

参考文献:

[1]刘伟.搜索引擎中网络爬虫的设计与实现[J].科技传播,2011,20.

[2]徐远超,刘江华,刘丽珍.基于Web的网络爬虫的设计与实现[J].微计算机信息,2007,21.

网络爬虫基本原理范文2

[关键词]网络爬虫;搜索引擎;提高效率

中图分类号:TP393 文献标识码:A 文章编号:1009-914X(2015)05-0226-01

1 引言

随着互联网的高速发展,网络上的信息量迅速增加,特别是近些年来,网络信息呈爆发式增长。有时候我们访问网页时,网页上出现太多的不必要的信息,比如各种垃圾广告和植入信息。

在互联网的发展中,用户体验占据了至关重要的作用。正是由于每天都有巨大的信息量通过互联网传递给我们,所以我们要通过工具对其进行筛选,对于我们所需要的信息,则可以借助关键字来获取我们所想要的信息。

从上个世纪九十年代开始,人们就已经开展和研究网络爬虫。爬虫这项技术在现在已经非常成熟了,同时它也是搜索引擎的重要组成成分。Nutch,Larbin,Heritrix都是网络上很有名的开源爬虫。对于网络爬虫来说,网页搜索策略和网页分析策略都是很重要的部分。

现在对于大众来说,比较熟悉的爬虫引擎有雅虎、谷歌、百度等。这些搜索引擎和本文所要研究的不一样。但是大概的原理在一定程度上是相似的。

至可以说是垃圾信息,页面分析的爬虫技术就是基于此产生的,用来获取更有价值的信息。

2 网页爬虫系统的分析

2.1 系统功能需求

网页爬虫系统的设计与实现需要考虑好系统的功能健全还要考虑好系统的的扩展和系统的性能,为了方便以后对系统进行重构,系统设计需要按照以下的规则:

(1)系统为多线程机制

网络爬虫支持多线程同时进行操作,爬虫在局域网内并行运行,从而使系统的整体运行的效率得到提高,并且在最短的时间获取所需的信心。

(2)系统的功能完善

2.2 系统功能设计

网页爬虫要实现更加人性化,就要从指定的URL地址抓取到特定的页面内容,接着解析出页面中的链接地址,然后再去访问这些URL,重复进行,直到得到的结果满意,爬虫存在的目的就在于此,根据这个宗旨。

根据需求,需要实现以下几个基本功能模块:

(1)网页爬取模块:主要实现的是通过从URL管理传获取 URL,进行地址析,通过 HTTP 协议访问URL指定的页面,同时接收服务器端传送的页面信息。

(2)搜索策略模块:主要实现的是管理爬取网页所选取的搜索策略,宽度优先搜索算法是本系统采用的算法,对搜索算法进行改进并提高搜索效率。

(3)解析页面模块:主要是实现提取的页面内容,提取的内容有Css 脚本,图片,视频,文本,链接,Js,等其他文件。

3 系统主要功能模块设计

3.1 网页爬取模块设计

(1)网页爬取过程

系统开始就需要实现网页的爬取,通过所要抓取的内容以及给定指定的URL网址,这个模块也是系统的核心,网络中相关的网页需要被爬虫去收集。网页信息要爬取再保存到本地。本系统设计的爬虫是通过多线程分配并行进行调度的,URL地址先从URL队列中获得,再从Web服务器发送数据请求接收Web服务器返回的数据;返回存储到本地的网页数据进行格式化。

对于以上的流程,为了避免耗费不必要的时间以及无限制等待响应缓慢的服务器或规模庞大的网页,我们必须必须需要注意的是HTTP向Web服务器发送请求后,等待机制需要被设定超时。响应包的头部会被客户端解析出来,获得重定向信息和状态编码。循环的重定向一个循环的链是否存在可以通过维护一个URL哈希表来检测的,如阻止进一步循环的相同的URL在链中出现的话则。必要的错误检测和异常处理在页面获取过程中是非常重要的,因为程序代码必须能处理服务器的各种响应。

(2)HTTP协议

对于HTTP协议需要了解,Java中有个HTTPClient组件与url进行连接。

3.2 搜索策略模块设计

启动了爬去网页的程序后,在Internet中开始搜索网页,采用宽度优先算法。这种搜索算法就是数据结构中的宽度优先算法,思路是这样的:最先获取指定的URL的网页,然后提取该网页中的所有URL,在一个个的去获取URL地址,如何没有的话,就结束这个遍历,同一个层次的网页上的URL链接遍历完了后,就继续下一层。就这样一层层的进行处理,不过这样有可能导致一个无穷的遍历,如果是一个环状图的话就可能变成一个死循环了。不过它的好处就是能计算出网络中两个节点的最短路径,所以它经常被作为实现爬虫的最佳策略,又因为这个算法十分的容易实现,所以我们采用该算法来实现。

3.3 页面分析模块设计

通过爬虫搜索指定URL的内容进行分析,搜索下来的网页,进行URL处理,网页正文,Xml,Javascipt脚本,Css文件提取,通过指定相应的规则来进行分析。

抓取网页的源码,然后去判断网页的编码,否则很大程度上会获取到乱码。首先看看的Http头的Charset,一般来书,这个会比较准,然后再看Http的头里的Charset和网页的Meta里声明的Charset是否一致,所以人工加了一次判断,若不同的话就到内存流里使用网页的编码去重新读取一次源代码。

3.4 网页管理模块设计

(1)网页保存

网页信息的保存,通过缓存空间保存网页信息的系统,可以为各个页面设置独立的文件用来保存网页的基本信息,各个文件的名字可以按照页面中的URL层次来进行划分,本地缓存文件目录的建立,保存到本地数据库将抓取到的网页,与此同时还需要抓取页面的网页标题、URL地址、网页爬取的时间、网页大小、网页类型、保存位置等信息,保存到数据库中。

(2)页面本地化

通过中间的过滤服务器就得到了比较分析满足我们要的 Web 页面,但是在一定程度上我们的要求还是没有达到,我们需要去做的是对 Web 页面的内容进行分析和提取,大致需要被提取的内容有:

a 页面文本内容

b 页面的网页链接地址

c 获取网页中的 css,javascript 脚本

d 获取网页中的图片文件

e 获取网页中的多媒体文件

最开始我们通过爬虫获取得到的网页html文件,然后将图片,多媒体,css,js都抓取下来,接着对应现在的内容链接进行本地化处理,最后再本地页面中的链接中进行修改了,修改后获取的内容通过滤服务器来进行过滤。最后呈现在我们眼前的就是一个和原来一样的本地化网页了。

参考文献

[1] 刘淑梅,夏亮,许南山.主题搜索引擎网络爬虫的搜索策略.计算机应用[M].2010,19(3):49-52.

网络爬虫基本原理范文3

关键词:爬虫技术;互联网;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)If m没有在open和closed集合中出现过Then add(m, open);

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

8) If m在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=fetch link(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] Otis Gospodnetic,Erik Hatcher.Lucene IN ACTION[M]. Manning Publication Co,2006.

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

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

网络爬虫基本原理范文4

关键词:动态网页; 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爬虫设计方案及实现

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

2.1 JavaScript引擎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.2 AJAX爬虫架构设计

爬虫系统分为两部分,第一部分是预处理阶段,这个阶段实现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.1 Server configuration listCPU2 * AMD Athlon(tm)ⅡX2 215 Processor 2.70GHz网卡100Mbps内存2.00GB操作系统Windows 7JAVA环境JRE 1.6.0_24

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

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

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.Indexing AJAX Web Applications. Zurich:Swiss Federal Institute of Technology Zurich,2007.

[5]MATTERR.AJAXCrawl:Making AJAX Applications Searchable. Zurich:Swiss Federal Institute of Technology Zurich,2008.

[6]MOZILLA.Rhino:JavaScript for Java.[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.Crawling AJAX by inferring user interface state changes[C]//Proceedings of the 8th International Conferenceon Web Engineering, YorktownHeights,NJ.Washington,DC,USA:IEEE Computer Society,2008:122-134.

网络爬虫基本原理范文5

P2P技术因其可为用户提供便捷、高效的文件检索和下载功能而进入了高速发展和通用流行的时代。而作为P2P文件共享系统之一的BitTorrent(简称BT)[1]也随之吸引了更多人的关注和兴趣,进而也成为学术界的研究热点。大多数P2P系统均提供内容检索机制,但BT对此支持却较为有限。通常,用户需要从多个BT站点查找相应的种子文件,再进行文件下载,这一过程极大地降低了基于内容的资源检索效率。此外,BT搜索引擎仍然存在搜索结果涵盖范围小、下载链接易失效和文件内容正确性与合法性难以得到有效保障等诸多问题。 

面向BT种子文件获取的网络爬虫的目标就是快速、全面、高效地提取互联网中的BT种子,但传统的网络爬虫却难以达到这些目标。为此,本文提出了基于Hash的去重机制,给出了爬虫自动登录的实现方法,设计了AJAX页面解析引擎,提出批量抓取和增量抓取相结合的数据抓取机制、历史数据和更新数据相结合的数据存储机制。通过设计并实现一个基于爬虫方式的BT种子文件获取系统验证了这几种方法能使系统整体性能平均提高30%~50%。 

1 相关工作 

面向BitTorrent种子文件获取的爬虫与其他聚焦爬虫[2]具有相同原理,即从一个或若干个URL开始,下载对应网页,从中解析得到URL和相关信息,再根据一定的网页分析算法过滤掉与主题无关的链接,随后依照一定的URL抓取策略生成新的待抓取队列,重复该过程,直到满足停止条件为止。目前,国内、外主要研究工作撷选如下: 

文献[3]对基于Java的BitTorrent搜索引擎进行了综述,在对比不同编程语言实现的优缺点后,给出了一个Java语言实现的简单的BT搜索引擎,但性能并不高。文献[4]实现的Torrent Crawler用来抓取Swarm网中Peer信息,而不是抓取种子文件。国内清华大学研究了一种基于P2P的BitTorrent关键词检索系统[5],提出了基于对等网络的BT关键词检索系统,但其重点是对获取到的种子进行解析,并建立索引以构建对用户操作便利的检索系统,而没有考虑能否全面快速地获取种子。文献[6]设计了一种面向P2P搜索的可定制聚焦网络爬虫,以BT种子文件为获取目标,具有资源消耗小、数据采集准确性高、可控性强的特点,但是文中却未涉及种子获取全面性的指标亦能有所提高的实现方法。学术界对主题爬虫或者聚焦爬虫的收获率和新鲜度虽已启动了许多研究[7][8],但还尚未将这些研究应用于BT种子文件获取。 

基于对以上文献的研读和分析可知,面向BT种子文件的爬虫获取还需要解决一些问题: 

(1)抓取目标的定义和描述。BT种子爬虫获取的目标是BT种子文件,如何从抓取的大量网页中识别种子文件是爬虫面临攻关的首要问题。

(2)初始URL的选择。BT种子可能存在于任一网页中,但却主要存在于BT站点,可以选择该站点主页作为初始URL,而在起始URL偏离主题时,爬虫完全能够自动调整。 

(3)URL抓取队列选择。根据选定策略计算URL或网页与种子下载的相关度并进行有关排序,优先抓取种子链接以确保种子的新鲜度。 

(4)网页相关度的判断。鉴别得到与获取BT种子有关的网页(如索引页面和下载页面等),并过滤去掉与获取无关的页面(如广告、新闻和讨论等),这是提高系统效率和准确度的关键。 

(5)网站限制的突破。国内主要以论坛的形式BT种子,但却因增加了登录、回复等验证机制而使现有爬虫很难获种子文件;而国内、外的很多BT站点采用的都是AJAX技术,传统爬虫基本无法抓取;另外,还有部分站点为防盗链和爬虫加入了验证码机制,这些限制对BT种子爬虫能否获得较高的覆盖率形成了严峻的挑战。 

(6)种子文件去重。网络中有大量种子,同一个种子文件也可能对应多重下载链接,如何对种子文件实现去重以减少爬虫存储开销也是值得考虑的问题。 

(7)海量数据抓取。互联网中有大量的站点和网页,即使只对BT种子站点进行爬取,数据量也是巨大的,需要分布式并行抓取以提高系统性能。 

与此同时,一些网站的下载地址是迅雷等下载工具的专用地址,经过编码处理,爬虫需对其解码才能够下载到种子;另外,BT种子爬虫也应具备发现新BT下载站点或下载资源的能力。第3期 苏马婧,等:面向BitTorrent种子文件获取的网络爬虫技术研究 智能计算机与应用 第3卷 

本文从提高BT种子爬虫获取效率、提升覆盖率以及降低种子获取延时的角度出发,对以上问题的相关解决技术进行了完整研究和系统论述。 

2 提高获取效率的技术 

为提高获取效率,本文从三个方面切入、考虑:提高种子和网页的处理速度、减少无关页面和重复页面的抓取、并行抓取以提高性能,具体实现为:种子通信文件识别、基于正则表达式规则的URL过滤技术和基于Hash的去重机制。详情见如下各节。 

2.1 种子通信文件识别 

通常情况下,识别种子文件可根据文件扩展名或对种子进行Bencode[9]解码,但前者会造成遗漏或误判,而后者的效率却不高。通过对20个热门的BT站点爬到的780 553个页面进行分析,总结得到如下特点: 

(1)从网站下载文件时,服务器HTTP响应的Content-Type头如果为application/x-bittorrent,就一定是种子文件,也有一些种子下载时,其Content-Type则为text/plain或application/octet-stream。 

(2)正确的种子文件通常是以“d8:announce”开头,且包含“announce”字段和“info”字段。 

基于上述特征,就可以从大量网页中快速、准确地识别种子文件。对Content-Type的判断可以在网页抓取时进行,对内容解析可以在网页分析时进行,两者并行处理可以提高爬虫效率。在BT@China联盟链接的43个站点上进行测试,共抓取131 829个种子文件,漏抓0个,误抓12个,识别率可达131 817/131 829=99.99%。 

2.2 基于正则表达式规则的URL过滤技术 

网站包含大量与种子获取无关的链接,如广告或说明信息等,需要将其滤掉以提高效率。对网页过滤和主题相关度的评价研究也已经积累了一定成果[10-11]。对国内外近百个BT站点的组织结构通过分析可以发现,网页链接结构如图 1所示。 

图 1 BT站点页面间链接关系 

Fig.1 Relationship of hyperlinks in BT publish sites 这种结构关系体现为:同一站点相同类别的URL除Query部分外基本相同,可用一个或多个正则表达式来定义和说明。因此,可以通过URL匹配滤掉无关网页。将采集到的网页进行划分和聚类,抽取正则表达式,由这些正则表达式过滤规则来判定某网页是否需要抓取,称之为基于正则表达式规则的URL过滤技术。这些过滤规则不但要有一定的泛化能力,根据已抓到的网页和种子的数量、状态,对过滤规则进行动态调整,并实时反馈给爬虫以引导后续抓取过程。本文对5Q地带(http://bt9.5qzone.net/)等20多个BT站点进行了测试,采用基于正则表达式规则的URL过滤技术可以减少30%~50%的无关网页抓取,抓取效率大为提高。 

2.3 基于Hash的去重机制 

同一个种子的下载链接可能存在于不同的页面中,爬虫重复下载这些链接会造成系统资源的浪费。其他因素如断电、系统故障等也可能造成爬虫抓取状态的丢失,重爬或者续爬是对已抓到的种子重复抓取或重复存储也会浪费磁盘空间。为此,需要对下载链接和种子文件去重。 

基于Hash的去重机制可分为基于Hash的内容去重和基于Hash的URL去重,如图 2所示。基于Hash的内容去重是对每一个抓到的种子和网页都计算对应的摘要,若当前摘要已经存在,则只更新状态,否则保存该摘要,并对种子进行存储,或者对页面进行解析。基于Hash的URL去重是在爬虫解析出网页中的URL后,根据一定的散列算法计算URL的Hash值,并检查该值在Crawldb(抓取数据库)中是否存在,如果存在,则更新状态使以后生成抓取队列时不包含该URL,否则,将URL及其Hash写入Crawldb。通常,散列算法可以选择MD5或者SHA-1等。 

网络爬虫基本原理范文6

【关键词】爬虫 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.1 XCrawler设计

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

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

3 AjaxCrawler的实现

3.1 Crawler的实现

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

3.1.1 WebCrawler

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

3.1.2 BBSCrawler

3.2.2 DOM Builder

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

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

4 结束语

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

参考文献

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

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

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

[4] Viktor Mayer-Sch?nberger,Big Data:A Revolution That Will Transform How We Live, Work,and Think[M].Hodder,2013.

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