爬虫技术

2024-09-01

爬虫技术(共11篇)

爬虫技术 篇1

网络爬虫(Web Crawler),又称为网络蜘蛛(Web Spider)或Web信息采集器,是一个自动下载网页的计算机程序或自动化脚本,是搜索引擎的重要组成部分。网络爬虫通常从一个称为种子集的URL集合开始运行,它首先将这些URL全部放入到一个有序的待爬行队列里,按照一定的顺序从中取出URL并下载所指向的页面,分析页面内容,提取新的URL并存入待爬行URL队列中,如此重复上面的过程,直到URL队列为空或满足某个爬行终止条件,从而遍历Web[1]。该过程称为网络爬行(Web Crawling)。

1 网络爬虫面临的问题

截止到2007年底,Internet上网页数量超出160亿个,研究表明接近30%的页面是重复的;动态页面的存在:客户端、服务器端脚本语言的应用使得指向相同Web信息的URL数量呈指数级增长。上述特征使得网络爬虫面临一定的困难,主要体现在Web信息的巨大容量使得爬虫在给定时间内只能下载少量网页。Lawrence和Giles的研究[2]表明没有哪个搜索引擎能够索引超出16%的Internet上Web页面,即使能够提取全部页面,也没有足够的空间来存储。

为提高爬行效率,爬虫需要在单位时间内尽可能多的获取高质量页面,是它面临的难题之一。当前有五种表示页面质量高低的方式[1]:Similarity(页面与爬行主题之间的相似度)、Backlink(页面在Web图中的入度大小)、Page Rank(指向它的所有页面平均权值之和)、Forwardlink(页面在Web图中的出度大小)、Location(页面的信息位置);Parallel(并行性问题)[3]。为了提高爬行速度,网络通常会采取并行爬行的工作方式,随之引入了新的问题:重复性(并行运行的爬虫或爬行线程同时运行时增加了重复页面)、质量问题(并行运行时,每个爬虫或爬行线程只能获取部分页面,导致页面质量下降)、通信带宽代价(并行运行时,各个爬虫或爬行线程之间不可避免要进行一些通信)。并行运行时,网络爬虫通常采用三种方式:独立方式(各个爬虫独立爬行页面,互不通信)、动态分配方式(由一个中央协调器动态协调分配URL给各个爬虫)、静态分配方式(URL事先划分给各个爬虫)。

2 网络爬虫的分类

网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。

2.1 通用网络爬虫

通用网络爬虫[3]又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子URL扩充到整个Web,主要为门户站点搜索引擎和大型Web服务提供商采集数据。由于商业原因,它们的技术细节很少公布出来。这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。

通用网络爬虫的结构大致可以分为页面爬行模块、页面分析模块、链接过滤模块、页面数据库、URL队列、初始URL集合几个部分,其体系结构如图1所示[4]。

为提高工作效率,通用网络爬虫会采取一定的爬行策略。常用的爬行策略有[5]:深度优先策略、广度优先策略。

1)深度优先策略:其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。当所有链接遍历完后,爬行任务结束。这种策略比较适合垂直搜索或站内搜索,但爬行页面内容层次较深的站点时会造成资源的巨大浪费;

2)广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,实现方便,无需存储大量中间节点,不足之处在于需较长时间才能爬行到目录层次较深的页面。

典型的通用爬虫有Google Crawler、Mercator。Google Crawler[6]是一个分布式的基于整个Web的爬虫,采用异步I/O而不是多线程来实现并行化。它有一个专门的URL Server进程负责为多个爬虫节点维护URL队列。Google Crawler还使用了许多算法优化系统性能,最著名的就是Page Rank算法。

2.2 聚焦网络爬虫

聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫[8]。和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求[3]。

聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块,其系统结构图2所示[9]。

聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。

1)基于内容评价的爬行策略:De Bra[10]将文本相似度的计算方法引入到网络爬虫中,提出了Fish Search算法,它将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关,其局限性在于无法评价页面与主题相关度的高低。Herseovic[11]对Fish Search算法进行了改进,提出了Sharksearch算法,利用空间向量模型计算页面与主题的相关度大小;

2)基于链接结构评价的爬行策略:Web页面作为一种半结构化文档,包含很多结构信息,可用来评价链接重要性。Page Rank算法最初用于搜索引擎信息检索中对查询结果进行排序,也可用于评价链接重要性[12],具体做法就是每次选择Page Rank值较大页面中的链接来访问。另一个利用Web结构评价链接价值的方法是HITS方法[13],它通过计算每个已访问页面的Authority权重和Hub权重,并以此决定链接的访问顺序。

3)基于增强学习的爬行策略[14]:Rennie和Mc Callum将增强学习引入聚焦爬虫,利用贝叶斯分类器,根据整个网页文本和链接文本对超链接进行分类,为每个链接计算出重要性,从而决定链接的访问顺序;

4)基于语境图的爬行策略:Diligenti等人提出了一种通过建立语境图[15](Context Graphs)学习网页之间的相关度,训练一个机器学习系统,通过该系统可计算当前页面到相关Web页面的距离,距离越近的页面中的链接优先访问。

印度理工大学(IIT)和IBM研究中心的研究人员开发了一个典型的聚焦网络爬虫[8]。该爬虫对主题的定义既不是采用关键词也不是加权矢量,而是一组具有相同主题的网页。它包含两个重要模块:一个是分类器,用来计算所爬行的页面与主题的相关度,确定是否与主题相关;另一个是净化器,用来识别通过较少链接连接到大量相关页面的中心页面。

2.3 增量式网络爬虫

增量式网络爬虫(Incremental Web Crawler)[16]是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。

增量式网络爬虫的体系结构[16]如图3所示,它包含爬行模块、排序模块、更新模块、本地页面集、待爬行URL集以及本地页面URL集。

增量式爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地页面集中页面的质量。为实现第一个目标,增量式爬虫需要通过重新访问网页来更新本地页面集中页面内容,常用的方法有:

1)统一更新法[17]:爬虫以相同的频率访问所有网页,不考虑网页的改变频率;

2)个体更新法[17]:爬虫根据个体网页的改变频率来重新访问各页面;

3)基于分类的更新法[18]:爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页。

为实现第二个目标,增量式爬虫需要对网页的重要性排序,常用的策略有:广度优先策略[19]、Page Rank优先策略等。

IBM开发的Web Fountain[20]是一个功能强大的增量式网络爬虫,它采用一个优化模型控制爬行过程,并没有对页面变化过程做任何统计假设,而是采用一种自适应的方法根据先前爬行周期里爬行结果和网页实际变化速度对页面更新频率进行调整。

北京大学的天网增量爬行系统[21]旨在爬行国内Web,将网页分为变化网页和新网页两类,分别采用不同爬行策略。为缓解对大量网页变化历史维护导致的性能瓶颈,它根据网页变化时间局部性规律,在短时期内直接爬行多次变化的网页,为尽快获取新网页,它利用索引型网页跟踪新出现网页。

2.4 Deep Web爬虫

Web页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称Invisible Web Pages或Hidden Web)。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。Deep Web是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。例如那些用户注册后内容才可见的网页就属于Deep Web。2000年Bright Planet指出[22]:Deep Web中可访问信息容量是Surface Web的几百倍,是互联网上最大、发展最快的新型信息资源。

Deep Web爬虫体系结构如图4所示,包含六个基本功能模块[24](爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS控制器)和两个爬虫内部数据结构(URL列表、LVS表)。其中LVS(Label Value Set)表示标签/数值集合,用来表示填充表单的数据源。

Deep Web爬虫爬行过程中最重要部分就是表单填写,包含两种类型[23]:

1)基于领域知识的表单填写:此方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。Yiyao Lu[25]等人提出一种获取Form表单信息的多注解方法,将数据表单按语义分配到各个组中,对每组从多方面注解,结合各种注解结果来预测一个最终的注解标签;郑冬冬[26]等人利用一个预定义的领域本体知识库来识别Deep Web页面内容,同时利用一些来自Web站点导航模式来识别自动填写表单时所需进行的路径导航;

2)基于网页结构分析的表单填写:此方法一般无领域知识或仅有有限的领域知识,将网页表单表示成DOM树,从中提取表单各字段值。Desouky等人[27]提出一种LEHW方法,该方法将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理;孙彬等人提出一种基于XQuery的搜索系统[28],它能够模拟表单和特殊页面标记切换,把网页关键字切换信息描述为三元组单元,按照一定规则排除无效表单,将Web文档构造成DOM树,利用XQuery将文字属性映射到表单字段。

Raghavan等人提出的HIWE系统[24]中,爬行管理器负责管理整个爬行过程,分析下载的页面,将包含表单的页面提交表单处理器处理,表单处理器先从页面中提取表单,从预先准备好的数据集中选择数据自动填充并提交表单,由爬行控制器下载相应的结果页面。

3 结束语

网络爬虫所爬行的页面被搜索引擎用来建立索引,以便实现快速搜索;网络爬虫还可用于网站维护任务,检查网站链接有效性和验证源码。网络爬虫技术将用来应对互联网络上日益增多的网络资源和信息需求,处理一些新技术开发的网页,爬行一些全新的信息,面临很大的挑战。比如AJAX技术开发的页面就不能被传统爬虫所抓取,本文今后将研究AJAX技术开发网页的爬行问题。

爬虫技术 篇2

我停下笔,正想伸手去掂量那枝“小豆”,不料它却突然伸展成椭圆形状,这分明是一只小爬虫。

