热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

浅析搜索引擎蜘蛛抓取网页规则

搜索引擎面对的是互联网万亿网页,如何高效抓取这么多网页到本地镜像?这便是网络爬虫的工作。我们也叫它网络蜘蛛,做为站长,我们每天都在与它亲密接触。一,爬虫框架上图

搜索引擎面对的是互联网万亿网页,如何高效抓取这么多网页到本地镜像?这便是网络爬虫的工作。我们也叫它网络蜘蛛,做为站长,我们每天都在与它亲密接触。

一,爬虫框架

上图是一个简单的网络爬虫框架图。种子URL入手,如图所示,经过一步步的工作,最后将网页入库保存。当然,勤劳的蜘蛛可能需要做更多的工作,比如:网页去重以及网页反作弊等。

也许,我们可以将网页当作是蜘蛛的晚餐,晚餐包括:

已下载的网页。已经被蜘蛛抓取到的网页内容,放在肚子里了。

已过期网页。蜘蛛每次抓取的网页很多,有一些已经坏在肚子里了。

待下载网页。看到了食物,蜘蛛就要去抓取它。

可知网页。还没被下载和发现,但蜘蛛能够感觉到他们,早晚会去抓取它。

不可知网页。互联网太大,很多页面蜘蛛无法发现,可能永远也找不到,这部份占比很高。

通过以上划分,我们可以很清楚的理解搜索引擎蜘蛛的工作及面临的挑战。大多数蜘蛛是按照这样的框架去爬行。但也不完全一定,凡事总有特殊,根据职能的不同,蜘蛛系统存在一些差异。

二,爬虫类型

1,批量型蜘蛛。

这类蜘蛛有明确的抓取范围和目标,当蜘蛛完成目标和任务后就停止抓取。具体目标是什么?可能是抓取网页数量,网页大小,抓取时间等。

2,增量型蜘蛛

这类蜘蛛和批量型蜘蛛不同,他们会持续不断的抓取,对于抓取到的网页会定期抓取更新。因为互联网中的网页是随时处于更新状态中,增量型蜘蛛需要能够反映出这种更新。

3,垂直性蜘蛛

这种蜘蛛只关注特定主题或者特定的行业网页。以健康网站为例子,这类专门的蜘蛛会只抓取健康相关主题,其它主题内容的网页则不抓取。考验这只蜘蛛的难点是如何去更精准的识别内容所属于行业。目前来看,很多垂直类行业网站是需要这种蜘蛛去抓取的。

三,抓取策略

蜘蛛通过种子URL进行爬行拓展,列出大量待抓取URL。但是待抓取URL数量庞大,蜘蛛如何确定抓取顺序先后呢?蜘蛛抓取的策略有很多种,但最终目的是一 个:优先抓取重要的网页。评价页面是否重要,蜘蛛会根据页面内容原创程度,链接权重分析等众多方式来进行计算。比较有代表性的抓取策略如下:

1,宽度优先策略

宽度优先是指:蜘蛛在抓取一个网页后,继续将该网页所包含的其它页面按顺序进行进一步抓取。这种思想看似简单,其实却很实用。因为大多数网页都是按优先级进行排序,重要的页面会优先在页面上进行推荐。

2,PageRank策略

PageRank是一种非常著名的链接分析方法,主要是用来衡量网页权重。如谷歌的PR,就是典型的PageRank算法。通过PageRank算法我们可以找出哪些页面是更重要的,然后蜘蛛优先去抓取这些重要性的页面。

3,大站优先策略

这个很容易理解,大网站通常拥有更多的内容页面,并且质量也会更高。蜘蛛会先分析网站归类与属性。如果这个网站已经收录很多,或者在搜索引擎系统中权重很高,则优先考虑收录。

四,网页更新

互联网中的页面大多会保持更新,这样就要求蜘蛛所存储的页面也能及时更新,保持一致性。打个比喻:一个网页之前排名很好,如果页面已经被删,却还有排名,那 体验就很不好。因此搜索引擎需要随时了解这些并更新页面,将最新的页面提供给用户。常用的网页更新策略在三种:历史参考策略,用户体验策略。聚类抽样策 略。

1,历史参考策略

这是建立在一种假设基础上的更新策略。比如,若你的网页之前按规律一直更新,那搜索引擎也认为你的页面将来也会经常更新,蜘蛛也会按这个规律定期来网站进行抓取网页。这也是为什么点水一直强调网站内容需要有规律更新的原因。

2,用户体验策略

一般来说,用户只会查看搜索结果前三页的内容,后面的页面很少有人去看。用户体验策略就是搜索引擎根据用户的这个特点来进行更新。例如,一个网页可能发布时 间较早,一段时间没更新,但是用户依然觉得有用,点击浏览它,那么搜索引擎先不去更新这些过时的网页也是可以的。这就是为什么搜索结果中,并不一定最新的 页面排名一定靠前的原因。排名更多的是取决于这个页面的质量,而完全不是更新时间先后。

3,聚类抽样策略

上两种更新策略主要是参考了网页的历史信息。但存储大量历史信息对搜索引擎来说是一种负担,另外如果收录的是新网页则是没有历史信息可以参考的,那怎么办? 聚类抽样策略是指:根据网页所展现出来的一些属性,来将很多相似网页进行归类,被归类的页面按照相同的规律去进行更新。

从了解搜索引擎蜘 蛛工作原理的过程中,我们会知道:网站内容之间的相关性,网站与网页内容更新规律,网页上链接分布以及网站权重高低等因素都会影响到蜘蛛的抓取效率。知已 知彼,让蜘蛛来得更猛烈些吧!

 

推荐阅读
  • 本文探讨了在AspNetForums平台中实施基于角色的权限控制系统的方法,旨在为不同级别的用户提供合适的访问权限,确保系统的安全性和可用性。 ... [详细]
  • Python环境下OpenCV的安装与验证方法
    本文介绍了如何在Python环境中安装OpenCV库及其额外模块,并提供了验证安装是否成功的具体步骤和代码示例。 ... [详细]
  • Excel技巧:单元格中显示公式而非结果的解决方法
    本文探讨了在Excel中如何通过简单的方法解决单元格显示公式而非计算结果的问题,包括使用快捷键和调整单元格格式两种方法。 ... [详细]
  • Java中提取字符串的最后一部分
    本文介绍了如何使用Java中的substring()和split()方法来提取字符串的最后一部分,特别是在处理包含特殊字符的路径时的方法与技巧。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 新型量子内核助力机器学习分类
    国际科研团队开发出一种创新的量子机器学习分类方法,利用非线性量子内核显著提升了分类精度,为未来量子计算技术的发展开辟了新路径。 ... [详细]
  • 如何寻找程序员的兼职机会
    随着远程工作的兴起,越来越多的程序员开始寻找灵活的兼职工作机会。本文将介绍几个适合程序员、设计师、翻译等专业人士的在线平台,帮助他们找到合适的兼职项目。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 对于非计算机专业背景的开发者而言,如何快速掌握.NET基础知识以应对技术面试是一个挑战。本文将提供一系列实用建议,帮助读者在短时间内提高.NET基础水平。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本文介绍了在达梦数据库(DM7)中通过两种方法实现两表之间的联接更新操作,包括使用子查询的更新语句和MERGE语句的具体应用。 ... [详细]
author-avatar
小猴子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有