那小爬虫仰躺在书桌上一个劲儿朝空中乱踢着。我一时童心大起,拿过尺子一量:五毫米。我用尺子轻轻一拨,希望将它弄近点,谁知剐碰到它的背壳,它立刻缩成一团。

我好奇地看着它小心地展开身体。它那乳白色的小足不断地蹬着,聚集着力量使自己“庞大”的身躯翻转过来。但不知是用力不当还是别的原因,它只能平躺或是侧向某一边,却无法使整个身体翻转站立。虽然每次都以失败告终,但是它毫不气馁(něi),一阵激烈的努力过后,稍微停歇几分钟,便又开始使出浑身解(xiè)数(shù)来实现自己的愿望。我已不抱任何希望了。

我揉了揉发胀的眼睛,如此脆弱的生命却具有如此强大的恒心与毅力是我始料不及的`。

我低下头来,令我惊奇的是,这只原本还仰躺在桌面上的小爬虫居然已经翻身站起,并在书桌上敏捷地爬着。

1.从文中找出与下列意思相对应的词语。

(1)使出全身的本事、手段。( )

(2)开始时没有想到的。( )

2.品读画“____”的句子,联系上下文回答问题。

(1)我揉了一下发胀的眼睛,说明( )

A.“我”视力不好。 B.“我”看得仔细。

(2)“如此脆弱的生命”具体体现在_________、__________。

3.“我”观察爬虫时心理在不断发生变化,正确的变化是( )

A.好奇→不抱任何希望→惊奇

B.不抱任何希望→好奇→惊奇

4.这只小爬虫给了你什么启示?

参考答案:

1.(1)浑身解数 (2)始料不及

2.(1)B (2)只有绿豆大小 五毫米

3.A

你是一个“爬虫”人吗? 篇3

几乎在每个家庭、每个工作场所和每一类人群中,都有小祺这样的人。面对一个防御型的人,需要一些特殊技巧。

防御——敏感的阴暗面

小祺认为自己只是敏感。确实防御型的人都很敏感,但是敏感和防御不一样。敏感是一种细致的探查和深入的理解,它不会造成伤害。而防御就像一个带着羞愧感的私生子,他在刺耳的评价声中长大,羞愧感支配了他的整个心理活动。他就像一辆满载炸药的卡车,一触即发,常常还会伤及他人。

防御型人物的破坏行为常常是出于羞愧,这并不是为防御型的人开脱。认识到这一点,可以帮助我们理解,为什么一个来访者会觉得男友接吻时闭上眼睛是在“暗示她很丑”。也可以帮助我理解,为什么一个客人在party上被问到“你想要一些酒吗”的时候,他会烦躁地回答:“为什么问我要不要酒,在你看来,我就是个酒鬼吗?”在普通人看来这些反应都有点匪夷所思,但是在防御型的人自己看来,这些行为是合理的——不,是必要的!因为对他们来说,防御行为是一种自我保护。

我们可以建立起完美的关系吗?

不可能。我们不能指望与一个防御型的人建立美满的关系。因为防御型的人在人际关系中,并不像人类那样思考,而是像爬行动物那样思考。其实,每个人都有防御的一面,因为人类的大脑中有一部分是科学家所说的爬虫脑,它不能感受人际关系中出现的微妙情绪,也不能进行逻辑思考。它起源于两种担忧。

所有爬虫脑都担忧“我没有足够的……”:没有足够的爱,没有足够的钱,没有足够的声望,没有足够的光芒——总是不够!而且爬行动物的耳朵只能听到一种声音:“有人想找我的茬!”他们总能够捕捉到很多蛛丝马迹的威胁:这个同事有些不怀好意,这个亲戚有点儿可疑,那些办事机构的工作人员都在针对我。

当然,这会让我们的感官灵敏度提高,让我们在原始斗争中存活下来。就像典型的爬行动物——蜥蜴,它们老想着更多的食物、更好的住所、更佳的配偶,还随时随地提防着捕食者,所以它们会活很久。但是付出的代价是:对于那些非防御性的情感,它们总是置若罔闻,它们无法感受到爱意、轻松和愉悦。它们满脑子的匮乏和攻击。普通人只有在面对原始的恐惧时,他们像蜥蜴的那一面才会暴露出来。然而,防御型的人总是感受到一种原始恐惧,他们的大脑也被爬虫脑占据了。

曾经有人试图去亲自己养的响尾蛇,结果被咬了。医生跟他解释说,你不要指望跟一只爬行动物建立亲密关系,即使你从小把它养大。对防御性的人也是如此。记住这一点很关键。

如何避免陷入防御模式

防御是具有传染性的。当小祺说我的“批评”让她很受伤时(其实我觉得我是在赞美她),我感觉到自己也有一点防御情绪。如果任由这种情绪滋长,也许我会当场指责小祺是一个偏执狂。这会让我们的关系进入一个恶性循环:我指责她,她攻击我,激起我更强烈的防御,最后导致我们的关系崩溃。

要避免爬虫模式说起来容易,做起来却很难。当发动进攻的人是你父母、老板、或者领导的时候,尤其困难。因为这些人拥有权力,面对他们让你容易忐忑不安,不由自主地陷入防御模式。但是,如果你不得不做一只爬行动物,你也不用非得成为一只蜥蜴,你可以选择成为一只乌龟。

龟壳战术

罗马帝国之所以可以征服欧洲的大片土地,其中一个原因就是他们有一种军事策略叫做“乌龟”。在战斗中,士兵聚到一起,在中间的士兵举起盾放在头顶,周围的士兵将盾挡在胸前。他们以这样的方式行军,就像一只坚不可摧的大乌龟。

你也可以将自己武装成一只“行进中的乌龟”,建造起一层情绪硬壳。这并不容易,因为人的大脑镜像神经元倾向于与周围人产生共鸣。比如,你和我在交谈,你的部分大脑会自动配合我,反之亦然。当你跟一个愉快的人在一起时,这肯定是很棒的。但是当你和一个防御型的人在一起时,你的大脑就会自动进入战斗状态。为了避免冲突,你必须将敏感的镜像神经元缩回壳中。

如何做到这一点呢?我有一个办法:想象一个防御型的人对你发飙的场景,你感到震惊、愤怒和有一种想要回击的冲动。然后看看你起居室里的金桔树,再思考一下类似“713能否被整除”这样的数学问题。你有没有注意到,当你进行视觉活动和逻辑分析时,你的防御情绪就消失。这就是为什么艺术家和科学家在普通人看来总是显得行为怪异,因为他们大脑能量都用在了视觉和逻辑上,而社会关系常常不在他们的关注之中。

鳄鱼捕手

还有一种比缩回龟壳更高级的方式,可以让你毫无畏惧地对抗抵御。在这一方面,我的偶像是已经去世的鳄鱼捕手史蒂夫·埃尔文。他很喜欢鳄鱼,虽然他时时要躲避鳄鱼的进攻。在我的生活中有很多防御型的人(比如小祺,她是我的好朋友,也是一个出色的作家),我也想像埃尔文享受鳄鱼那样,享受跟这些人相处。埃尔文捕鳄鱼的时候,总是柔声但是坚定地对着鳄鱼呢喃:“亲爱的,你是对的,你最棒!”我想,防御型的人看到埃尔文轻松地解除鳄鱼的武装,应该会感受到一种奇怪的快乐吧。

网页爬虫技术的关键技术研究探索 篇4

现今,社会经济生活的各个方面变得越来越“互联网化”,互联网式经济贸易逐渐取代传统的经济模式,互联网金融市场的快速发展,在我国的经济结构中形成了服务于互联网金融的主流经济模式。致使各大商业银行也更加积极地开创互联网经济方面的业务,也强化了实体经济的服务效率。

“互联网金融+”这个新兴事物越来越多地融入我们的生活,改变了我们以往的生活方式。现在流行的打车软件,以电子支付为交易方式,改变了传统的支付方式;网络银行的快速发展为我们提供了新的理财方式;P2P信贷使得我们的消费和贷款有了新的途径;众筹产业的发展让每个人都可以参与到创新新模式中来,这些新的变化改变着我们的生活,使得我们生活增添了新的色彩,互联网金融在未来会越来越成为主流。

网络技术的快速发展,使得网络上各种重要的数据信息越来越多,互联网金融领域的发展也更加依赖于网络来获取重要的数据信息,以供研究发展。在互联网中,时时刻刻都有各式各样的金融网站发布实时的数据信息,如股票的走势、某个公司的运营情况、某个专家对当前经济形式的分析、在经济领域新产生了哪些技术等等。大型金融机构或者理财的个人都需要最前沿的工具来抓取这些必要的数据信息,以供研究。

在互联网金融领域,爬虫程序开发所面临的主要问题是采集性能和反封锁。大多数情况下,采用并发程度高的线程搜索网页数据是可行的,但是,前提是所访问的网站没有设置反爬虫的程序,例如设置防火墙、填写验证码什么的。很多时候有价值的信息都不会轻易被获取,因为网站可能会靠这些数据信息盈利,所以设置反爬虫的措施,限制访问的频率,一旦IP地址被封掉,什么程序就都没用了。所以,爬取数据的公司一般要运营维护一个IP地址池,同时,这也会出现IP是否稳定的问题,这些问题无法被避免,我们针对具体问题具体分析,最高效、最快速的完成爬取数据的任务。

目前,爬虫已在互联网金融领域的需求呈现出几何增长的趋势。未来互联网经济将在我国总的经济产业中占有更高的比重,获取一些重要的网络信息都得需要爬虫技术的参与,爬虫技术为适应新的需求,将会不断地更新发展。

2 关键方法和技术

2.1 多线程机制

网络爬虫需要下载规模非常庞大的网页,如果仅仅采用单线程来操作,采集效果会非常差,并且会浪费大量的时间,因为爬虫程序向服务器提交请求后要等待服务器的处理和返回结果,如果采用单线程,每个线程依次发送请求并等待服务器的依次响应,等待时间是所有网页处理过程的叠加,效率大大降低。因此,可采用多线程机制来减少个别网页的处理时间,以提高程序的效率。

2.2 数据库访问技术

爬虫技术采用队列管理的方式,基于SQLserver数据库。在本程序中,我们通过JAVA中的jdbc来操作数据库,通过建立JDBC和ODBC之间的链接,即建立所谓的JDBC-ODBC桥接器,和数据库的连接工作由ODBC去完成。JDBC的作用就是允许程序向数据库发送SQL语句,而且可以指定数据的返回类型。

3 实现过程

3.1 爬虫程序中的主要类和函数

首先,创建Interal Crawler类,用来实现爬虫程序基本的功能,包括多线程机制获取网页、处理网页、搜索新的URL等功能。此外,Interal Crawler类还作为爬虫程序接口,并且由其对象管理线程。

Craw Work类用来创建工作对象,工作对象处理InteralCrawler所访问的网页链接。当程序启动时,Craw Work对象将请求处理网页链接。该对象调用Interal Crawler对象的get Workload()方法,该方法将返回一个还未处理的网页链接。

Craw Done类用来统计正在运行的线程的数目。

类将程序运行的结果存放到数据库中。

Iwork Load Storable接口存放一些存取队列中网页的方法。

核心代码如下:

3.2 数据库的建立

启动SQLserver数据库,建立数据源search,创建表workload1和workload2,并设置好表参数。实现Socket连接,核心代码:

在上面的代码中,首先判断网页链接格式是否合法,若URL格式正确,则创建HTTPSocket对象,然后调用HTTPSocket对象的send方法将URL送到服务器接受处理。

要向数据库端发送SQL语句,首先要连接到数据库,代码如下:

其中,search是数据源的名字(用户设置的),Driver Name是驱动名称,“user”是整个数据库的用户名,“password”是登录密码,通过JDBC与数据库建立连接。当Interal Crawler对象调用run()方法时,同时运行了Interal Crawler对象的get Workload()方法,搜索Interal Crawler程序将要解析的URL。

3.3 多线程的设计

在我们使用多线程机制来设计爬虫时,大致流程的是:每个爬虫线程抓取的数据要聚集起来,再统一处理,然后让空闲的爬虫程序分去处理新的网页数据。这个工作流程可以让我们联想到master-slave模式,这个模式就相当于在建筑一个工程时,包工头和建筑工人之间的关系,包工头统一规划整个项目的实施流程并向工人下发任务,工人只需出力完成任务。根据这个模式,我们设计爬虫线程。如下图,多线程爬虫如图1所示。

图1中,Manager是一个线程,这个线程负责启动所有的Worker线程,给所有的Worker派发任务,然后所有的Worker开始解析网页,收集并处理数据后传送必要的数据给Manager,Manager再根据信息反馈控制Worker线程。

线程的设计是爬虫程序的关键部分,爬虫线程通过最佳优先算法根据一个网页得到其所有链接网页的URL,再搜索所有链接到页面中的关键字。如果搜索到所需数据,爬虫程序通过窗口指针向用户报告。如果未搜索到数据,结束线程,抛弃所有变量,正常返回。

算法思想如下:

本文对爬虫程序中常用的搜索算法进行了分析,针对搜索算法存在的弊端,提出了改善最优搜索算法的改进思想。提高了搜索算法的“查全率”,进一步也改善了查找网页数据精度。

4 总结

爬虫技术在互联网+时代具有广泛的实际应用价值,通过爬虫技术可以实现网页挖掘的核心算法。然而值得一提的是,爬虫在访问某些网页时,可能会遇到一些反爬措施,例如数据加密、网页权限等问题,有些网站只有有权限的用户能访问。网上有一些出售数据的网站他们希望网络爬虫能爬取到他们的报告(相当于给自己打了个广告),但是又不能让这些数据资源免费被爬虫程序爬取,网站会给网络爬虫一个用户名和密码,使得网络爬虫可以访问网站一部分数据,重要的数据会设置权限。

摘要:互联网技术的快速发展,使得网络上各种数据信息呈现出几何增长的趋势,以往搜索数据的工具越来越跟不上时代的潮流,查找效率低、成本高的缺陷日益凸显。爬虫技术实现所用到的算法是搜索引擎的关键技术,算法性能的优良决定着搜索引擎的搜索精度和搜索效率。对于互联网中数据的数据量大、数据类型多、实时性要求高的特点,对各种爬虫算法的优缺点进行分析,该文设计使用多线程机制的爬虫算法,可以提高网页的查全率。

关键词:爬虫技术,网页挖掘,多线程

参考文献

[1]潘春华,常敏.面向web的信息收集工具的设计与开发[J].计算机应用研究,2002,13(6):144-148。

[2]杜亚军.爬虫算法设计与程序实现[J].计算机应用,2004.

[3](美)Jeff Heaton.网络机器人JAVA编程指南[M].董兆峰,译,北京:北京电子工业出版社,2002.

[4]Heaton J.Programming Crawlers,Bots and Aggregators in Java[EB/OL].http://www.jeffheaton.com.2004.

爬虫技术 篇5

(+www.baidu.com/search/spider.htm) 200 0 64

1、203.171.226.111就是搜索引擎蜘蛛防问的网站ip,

2、61.135.168.39 Baiduspider代表,百度搜索引擎蜘蛛的ip是61.135.168.39,

3、代码中的/ 就代表搜索引擎蜘蛛防问的网页

4、2008-08-19 00:09:12代表搜索引擎蜘蛛爬行的日期与时间

5、代码中的200就代表搜索引擎蜘蛛爬行后返回HTTP状态代码,代码中可以了解蜘蛛爬行后的反映,代码如下:

6、W3SVC962713505代表网站日志所在的文件夹

7、www.baidu.com/search/spider.htm baiduspider常见问题解答网页

2xx 成功

200 正常;请求已完成,

201 正常;紧接 POST 命令。

202 正常;已接受用于处理,但处理尚未完成。

203 正常;部分信息 ― 返回的信息只是一部分,

204 正常;无响应 ― 已接收请求,但不存在要回送的信息。

3xx 重定向

301 已移动 ― 请求的数据具有新的位置且更改是永久的。

302 已找到 ― 请求的数据临时具有不同 URI。

303 请参阅其它 ― 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。

304 未修改 ― 未按预期修改文档。

305 使用代理 ― 必须通过位置字段中提供的代理来访问请求的资源。

306 未使用 ― 不再使用;保留此代码以便将来使用。

4xx 客户机中出现的错误

400 错误请求 ― 请求中有语法问题,或不能满足请求。

401 未授权 ― 未授权客户机访问数据。

402 需要付款 ― 表示计费系统已有效。

403 禁止 ― 即使有授权也不需要访问。

404 找不到 ― 服务器找不到给定的资源;文档不存在。

407 代理认证请求 ― 客户机首先必须使用代理认证自身。

410 请求的网页不存在(永久);

415 介质类型不受支持 ― 服务器拒绝服务请求,因为不支持请求实体的格式。

5xx 服务器中出现的错误

500 内部错误 ― 因为意外情况,服务器不能完成请求。

501 未执行 ― 服务器不支持请求的工具。

502 错误网关 ― 服务器接收到来自上游服务器的无效响应。

爬虫技术 篇6

STEP2 现在听第二遍,对照文字检查回答是否正确。

生物学家曾经认为乌龟属于爬行动物中“沉默的大多数”,也就是说,乌龟假若发声也没人会听见。一本出版于上世纪50年代的爬虫指南甚至认为乌龟——引用一下,“聋得什么都听不到”。

但事实证明,这只是因为科学家们没有仔细去倾听。这些年来,生物学家在水中以及陆上所录得的乌龟“节目表”(乌龟的声音)中已能识别出11种不同的声音。不过,这些声音又代表什么意思呢?

在最近一项试图解读乌龟对话的研究当中,研究人员对生活在巴西的巨型侧颈龟(Podocnemis expansa)进行了为期两年的跟踪记录。他们录下了220小时的音频资料,捕捉到了(上述)11种声音中的六种。其中有两种声音极为常见,在侧颈龟的日常起居中随处可闻。其他声音仅出现在它们迁徙的过程中,又或是夜里筑巢时才发出(乌龟的声音)。这一系列发现被发表在《蛙蛇学报》上。

研究人员还未能确定这些声音的真正含义,也不确定乌龟是否可以单凭声音就能认出彼此。他们表示,这就更有理由运用这些录音进行重现实验……也许会让这些会说话的乌龟揭开羞答答的面纱呢。

你知道吗?

澳大利亚曾在2005年为一只175岁的乌龟举办了盛大的生日晚会。名为“哈丽雅特”的雌性龟是生物学家达尔文当年在厄瓜多尔西部的加拉帕哥斯群岛考察时,从当地带回英国的,当时哈丽雅特才五岁,身形只有一个盘子那么大。此后哈丽雅特又被人带到了澳洲。哈丽雅特生于1830年,体重150公斤,去世前是《吉尼斯世界纪录》认定的现存年龄最大的圈养动物。它的一生跨越三个世纪,踏足三个大洲,曾经是达尔文的宠物,是世界上(有记录的)最长寿动物。2006年6月22日,这只已有176岁高龄的“达尔文龟”死于心脏病。

赫尔曼陆龟托马斯是英国最长寿的乌龟,终年130岁。托马斯出生在1882年,也就是达尔文去世的那一年(达尔文:又关我事?)。这位“长寿翁”历经两次世界大战,数次更换主人,一生饱经沧桑。1922年,一个名叫哈里的男子将刚满40岁的托马斯从伦敦动物园里领养出来,并送给女儿希尔迪奇作为礼物。

二战时,托马斯的住所被纳粹的炮弹炸成废墟,人们把托马斯从废墟中救了出来。1978年,希尔迪奇将托马斯送给了表妹加列斯。神奇的是,托马斯在96岁时才被兽医发现它真正的性别——托马斯是只雌龟。将近一个世纪被误认性别,托马斯比“同行十二年,不知木兰是女郎”的花木兰还悲惨。这只英国最富传奇色彩的乌龟于2013年被后院的一只老鼠咬伤后感染并发症不幸身亡,以一种极其“憋屈”的方式告别了世界。

爬虫技术 篇7

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下载站点或下载资源的能力。

本文从提高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所示。

这种结构关系体现为:同一站点相同类别的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等。

由于Hash值的计算和比对可以与网页抓取并行实现,因此不会对爬虫抓取网页的性能产生影响。去重减少了对重复网页的抓取和存储,提高了爬虫的整体效率。经实验验证,通过此方法,对同一种子出现在不同页面链接中的站点(如Mininova),可以减少10%左右的种子URL重复下载。而对于种子链接动态生成的站点(如BT@China联盟),通过基于Hash的URL去重并不能够减少种子的重复下载,但基于Hash的内容去重则能够减少50%以上种子重复下载,系统获取的速度可以提高30%左右。

总之,种子通信文件识别、基于正则表达式规则的URL过滤技术以及基于Hash的去重机制能够有效地提高系统效率。除此之外,提高爬虫抓取效率还可以采用并行抓取来实现,而这将涉及到多机协同、任务调度、负载均衡等[12,13]等相应技术内容。

3 提高覆盖率的技术

覆盖率,也称抓全率,是衡量BT种子爬虫获取种子全面程度的数值指标。爬虫对网站W的覆盖率CR(coverage rate)由下式给出:

CR = CI/NI (1)

其中,CI是爬虫从该网站获得的种子数,NI是该网站按种子特征值(infohash)去重后的种子数。

提高种子的覆盖率需要解决两类问题:一是如何发现新增BT发布站点或网页;二是如何突破网站的限制下载到种子文件。本文着重给出两种从技术上突破网站限制的方法,分别是爬虫自动登录技术和AJAX网页解析技术。

3.1 爬虫自动登录技术

由图 3所示的人工登录和自动登录的对比可以看出,人工登录可通过语义来判断登录状态,而爬虫完成自动登录过程则需要解决:

(1)登录表单的识别;

(2)登录元素的提取和自动填写;

(3)登录结果的判断;

(4)Cookie等状态信息的维护。

3.1.1 登录表单识别

登录表单可由对登录页面进行DOM(Document Object Model)解析获得。一个登录页面包含的表单(form)可能有多个,但是登录表单却只有一个,尝试对各表单逐个填充和单次登录的做法显然效率不高,对大量登录页面分析发现,登录表单具有一些共同特点,如下所示:

(1)登录表单的文本一般都含有“登录”、“用户名”、“密码”等关键字,有些还会包含“安全问题”、“登录模式”、“登录有效期”等字样。

(2)登录表单的method一般都采用post方法,action对应的目标页面通常都是“logging.php”、“logging.asp”等。

(3)表单至少应包含一个type为text的<input>标签和一个type为password的<input>标签,用来填写用户名和密码,还应有一个类型为button的<input>标签,或者是一个<button>标签用来提交表单。

可用表 1所列特征判别一个登录页面中的表单是否为登录表单。本文将网上随机选择的100个国内外站点的登录页面作为训练样本,由ID3算法生成判定树,在50个随机选择的国内外登录页面组成的测试集上进行了验证,所得判别准确率可达97.3%,对7个需要登录的BT发布站点登录页面进行了测试,结果准确率可达100%。

3.1.2 登录表单自动填写

表单的自动填写,就是找出表单中的待填项及其对应值,并将每一对待填项和对应值标记为<name,value>的形式。经过分析,发现登录表单中的待填项至少包含用户名、密码、method属性和action属性。用户名和密码在登陆网站注册时得到,method属性和action属性通过对登录页面进行DOM解析也很容易得到,难点在于表单中其他元素的填写,下面给出一种简单有效的处理方法:

(1)<input>标签中类型为“text”或“password”的标记,若name属性值为“user”或“username”,则将该标签的value属性赋值为登录用户名;若name属性值为“pass”、“passwd”、“pwd”或者“password”,则将该标签的value属性赋值为登录密码。如<input>标签的name属性值不存在上述特征,则选择第一个<input>填写登录用户名,第二个填写登录密码。

(2)<input>标签中类型为“radio”和“checkbox”的标记,一般会有默认选项(属性checked的值是"checked"),可以通过DOM获得其name属性值和属性为checked的value属性值;若默认的checked属性不存在,选择第一个value作为该<name,value>的值。

(3)类型为“file”、“hidden”、“submit”的<input>标签或<textarea>标签,直接获得其name属性值和value属性值共同组成<name,value>。

(4)<select>标签,获得其name属性值,在DOM上查找其子节点<option>标签的value值,如果某一个<option>包含属性“selected”,则将该标签的value值作为<name,value>的值,否则取第一个<option>的value值。

(5)<button>标签,判断其类型,若为“submit”则获得该标签的name属性值和value属性值,构成一个<name,value>。

3.1.3 表单提交和结果判断

表单自动填写后,即得到<name,value>的列表以及表单的method和action,用这些<name,value>构造URL请求,并向服务器发送HTTP请求报文。

服务器收到请求后,会向客户端返回HTTP 响应。一般情况下,登录成功的标志特征主要是服务器返回的状态码是“200 OK”并且页面有关键字“登录成功”、“欢迎回来”、“我的空间”、“我的消息”等字样;登录失败的主要特征则是服务器返回状态码“400 Bad Request”或“403 Forbidden”或页面包含关键字“登录失败”、“用户名错误”、“用户不存在”、“您无权查看该帖子,请登录”等。另外,还可用响应报文头部的“Set-Cookie”字段判定登录状态。图 4给出了登录结果判定树。

3.1.4 Cookie的保存和更新

为提高抓取效率,登录成功后,将Cookie保存在本地,爬虫需要维护站点和Cookie间的对应关系。当对网站抓取时,获得相应的Cookie值,为保证Cookie有效性,与服务器进行交互后检查Cookie有无更新以及是否失效。Cookie失效后,需重新登录。

3.2 AJAX网页解析引擎

AJAX(Asynchronous JavaScript and XML)是一种基于用户触发事件驱动的Web开发技术,浏览器和服务器异步并行处理,这就使得传统的基于协议驱动的爬虫不能获得AJAX网页或者实现AJAX网页的正确解析,因而对采用AJAX技术构造的BT发布站点(如BT@China联盟),传统爬虫无法获取种子。

对AJAX的处理主要是解析JavaScript代码,处理相应的事件,并抽取动态内容。支持AJAX解析的网络爬虫由互联网中抓取原始网页信息并对其执行解析过程中,不但需要分析链接标签,还需要解析JavaScript代码和引用的JS文件,如代码中包含AJAX调用,则向服务器发送请求,将返回的结果与原始的HTML文档进行整合以得到目标网页,再从中提取新的链接和文本信息。实现AJAX网页解析引擎的关键是设计研发一个JavaScript解析器。

对AJAX网页的解析也可用HTML渲染引擎完整地解析页面,但这样抓取,其效率并不高。目前,也有一些开源的JavaScript解析引擎,如Google的V8 JavaScript Engine和Mozilla的Rihno,前者速度较快,但是资源占用率很高,后者速度较慢且功能不强。

本文设计的AJAX网页解析引擎结构如图 5所示。

爬虫对由互联网抓到的原始网页进行网页类型判别和初步网页解析,将网页中的JavaScript代码缓存到临时文件,同时解析并下载需要引用的JS文件且缓存到本地,调用JavaScript解析器对源代码进行词法分析,形成单词表;然后,进行语法分析和语义校验,依照JavaScript语言的语法规则产生语法树,经过简单校验后产生相应的中间代码,由控制器控制脚本解析器对代码实现解释并执行,分析JavaScript代码里的函数调用关系,确定哪些函数需要向服务器发送数据请求。执行过程中,会由服务器返回相应结果,若是一个新的页面,则进行同上处理,否则,将其与原始网页中的HTML内容一同生成目标页面,再将该还原后的目标页面送入DOM解析器完成解析,随即由链接提取器从DOM提取外链接。

4 降低种子获取延时的技术

种子获取延时是指从网站的种子更新,直到爬虫获取到该种子的时间间隔。该间隔可以反映所获种子的新鲜程度,获取延时越小,种子的新鲜程度越高。无论是设计BT搜索引擎,还是对种子进行探测和Peer分析,种子的新鲜程度都是重要的决定性因素之一。

通过分析网站的组织结构,可以总结如下规律:

一个历史页面包含的链接更有可能是一个更久以前的网页,而网站的主页或者重要的索引页包含的链接则更有可能是一些新加入的链接。

BT种子爬虫的目标是尽可能早地抓取新增种子文件(爬虫开始抓取之后,网站新增的种子),尽可能全面和快速地抓取到历史种子(爬虫开始抓取之前已经存在的种子)。为实现这一目标,要区别对待历史种子和新增种子,遂由此提出了如下的爬虫策略。

4.1 批量抓取和增量抓取相结合的数据抓取机制

为保证数据的新鲜度,对于历史种子和新增种子,需要分别采用各自不同的抓取策略。

对于历史种子,采用批量抓取方式,由获得的页面中解析有关链接并写入爬虫抓取数据库,再根据一定的URL抓取任务生成策略,生成新的抓取列表。每个网页只抓取一次,继续如上的抓取过程,直到网站中所有页面都已经实现了抓取为止。

对于新增种子,采用增量抓取方式,抓取起点选择网站主页和页面变化较快的网页,BT种子发布站点可选择其首页或主要索引页,BT发布论坛则可选择论坛各版块前几页,并以一定的时间间隔对其重复抓取,将解析得到的链接与已有链接相比较,若为新增链接,则执行抓取并实现解析。

对更新频繁的BT发布站点,设置较短的增量抓取时间间隔,而对更新较慢的站点,则可设置较长的时间间隔。在这段时间内,新增链接数量常常都是有限的,即使是更新较快的网站如Mininova,每小时新增链接数通常也不会超过2 000,因此,可对每层抓取的页面数进行限定,以稍大于增量抓取时间间隔与网站更新频率的乘积为宜。通常,新增种子的链接深度不会超过4层,因此,增量抓取深度限制在3~5层即可。

4.2 历史数据和更新数据相结合的数据存储机制

抓取新增种子时,需要快速检索和比对当前URL是否已抓取过,而抓取历史种子时,则会存储数量巨大的URL,鉴于两种状况下的URL相互独立,统一存储则影响查找效率,因而分别设计了历史数据库(History Torrents Crawldb)和更新数据库(New Torrents Crawldb)用来存储抓取过程中的页面信息、URL信息和状态信息,并分别采用不同的URL任务选择机制生成爬行队列。历史数据库和更新数据库中URL的时序关系如图 6所示,图中以爬虫开始运行的时刻作为0时刻,DL分别是新增种子i和历史种子j的获取延时。

为了减少因种子更新多发且频繁,以及爬虫性能无法满足对更新数据抓取的需求而造成的较大抓取延时,在增量抓取的基础上,又增加了定时数据更新,即经过一定的时间间隔强制爬虫将增量抓获的网页写入更新数据库,并检查网站主页和主要索引页。

定时更新可能导致一些新增种子未被爬虫获取,为解决该问题,将更新数据库定期融合到历史数据库中,因而漏抓的种子可作为历史种子进行抓取。

4.3 BT爬虫的URL抓取队列选择策略

由图 6及前文所述的规律,将历史数据库和更新数据库中同一个站点的URL按照时间实现排序,而为尽快获取新增种子,就应从更新数据库中选择获取时间最晚的N个URL构成抓取队列,交由抓取新增种子的线程完成抓取;而为更多地获取历史种子,则应从更新数据库中选择获取时间最早的M个URL构成抓取队列,并由抓取历史种子的线程进行抓取。

4.4 动态任务调整策略

理想情况下,BT爬虫对一个站点的爬行过程可叙述为:开始一段时间内,爬虫获取种子的速率会有一个急速的上升过程,而后逐渐趋于稳定,该稳定值是由爬虫性能、网络带宽和网站组织结构而共同决定的;随着对站点已抓取网页数量的增加,未抓取的种子越来越少,爬虫的获取速度最终将稳定于网站的种子更新速度。因此,初始时,需要分配更多的资源抓取历史种子,而随着获取的种子越来越多,历史种子越来越少,为进一步缩减抓取更新延时,需将更多的资源用来抓取新种子,同时相应减少定时更新的时间间隔以尽快发现新增种子。

5 实验评价

本文基于MapReduce模型[14]实现了一个分布式并行BT种子爬虫系统,由4台曙光天阔I610r-FQ服务器(CPU:Intel XEON E5440 2.82G ×2,内存:DDR2 2G×2)组成测试系统。受实验网络最大可用带宽1Mbps的限制,实时更新线程数和深层抓取线程数分别设为5和10,定时更新和实时更新的时间间隔分别为1天和3小时。

用覆盖率、抓取速率和种子新鲜度来评价一个BT种子爬虫的性能。其中,覆盖率反映了爬虫获取种子的数量,速率表示了爬虫获取种子的速度,种子新鲜度则用来衡量爬虫能否及时获取网站新增的种子。

5.1 覆盖率

由于网站按种子特征值去重后的种子数NI无法精确获得的特质,其实际值不会超过网站所包含的种子个数NT,因此,本文使用NT替代NI计算覆盖率。BT种子发布网站的种子数NT按如下公式估算:

NT=IndexPageNumber × TorrentsPerPage+ TorrentsUpdated + TorrentsInvalid (2)

IndexPageNum为索引页面数,TorrentsPerPage为每页种子数,TorrentsUpdated为获取时间内种子更新数,TorrentsInvalid为获取时间内种子失效数。

以BT@China联盟的动漫索引页(http://bt2.btchina.net/?categoryid=4)为例,本文测试了爬虫覆盖率,该网站采用AJAX技术实现,普通爬虫无法从该网站获取种子。该站点共有75个索引页,每个索引页有100种子,在爬虫系统运行的时间段内,种子失效数是0,种子更新数是这段时间内索引页面上增加的种子个数。为去除网络状况对系统的影响测试了三次,根据式(1)和式(2)计算爬虫对该网站覆盖率,结果如表 2所示。

再以疯狂音乐联盟的BT发布区(http://www.btcrazy.com/bbs/index.php?gid=203)为例测试了覆盖率,该站点只有登录才能够下载种子。经不完全统计,该站点中1 661个种子,通过自动登录,爬虫获得了1 477个种子,覆盖率达到了88.92%。

可以看出,爬虫自动登录技术和AJAX网页解析技术能够使爬虫抓取那些原本无法获取的信息。BT@China联盟的覆盖率不高,其原因是由于该站点还加入了验证码机制,这将是本系统未来的攻克重心。而影响疯狂音乐联盟覆盖率的因素则主要是,一些帖子需要回复后才能够下载种子文件。事实上,去重后的种子数小于网站所包含的种子个数,因此实际的覆盖率会更高一些。

5.2 新鲜度

本文选取http://www.mininova.org/作为示例,该网站种子更新频率较快、更新种子数较多且种子下载链接按时间顺序递增。在系统实现中保存种子文件获取的链接和获取时间,通过对比来确定抓取到种子的新鲜度。在对比实现过程中,种子获取延时的实验结果如图7所示。系统采用30个线程实现抓取更新,每隔1小时自动增量更新一次,连续抓取24小时,共获得2 312个种子。

图7中,实线代表改进前系统对每个种子的获取延时,而虚线则代表采用第4节提出的数据抓取机制和数据存储机制进行改进后的获取延时。可以看出,利用本文方法显著降低了种子获取延时,提高了种子的新鲜度。

5.3 系统效率

文中对开源搜索引擎Nutch进行了改进使其可以抓取种子文件,并与BT种子爬虫进行对比。实验中选取5Q地带和冰鱼综艺联盟BT站(http://bt.icefish.org/)进行全站点种子抓取,这两个站点均不需要进行AJAX解析和登录即可抓取种子。初始5Q地带有6 100个种子,冰鱼综艺联盟有1 380个种子,获取期间共新增种子64个,失效种子4个,由式(2)计算抓取期间站点种子总数NI为7 548。分别测试了1、2、3个节点集群运行时获取种子数TN、获取网页数P、峰值获取速度MPRMBR、获取用时T。并计算出平均网页获取速度AV、平均种子获取速度ATV、系统收获率HR以及覆盖率CR。其中,AV = P/T,ATV = TN/T,HR = TN/P,覆盖率则由式(1)进行计算。将BT爬虫与Nutch性能比较结果值列成表格,具体如表3所示。

将BT爬虫与Nutch系统在收获率和覆盖率方面的实验比较结果以图线表示,如图8所示。

将BT爬虫与Nutch平均种子获取速度实验对比结果描绘为图线,如图9所示。

由表3及图 8、图 9可以看出,BT爬虫拥有较高收获率,可以大幅减少无关网页的抓取,且随着节点数增加,系统性能增长基本为线性,并具有较好的加速比。与Nutch相比,BT爬虫具有更高的平均种子获取速度和种子覆盖率。

6 结束语

本文提出的基于特征的种子文件识别方法具有高效性和准确性,而基于Hash的种子文件去重机制就可大幅减少重复网页、降低种子文件对系统效率的影响和由其带来的存储开销,还有基于正则表达式规则的URL过滤技术则可明显提高种子获取速度。另外,本文解决了爬虫自动登录和AJAX网页解析问题,提高了覆盖率,同时为降低种子文件获取延时,也提出了一系列的实施机制和策略。通过实验证明了这些方法在提高种子新鲜度方面效果显著。但是正如本文提到的,BT种子文件在获取爬虫今后的研究中需要解决验证码识别、论坛自动回复等一系列提高覆盖率的相关问题,以及并行抓取、DNS缓存、系统部署等提高抓取速率和提高系统实用性的相关问题。

摘要:分析了当前主题爬虫在面向BT种子文件获取应用上存在的问题,从提高BT种子获取速率、提高覆盖率和降低种子获取延时的角度出发,提出了基于Hash的去重机制,给出了爬虫自动登录的实现方法,设计了AJAX页面解析引擎,提出批量抓取和增量抓取相结合的数据抓取机制、历史数据和更新数据相结合的数据存储机制。通过设计并实现一个基于爬虫方式的BT种子文件获取系统证明了这几种方法能使系统整体性能平均提高30%~50%。这些技术和方法也可应用于其他主题爬虫。

爬虫技术 篇8

1 XSS攻击原理及过程

跨站脚本攻击 (X SS) 通过扫描网站中存在的漏洞, 尤其是网站未设置用户登入数据过滤等, 在用户访问的页面链接中插入恶意代码来窃取用户信息。在攻击的网站的过程中主要包括三个部分, 分别是网站、攻击者、受害者, 其中只有受害者会运行攻击者插入的恶意连接, 网站只是一个载体, 一般来说不会受到攻击和影响。

X SS攻击步骤如下:

1) 攻击者选定自己感兴趣的W ed站点, 但终有正常身份的用户才能访问该站点。2) 攻击者在感兴趣的W ed站点中寻找跨站脚本漏洞。3) 攻击者制作一个带有恶意代码的连接发送到该站点的潜在用户的邮箱、页面等中。4) 受害者点开该连接时便得到了该用户的cookie, 便可冒充该用户进行访问。

2 基于网络爬虫的XSS漏洞挖掘技术

基于网络爬虫的X SS漏洞挖掘技术核心模块主要包括以下三个部分, 分别是代码自动注入、漏洞检测等模块。

2.1 网络爬虫模块

在网络搜索引擎中最为核心的构件便是网络爬虫, 是一种自动下载程序。在网络爬虫运作的过程中不断的向服务器发送请求, 因此在数据传输中可进行编码压缩减少网络传送的数据。由此可见, 在对字符进行hash时, 应排除起始和末端的常见字符避免碰撞的发生。本研究在此概念中研究出一种新的算法———M-Interval-H ash, 可快速运算出U R L的hash值:M=筛选点常见字符后的长度, N是U R L中选取字符的间隔字符数。例如:N=6, 字符数则为72, 则M=24, 这代表字符间隔为24个字符。

2.2 代码自动注入模块

跨站脚本漏洞在挖掘中, 将代码注入来检测是否存在漏洞, 在跨站脚本中恶意代码一般是在PO ST请求或G ET请求中。因此, 在代码注入中需考虑这两种情况。在代码注入时测试每个注入点, 并在测试时以数据库代码顺序在数据库中取出记录, 直至数据库中没有记录。

2.3 漏洞检测模块

在代码自动注入后, 再对注入结果进行漏洞监测, 避免代码终有漏洞存在。本研究以匹配漏洞特征库来辨别跨站脚本漏洞是否成功。在漏洞特征库中得到跨站脚本注入漏洞的测试板, 从而对PO ST请求, G ET请求依从进行跨站脚本攻击。进而收取W eb服务器端返回的消息, 分析该消息时候存在漏洞特征库中的漏洞。如果存在便说明有X SS漏洞。测试脚本的质量影响着X SS的测试效果, 在此本研究采用O pen W eb A pplication Security Project所推荐的测试脚本。

3 XSS漏洞检测测试

3.1 本研究技术与其他基于爬虫的检测工具的检测效果

本研究为验证该技术的可行性, 对某些网站进行了扫描测试, 同时以X SSer1.5、A cunetix W V S Free Edition 6.5基于爬虫的检测工具的检测效果为对照。网站测试环境1为A pache 2.2.14+PH P;网站测试环境2为IIS 6.0+A SP, 由于在测试网站2中具有Form表单, 因此X SSer在表中未检测出X SS漏洞, 结果见表1。

3.2 本研究技术与其他基于爬虫的检测工具扫描耗时

通过对比本研究技术与A cunetix W V S 8和X SSer1.5的扫描耗时可见, 本研究技术检测工具扫描耗时比A cunetix W V S 8和X SSer1.5工具表现更佳, 见表2。

4 结束语

跨站脚本漏洞在挖掘中, 将代码注入来检测是否存在漏洞, 在跨站脚本中恶意代码一般是在PO ST请求或G ET请求中。在代码注入时测试每个注入点, 并在测试时以数据库代码顺序在数据库中取出记录, 直至数据库中没有记录。本研究提出了一种基于网络爬虫的X SS漏洞挖掘技术, 并采用了一种新的算法———M-Interval-H ash, 在实践中发现该技术在应对X X S漏洞检测中具有显著效果。

参考文献

[1]文凯, 何小东.一种基于网络爬虫的跨站脚本漏洞检测方法[J].电脑编程技巧与维护, 2012.

爬虫技术 篇9

1.1 个性化搜索引擎

个性化搜索引擎既指界面的个性化, 也是内容的个性化。基于个性化推荐服务的搜索引擎隶属于个性化搜索引擎范畴。界面个性化是提供给用户一种定制搜素引擎的界面风格和布局能力, 并根据不用用户提供其预先定制过的界面;内容个性化是提供用户一种定制搜索结果的能力, 具有不用信息检索需求的用户在使用即便是相同的搜素词语, 也会得到不同的命中结果。显然这里强调的是内容的个性化, 实际意义较界面个性化更大。

1.2 网络爬虫

网络爬虫, 也称为蜘蛛程序 (Spider) 。网络爬虫是一个自动提取网页的程序, 是搜索引擎的重要组成部分。网络蜘蛛是通过网页的链接地址来寻找网页, 从网站某一个页面 (通常是首页) 开始, 读取网页的内容, 找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页, 这样一直循环下去, 直到把这个网站所有的网页都抓取完为止。如果把互联网当成一个网站, 那么Spider就可以用这个原理把互联网上所有的网页都抓取下来。

它在搜索引擎中占有重要的地位, 对搜索引擎的查全、查准都有影响, 决定了搜索引擎数据容量的大小, 而且网络爬虫的好坏直接影响搜索结果页中的死链接 (即指向的网页不存在) 的个数。

1.3 网络爬虫在搜索引擎中的地位

从上面的搜索引擎基本原理上可以看出网络爬虫是一种能够跟踪网络上超链接结构, 并不断进行网络资源发现与采集的程序。作为搜索引擎的资源采集部分, 网络爬虫的性能将直接影响到整个搜索引擎索引网页的数量、质量和更新周期。

2 基于主题爬虫的个性化搜索引擎技术

2.1 信息采集模型

主题爬虫是建立普通爬虫基础之上, 通过在网页的整个处理过程中增加模块实现个性化信息提取。这些模块包括主题确定模块、优化初始种子模块、主题相关度分析模块和排序模块等。 (参见图1)

图1中, 1爬虫模块取回网页。2调用相关度分析模块, 对网页进行相关度分析。3爬行模块根据分析的不同结果进行相应的处理。4爬行模块从数据库取出等待处理的URL继续工作, 循环到第一步, 直至没有新的URL。5对网页的重要程度进行排序。

主题的采集的关键是采集结果和主题的相似度计算。可以通过相关链接信息来预测待采集结果的相似度, 从而体现用户的个性化要求。

2.2 基于主题和用户个性化的爬行器

基于主题的爬行器是指选择性地搜寻那些与预先定义好的主题相关的页面的爬行器。和基于整个Web的爬行器相比, 它并不采集那些与主题无关的页面, 节省了硬件和网络资源, 保存的页面也由于数量少而更新快。它还可以很好地满足一些特定人群对特定领域信息的需求;而基于用户个性化的爬行器是一种轻量级的采集系统, 它的目标就是通过用户兴趣制导或与用户交互等手段来采集信息, 给用户提供个性化服务。

2.3 超链接结构的搜索策略

基于链接结构的搜索策略主要特点是利用Web结构信息指导搜索, 并通过分析Web页面之间相互引用的关系来确定页面和链接的重要性价值。超链分析技术是主题型搜索引擎所采用的一个重要手段, 下面将介绍几种重要的超链分析算法。

2.3.1 PageRank算法

PageRank算法是斯坦福大学 (Stanford University) 的Sergey Brin和Lawrence Page提出的.基本思想是:如果一个页面被许多其他页面引用, 则这个页面很可能就是重要页面;一个页面尽管没有被多次引用, 但被一个重要页面引用, 那么这个页面很可能也是重要页面;一个页面的重要性被均分并将传递到它所引用的页面中。其中页面的重要程度量化后的分数就是PageRank值。Google的搜索引擎用的就是PageRank算法。网络中的超链接结构可以表示为有向图G= (V, E) , 其中V是节点 (网页) 集, E是边 (当且仅当存在从页面i到页面j的链接时存在从节点i到节点j的边) 集.假设一个页面u, 存在T1, T2..Tn的链接网页;参数d代表“随机冲浪者”沿着链接访问网页的衰减因素, 取值范围在 (0, 1) 之间, 根据经验值一般取为0.85。C (Ti) 代表网页Ti链向其他网页的链接数量, PR (u) 定义为网页u的链接权值。PageRank值的计算公式如公式 (1) :

其中e为1/max, 即max为所有网页的总和, 每个网页初始分配的权值为总和的倒数。这种算法的特点指向一个网页的外部链接页的页面等级越高, 则该链接页面传递给该网页的页面等级值也就越高。因而, 一个网页即使只是在内容中偶然提到了一个和查询主题偏离的关键词语, 也会因其居高的页面等级值而获得一个比较高的排名, 从而影响了搜索结果的相关性与精准性。

2.3.2 HITS算法

HITS算法是由Cornell大学的J.Kleinberg提出的。Kleinberg将网页分为两类, 即hubs (中心级别) 和authorities (权威级别) 。authorities为具有较高价值的网页, 依赖于指向它的页面, 而hubs为指向较多authorities的网页, 依赖于它所指向的页面。HITS算法目标就是通过一定的计算方法以得到针对某个检索提问的最具有价值的网页, 即排名最高的authority。但该算法计算量比Page Rank大。且依赖于用户查询的, 实时性差。另外Authorities andhubs算法可能存在“主题漂移”和“主题泛化”的现象。因此, Authorities and hubs算法适合于宽泛主题的查询。

2.3.3

PageRank算法改进。对PageRank算法的改进, 可以通过引入面向主题的思想和对网页链接关系的重新计算来实现。首先, PageRank对页面的重要性发现起到重要作用, 但是它不是面向某一个主题的 (Query-Independence) 。这里对PageRank方法进行了改进:在链接关系的基础上, 加入一定的语义信息权重, 以使得所产生的重要页面是针对某一个主题的, 这就形成了SPageRank算法。SPageRank算法既利用了PageRank发现重要页面的优势, 又利用主题相关性。

2.3.4 主题相关性算法

搜索引擎的根源是传统的全文检索技术, 搜索引擎沿用了传统的信息检索模型。在传统的计算文档相似度的算法中, 以Salton教授提出的向量空间模型 (Vector Space Model) 应用最为广泛。向量空间模型基于这样一个关键假设, 即组成文章的词条所出现的顺序是无关紧要的, 它们对于文章的主题所起的作用是相互独立的, 因此可以把文档看作一系列无序词条的集合。页面主题相关度的计算有多种方法, 例如Naive Bayes、神经网络 (Neural Network) 、实例映射模型、向量空间模型 (VSM) 等。其中向量空间模型对训练文档的要求较低, 从少量的训练文档中就能提取出主要的目标特征, 而且计算简单、正确率较高, 比较适用于网络信息的发现。基于向量空间模型VSM的简单向量距离算法。该算法的基本思想就是计算图2中两个向量之间夹角的余弦值。VSM相似度计算公式如公式 (2) :

结束语

基于主题的个性化搜索引擎主要针对相关主题的采集, 为用户提供个性化信息服务。基于主题的采集的关键是采集结果和主题的相似度计算。可以通过相关链接信息来预测待采集结果的相似度, 从而体现用户的个性化要求。

参考文献

[1]高灵霞.基于主题爬虫的个性化搜索引擎技术分析[J].电脑知识与技术.2009 (32)

聚焦爬虫爬行性能研究 篇10

爬虫是一个网页自动搜索程序, 根据既定的抓取目标, 有选择地访问互联网上的网页与相关的链接, 获取所需要的信息, 为搜索引擎重要组成部分。文献[1]指出, 聚焦爬虫与通用爬虫的不同之处在于并不追求大的覆盖面, 而将目标定为抓取与某一特定主题内容相关的网页, 为面向主题的用户查询, 可实现搜索引擎对Deep Web网页数据的发现和索引。聚焦爬虫采用了一定的网页分析算法过滤与主题无关的链接, 保留有用的链接并将其放入等待抓取的URL队列, 然后根据一定的搜索策略从队列中选择下一步要抓取的网页URL, 并重复以上过程直到到达程序的某一条件时停止, 可以有效提高Deep Web数据发现的效率。

一个高性能爬虫需要注重以下几个方面。

1.1 程序执行效率

能抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制订的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为、工作有效性、及时性的关键所在。这两个部分的算法又是紧密相关的, 决定了爬虫程序的执行效率。

1.2 分布式爬行

文献[2]指出, 集中式的爬虫已经不能满足目前互联网的规模, 因此支持分布式的爬行, 处理和协调好各结点之间的交互, 也是一个重要环节。

1.3 硬件条件

由于网络环境及硬件资源、IP地址和带宽等因素造成的爬虫协同工作问题也是造成爬虫工作效率低的重要因素。

2 爬行网络环境

网页分析算法和URL搜索策略是聚焦爬虫程序的两个最重要的组成部分, 一定程度上决定了爬虫工作效率的高低。但除此之外, 仍有相当一部分工作时间是停留在爬虫选定了某个URL下载网页并打开时。这部分工作时间往往比程序内部的算法分析时间要更长, 其重要因素在于URL的无序分配导致网页数据通信缺少优化、分布式爬虫无法有效协同工作等问题。

因此, DNS解析也是网络爬虫的瓶颈之一, 因为有些域名请求要经过很多层服务器才能解析到, 或者因解析服务器的忙碌而超时。文献[3]指出, DNS查询占用整个爬行的时间高达70%。解决的方法有两种:一是提供DNS缓存, 二是建立异步DNS查询模块。在实际应用中一般会综合这两种方法。DNS解析子模块可以单独拿出来放在一台Server上做成DNS服务器, 这样可以采用更大的缓存和更多的查询线程。

2.1 DNS缓存服务器

IDC可安装本地DNS缓存服务器, 保存爬虫抓取的解析网页的域名与IP映射。default TTL=3600 (1hour) (缓存服务器保存记录的时间是1h。也就是告诉DNS保存域的解析记录为1h) ;将DNS缓存服务器地址加入到爬虫服务器的/etc/resolv.conf中。

2.2 异步DNS查询

(1) 创建多个DNS查询线程, 每个查询线程调用gethostbyname等同步的API, 主线程与查询线程之间通过MessageQueue连接, MessageQueue基于事件通知机制。该方法缺点是实际的并发受限于查询线程的个数。

(2) 基于非阻塞socket+事件驱动机制, 自行构造和解析DNS报文。这个跟常规的异步网络应用思路一致, 但是需要自行编写DNS协议构造和解析代码。

3 分布式爬行

普通单处理机系统受限于CPU的处理能力、磁盘存储的容量, 不可能具备处理海量信息的能力, 这就要求爬虫支持分布式协同工作。文献[4]指出, 一般说来, 爬虫的分布式爬行可分为内部分布式爬行和外部分布式爬行。

3.1 内部分布式爬行。

所有的爬行进程在同一个本地网络上运行并通过一个高速连接 (如LAN) 进行通信, 从远程Web站点下载网页时都利用相同的本地网络。采用这种方式, 硬件资源扩展方便, 几台PC就能增大磁盘容量, 提高I/0吞吐量, 做成一个小机群, 性价比较高。此时, 瓶颈主要是在网络出口带宽上。

3.2 外部分布式爬行。

当并行爬行的不同爬行进程在通过Internet相连的地理位置较远的不同地区运行时, 则这种爬行为外部分布式爬行。它的优势是网络带宽较富裕, 可以就近爬行周围的Web站点, 速度较快。在这种情况下, 重要的是确定不同地理位置的爬行进程问进行通信的频率和数量。因为进程间的带宽存在限制, 有时甚至是拥塞不堪而导致堵塞。分布式爬行的主要问题是当多个爬行节点并行下载网页时, 不同的节点可能会多次下载同一个网页。为了避免这种交叉, 并同时提高网页下载质量, 并行节点之间应该进行充分的通信, 在网页下载上达成协调, 以便并行、一致、高效率地下载网页。

4 URL分配策略

URL分配模块是爬虫的重要组成部分, 主要考虑两个问题。

(1) 在节点间划分URL的策略, 即如何分配下载任务。

(2) 优化性能, 比如负载均衡、协同工作的开销等。

目前一般有两种分配模式可以参考:

4.1 静态分配模式

各节点按事先规定的URL范围独立下载。若遇到不属于本节点的URL, 有3种处理方法: (1) 放弃; (2) 下载; (3) 传送到URL隶属的节点。静态分配模式的优点是配置比较简单。关键在于如何划分URL范围, 有效利用各个节点的资源。

4.2 动态分配模式

由一个统一的URL管理器统一调度根据各节点的情况动态地分配URL。该模式的优点是能做到负载均衡, 使各个节点下载最大化。缺点也是很明显的, 要有一个专门的URL管理器, 增大了成本和配置难度。URL管理器需要与各节点保持高速实时通信, 存在单点故障。由于要存放所有节点需要的URL集合, 当下载规模增大时, 本身也是一个瓶颈。

5 结语

制约爬虫的外部分布式爬行的客观及硬件因素较多, 且环境复杂, 一般可通过定义URL分配策略及配置异步DNS查询实现高性能内部分布式爬行。基于URL动态分配方式成本高、配置难度大, 使用配置成本低效果明显的静态分配方式实现, 爬行效率更高, 如图1所示。因此, 开发聚焦爬虫程序时根据硬件条件、网络环境、带宽等因素, 合理设计URL分配策略, 配合高效的DNS查询方法可有效提高分布式爬行的性能。

摘要:爬虫作为网页搜索下载程序, 其网络爬行性能决定了搜索引擎的性能和数据质量。本文通过分析聚焦爬虫的特点和网络环境, 总结出三类制约爬行性能的主要问题, 分别是DNS查询及缓存设置、内外部分布式爬行特点和网页URL静态与动态分配策略。结论为聚焦爬虫使用URL静态分配策略结合异步DNS查询及缓存设置, 在内部分布式爬行时可有效提高网络爬行性能。

关键词:爬虫,DNS,URL分配,分布式爬行

参考文献

[1]周立柱, 林玲.聚焦爬虫技术研究综述[J].计算机应用, 2005, 25 (9) .

[2]周德懋, 李舟军.高性能网络爬虫:研究综述[J].计算机科学, 2009, 36 (8) .

[3]Heydon A, N~ork M.Mercator:Ascalable, extensible Web crawler[J].WorldWide Web, 1999, 2 (4) :219~229.

可定制的聚焦网络爬虫 篇11

关键词:信息收集,搜索引擎,网络爬虫

网络爬虫是搜索引擎的一个重要组成部分,它是一个自动提取网页的程序。它从一个或若干初始网页的 URL开始,获得初始网页上的 URL列表;在抓取网页的过程中,不断从当前页面上抽取新的 URL放入待爬行队列,直到满足系统的停止条件。

爬虫的全面性、准确性、新鲜度直接影响搜索引擎的质量。目前搜索引擎大都是以整个网络为目标的,但随着互联网的繁荣、网络信息爆炸式的增长,以整个互联网为搜索目标的通用搜索引擎越来越感到力不从心,其盖全率、新鲜度、准确度面临严峻挑战。而针对特定领域的专业搜索引擎、个性化智能化的搜索引擎只关心某一个领域的文档,它能很好的应对以上问题。对专业搜索引擎的研究已成为下一代搜索引擎的研究热点。

1 聚焦爬虫框架设计

聚焦网络爬虫(又叫主题爬虫)技术是专业搜索引擎的核心技术之一,它的目标是在执行爬行程序时尽可能地收集与特定主题相关的网页,同时最大限度地避免无关网页的下载。这样该爬虫就可以保证针对某一主题的高盖全率和新鲜度。聚焦爬行技术不仅可以应用在搜索引擎上,还可以在很多领域得到应用,如数字图书馆,智能商业信息检索等方面。

文中所设计的可定制聚焦网络爬虫(CFC,Customized Focused Crawler)首先在用户提供初始关键字后,在用户的指导下完成主题定制和主题训练。接着从初始页面出发,分析页面的主题性和提炼页面的连接,多线程地下载网络页面资源。主要关键技术和算法有:用户主题定制和训练、主题相关度计算、URL队列构造等方面。其结构,如图2所示。

2 具体技术实现

2.1 主题定制及训练

用户需求描述在信息检索领域是个传统的话题,对于聚焦爬虫的主题定制,目前有两种基本方法[5]:一种是基于分类的,另一种是基于关键字的。在基于分类的方法中,用户在已经分好类的主题集中选择自己所需的主题。但是,用户需求的表达受到预先定义的主题集的限制,虽然对于搜索引擎,这不失为一种有效的方法,但对于围绕用户兴趣搜集信息的聚焦爬虫是不够的;在基于关键字的方法中,用户兴趣是用一组关键字来表述的。跟上一种方法相比,它有很大的灵活性。然而用户可能不知道如何来准确的表达自己的兴趣,更有可能用户对于自己需要搜集的目标也不是很明确。比如说,一个数码相机的新手,对生产厂家、型号、相机商店等都不熟悉。

为了帮助用户表达自己的需要,并通过若干次试验和分析,文中所设计的聚焦爬虫给用户提供了另一种主题定制的机制,它结合了前两种方法,各取其长:用户用一组网页以及若干主题关键字一起来表达用户兴趣。爬虫根据用户指定的页面主动学习,并抓获关键字供用户参考。这个机制结合了关键词建议、修改查询、以及文档分类等方法。用户可以选择或自己填入关键字。具体算法步骤如下:

(1)用户指定初始关键字;

(2)CFC根据用户关键字从google(www.google.com)上获取网页;

(3)用户从(2)中选取感兴趣的网页;

(4)CFC从用户选取的网页中提取特征关键字(利用TF-IDF算法,Term Frequency Inverse Document Frequency方法,稍后详述),交给用户选择;

(5)用户选择(4)中的关键字,CFC根据新的关键字,重复1~4步,直到用户觉得没有必要继续进行为止。

网页主题特征提取:

每一个网页文本使用一个特征词向量来表示的,即W(w1,w2,w3,…,wn),其中wi表示第i个特征词的权值,n是所有文档中特征词的中数量,wi用以下方法计算[1]

wi=filog(D/hi)i=1D[filog(D/hi)]2(1)

在上式中,D表示训练文档集的文档数,hi表示文档集中包含第i个特征词的文档个数,fi表示在特征词在文档集中出现的次数,从式(1)中可见,某个特征词在一篇文档中出现的频率越高,该特征词的权值wi就越大;而如果它在所有文档中的频率计数越大,那么该特征词就不能很好地把该文档与其他文档区分开来,所以其权值就越小。文中通过为特征词权重设定阀值的方法来降低特征向量的维度。

2.2 主题判断

主题判断即页面主题相关度的计算,目前有很多方法,比如:Native Bays、神经网络、实例映射模型、向量空间模型等。其中向量空间模型计算简洁、效率较高,是目前网络信息发现较好的计算方法。文中采用基于向量空间模型(VSM)的简单向量距离算法[2] 如下:

(1)从用于训练的文档中提炼特征关键字,关键字的集合为特征向量T(t1,t2,t3,…,tn) (在主题训练部分已完成);

(2) 计算各个特征关键字在训练文档中的权重W(w1,w2,w3,…,wn)。文中所采用的方法是计算各个关键字在各文档中权重的算术平均值;

(3)对于当前文档X,根据以下公式计算主题相似度

Sim(X)=cosθ=k=1ΜXk×wk(k=1ΜXk2)(k=1Μ)(2)

其中,Xk为特征向量的第k维关键字在文档中的权重;wk为第k维关键字在训练文档集中的权重。如果相似度小于预定的阀值,则抛弃该页面,反之,则将其保存至数据库。

2.3 隧道穿越机制

往往主题相关的网页由主题不相关的网页链接着,这种模式就构成了“隧道”,“‘隧道穿越’就是穿过一系列主题不相关的网页到达主题相关的目标网页的过程[3]”。“隧道穿越”一直是网络信息搜索的难点之一。文中采用以下算法,实现隧道穿越。

爬虫遇到主题不相关页面时,仍继续提取此页面的链接,沿此页面继续爬行,直到出现主题相关页面或者不相关网页的深度超过预定义的深度阀值。深度阀值是指允许的最大隧道长度,文中取值为3。

计算不相关页面的深度时,如果当前不相关页面的父页面是主题相关的,则其深度为0;如果其父页面也是主题不相关的,则其深度为父页面的深度加1。

2.4 URL队列

爬虫从相关网页中提取链接后,将链接加入URL队列中。URL的排队策略决定网页下载顺序,从而影响聚焦爬虫的性能。在理想状态下,都希望按照目标网页和主题的相关程度来进行排序。难点在于,在网页下载之前,就需要预测到网页的主题相关度。所以必须根据主题训练和爬行过程来“预测”网页的主题相关性。

在爬虫下载页面中,最典型的策略就是BFS(Breadth-First Search,广度优先搜索),因为他更容易寻找到高质量的页面。但这种方法有一个缺点就是爬行过程中产生庞大的URL队列,十分耗费计算机资源。在采用DFS(Depth-First Search,深度优先)方法时队列小很多。但深度优先方法有很多缺点,譬如他需要花费很长时间才能找到高质量的网页;它将爬虫局限在一个或几个网站内,这样做“很不礼貌”;也很容易造成循环下载进入“爬虫陷阱”。鉴于以上情况,文中采用Sydney[4]策略,保证了广度优先的优点,同时大幅度减少了URL队列长度。文中采用非递归的下载算法,主要构造PSV这3个队列,P为主要队列,A为辅助队列,D为已下载队列,R URL队列的一个随机样本,以上队列一并存储URL及其LinkScore值。算法伪代码如下:

说明:

(1)从P中选择一个主题相关度较高的URL的方法:

P队列中的前200个URL中选择主题相关度最高的一个URL赋值给v,如果P队列中URL已不足200个,则取P中最高的。这样使得相关度高的链接获得优先下载权。

(2)URL的LinkScore的计算方法:

LinkScore(u)= URLScore(u)+AnchorScore(u),URLScore(u)来自上下文的主题相关性,AnchorScore(u)是锚文本的主题相关性。他的计算方法参考前面的相似度计算公式。

2.5 更新机制

现有的网络爬虫更新机制主要有两类:批量更新和增量更新。批量更新耗时长、耗费资源;增量更新有更高的时效性,但实现起来难度大。但文献[5]显示,批量更新机制可以达到很高的新鲜度,文中爬虫是针对主题的,它所涉及的资源只占整个网络的一小部分,数据规模与通用爬虫系统相比较要小很多,文中采用批量更新的方法,即爬虫每隔一段时间对整个资源扫描一遍。

3 结束语

随着互联网的发展,面向特定领域的网络信息采集已经成为研究热点。文中设计了一个可行的爬行方案,主要利用了TF-IDF、VSM等算法,具有高效、节省资源、主题定制性的特点。

隧道穿越机制在国内外的研究中涉及较少,文中给出一个简单易行的方案,但不能完全满足网络信息分散性的特点,更好的方案仍在进一步的研究之中。

参考文献

[1]Diligenti M,Coetze M,Lawrence S,et al.Focused Craw-ling Using Context Graphs[C].Cairo:Proc of the26th International Conference on Very Large DataBases,2000:527-534.

[2]Jong Tsay Jyh,Yang Shih Chen,Wu Bo Liang.AutoCrawl-er:An Integrated Systemfor Automatic Topical Crawler[C].In:Proceedings of the Fourth Annual ACIS International Con-ference on Computer and Information Science,1999.

[3]方启明,杨广文,武永卫,等.面向P2P搜索的可定制聚焦网络爬虫[J].华中科技大学学报:自然科学版,2006,35(9):65-68.

[4]Carlos Castillo,Alberto Nelli,Alessandro Panconesi.A Memory-Efficient Strategy for Exploring the Web[C].Proceedings of the2006IEEE/WIC/ACM International Conference on Web Intelligence,2006.

上一篇:花卉市场下一篇:农科知识论文