搜索引擎如何抓取网页(海豚全网搜索引擎技术框架爬虫系统的开发流程及项目展示 )
优采云 发布时间: 2021-11-16 09:05搜索引擎如何抓取网页(海豚全网搜索引擎技术框架爬虫系统的开发流程及项目展示
)
前言
下面文章是对搜索引擎的一般介绍,搜索引擎的开发过程请移步这里:搜索引擎开发过程
项目展示:海豚全网搜索引擎
一、爬虫系统的诞生
一般搜索引擎的处理对象是互联网网页。目前互联网网页的数量已达到数百亿。因此,搜索引擎面临的第一个问题就是如何设计一个高效的下载系统,将如此大量的网页数据传输到本地。在本地形成互联网网页的镜像备份。
网络爬虫能起到这样的作用,完成这个艰巨的任务,是搜索引擎系统中非常关键、非常基础的一个组件。
本文主要介绍与网络爬虫相关的技术。虽然爬虫经过几十年的发展,整体框架已经比较成熟,但是随着互联网的不断发展,它们也面临着一些新的挑战。
二、通用爬虫技术框架
爬虫系统首先从互联网页面中仔细选择一部分网页,将这些网页的链接地址作为*敏*感*词*URL,将这些*敏*感*词*放入URL队列中进行爬取。爬虫依次从待爬取的URL队列中读取,通过DNS Resolve传递URL,将链接地址转换为网站服务器对应的IP地址。
然后把它和网页的相对路径名交给网页下载器,网页下载器负责页面的下载。
对于本地下载的网页,一方面将其存储在页面库中,等待索引等后续处理;另一方面,将下载的网页的URL放入爬取队列,记录爬虫系统已经下载了它。网页网址,避免系统重复抓取。
对于新下载的网页,提取其中收录的所有链接信息,并在下载的URL队列中查看。如果发现该链接没有被爬取,则将其放在待爬取的URL队列的末尾。该网址对应的网页会在后续的抓取进度中下载。
这样就形成了一个循环,直到待爬取的URL队列为空,表示爬虫系统能够爬取的所有网页都已经爬取完毕,一个完整的爬取过程到此结束时间。
通用爬虫架构
以上就是一个通用爬虫的整体流程。如果从更宏观的角度考虑,动态抓取过程中的爬虫与互联网上所有网页的关系可以概括为以下五个部分:
下载网页的组合:爬虫已经从互联网上下载到本地索引的网页集合。
过期网页组合:由于网页数量较多,爬虫需要很长时间才能完成一次完整的爬取。在爬取过程中,很多下载的网页可能已经更新,导致过期。这是因为互联网网页处于不断动态变化的过程中,所以很容易产生本地网页内容与真实互联网的不一致。
待下载网页集合:URL队列中待抓取的网页,这些网页即将被爬虫下载。
已知网页集合:这些网页没有被爬虫下载,也没有出现在待抓取的URL队列中。通过已经爬取过的网页或者待爬取的URL队列中的网页,总能通过链接关系找到。稍后它将被爬虫抓取和索引。
未知网页集合:部分网页无法被爬虫抓取,这部分网页构成了未知网页的组合。事实上,这部分网页所占的比例很高。
网页划分
从理解爬虫的角度,以上对网页的划分有助于理解搜索引擎爬虫所面临的主要任务和挑战。大多数爬虫系统都遵循上述流程,但并非所有爬虫系统都如此一致。根据不同的具体应用,爬虫系统在很多方面都有所不同。一般来说,爬虫系统可以分为以下三种类型:
1. 批量爬虫:批量爬虫有比较明确的爬取范围和目标。当爬虫到达设定的目标时,它停止爬行过程。
至于具体的目标,可能不一样,可能是设置抓取一定数量的网页,也可能是设置抓取时间等等,都是不同的。
2.增量爬虫:增量爬虫与批量爬虫不同,它会保持持续的爬行,爬取的网页必须定期更新。
由于互联网网页在不断变化,新的网页、被删除的网页或网页内容的变化是很常见的。增量爬虫需要及时反映这种变化,所以它们处于不断爬行的过程中,而不是爬行新的。该网页正在更新现有网页。常见的商业搜索引擎爬虫基本都属于这一类。
3.垂直爬虫:垂直爬虫专注于特定主题内容或属于特定行业的网页。例如,对于健康网站,您只需要从互联网页面中查找与健康相关的页面内容。不考虑其他行业的内容。
垂直爬虫最大的特点和难点之一就是如何识别网页内容是否属于特定的行业或主题。
从节省系统资源的角度考虑,下载后无法过滤所有网页,会造成资源的过度浪费。爬虫往往需要在爬取阶段动态识别某个网址是否与主题相关,尽量不去爬取不相关的页面,以达到节约资源的目的。垂直搜索网站或者垂直行业网站往往需要这种类型的爬虫。
三、优秀爬虫的特点
优秀爬虫的特点针对不同的应用是不同的,但实用的爬虫应该具备以下特点:
1.高性能
互联网上的网页数量庞大,因此爬虫的性能非常重要。这里的性能主要是指爬虫下载网页的爬行速度。一种常见的评估方法是以爬虫每秒可以下载的网页数量作为性能指标。单位时间内可以下载的网页越多,爬虫的性能就越高。
为了提高爬虫的性能,程序访问磁盘的方法和具体实现时数据结构的选择至关重要。比如对于待爬取的URL队列和已经爬取过的URL队列,由于URL的数量非常多,不同实现方式的性能差异很大,所以高效的数据结构对爬虫的影响很大表现。
2.可扩展性
即使单个爬虫的性能非常高,下载到本地所有网页仍然需要很长时间。为了尽可能缩短爬取周期,爬虫系统应该具有良好的可扩展性,即很容易增加Grab的服务器和爬虫数量来达到这个目的。
目前可用的大型网络爬虫必须是分布式的,即多台服务器专用于爬取。每个服务器部署多个爬虫,每个爬虫运行在多个线程中,以多种方式增加并发。
对于大型搜索引擎服务商来说,可能需要在全球、不同区域部署数据中心,并且爬虫也被分配到不同的数据中心,这对于提升爬虫系统的整体性能非常有帮助。
3. 鲁棒性
爬虫想要访问各种类型的网站服务器,可能会遇到很多异常情况:比如网页HTML编码不规范,被爬取的服务器突然崩溃,甚至爬虫陷阱。爬虫能够正确处理各种异常情况非常重要,否则可能会时不时停止工作,难以忍受。
从另一个角度来看,假设爬虫程序在爬取过程中死亡,或者爬虫所在的服务器宕机,一个健壮的爬虫应该能够做到:当爬虫再次启动时,之前爬取的内容和数据结构可以被恢复。不必每次都从头开始做所有的工作,这也是爬虫健壮性的体现。
4.友善
爬虫的友善有两层意思:一是保护网站的部分隐私;另一个是减少网站被爬取的网络负载。爬虫爬取的对象是各种类型的网站。对于网站的拥有者来说,有些内容不想被大家搜索到,所以需要设置一个协议来通知爬虫哪些内容是不允许爬取的。目前实现这一目标的主流方法有两种:爬虫禁止协议和网页禁止标记。
禁止爬取协议是指网站的所有者生成的一个指定文件robot.txt,放置在网站服务器的根目录下。该文件指定了网站中哪些目录不允许爬虫爬取以下网页。一个友好的爬虫在爬取网站网页之前必须先读取robot.txt文件,不会下载禁止爬取的网页。
网页禁止标记一般会在网页的HTML代码中添加meta name="robots"标记,内容字段表示允许或不允许爬虫的哪些行为。可以分为两种情况:一种是告诉爬虫不要索引网页的内容,以noindex为标志;另一种是告诉爬虫不要爬取网页中收录的链接,以nofollow为标志。这样,就可以实现对网页内容的一种隐私保护。
遵循上述协议的爬虫可以认为是友好的,这是从保护隐私的角度考虑的;另一种友善是希望爬虫对某个网站的访问会造成较低的网络负载。.
爬虫一般会根据网页的链接不断获取某个网站网页。如果爬虫频繁访问网站,会对网站服务器造成很大的访问压力,有时甚至会影响到它。网站 的正常访问会导致类似于 DOS 攻击的效果。
为了降低网站的网络负载,友好的爬虫在部署爬取策略的时候应该考虑每一次被爬取的网站的负载,在短时间内减少对站点的单次高频访问时间。
四、 爬虫质量评价标准
从搜索引擎用户体验的角度来看,爬虫的有效性有不同的评价标准。三个主要标准是:被抓取网页的覆盖率、抓取网页的新颖性和抓取网页的重要性。如果这三个方面做得好,搜索引擎的用户体验一定是好的。
对于现有的搜索引擎来说,没有一种搜索引擎能够下载并索引出现在互联网上的所有网页,所有的搜索引擎只能索引互联网的一部分。所谓爬取覆盖率是指爬虫所爬取的网页数量占互联网上所有网页数量的比例。覆盖率越高,搜索引擎召回率越高,用户体验越好。
索引页和互联网页的比较
抓取到的本地网页很可能发生了变化,或者被删除,或者内容发生了变化。因为爬虫需要很长时间才能完成一轮爬取,所以爬取到的部分网页肯定已经过时了。网页改变后,数据无法立即反映到网页库中。因此,网页库中的过时数据越少,网页的新鲜度就越好,这对提升用户体验大有裨益。
如果时效性不好,搜索到的数据全部过时,或者网页被删除,用户的内心感受可想而知。
尽管互联网上有很多网页,但每个网页都大不相同。例如,腾讯和网易新闻的网页与作弊网页一样重要。如果搜索引擎抓取的网页大部分是比较重要的网页,说明他们在抓取网页的重要性方面做得不错。在这方面做得越好,搜索引擎的搜索准确性就越高。
通过以上三个标准的解释和分析,爬虫研发的目标可以简单描述如下: 在资源有限的情况下,由于搜索引擎只能抓取互联网上现有网页的一部分,那么尽量选择更重要的部分进行页面索引;对已爬取的网页,尽快更新内容,使索引页面的内容与互联网上对应的页面同步更新;在此基础上,尽可能扩大爬取范围,爬取更多之前找不到的Page。
这三个“尽可能”基本明确了爬虫系统提升用户体验的目标。
为了满足这三个质量标准,大多数大型商业搜索引擎都开发了一些针对性很强的爬虫系统。以Google为例,它至少收录两种不同的爬虫系统:一种叫做Fresh Bot,主要考虑网页的新鲜度。对于内容更新频繁的网页,可以达到当前秒更新周期;另一套被称为Deep Crawl Bot,主要用于抓取更新不那么频繁的网页,更新周期为天。
此外,谷歌还投入了大量精力开发暗网爬虫系统。后续有时间我们会讲解暗网系统。
谷歌的两个爬虫系统
五、最终总结
阅读本文,通过了解爬虫的技术架构、爬虫的种类、优秀爬虫的特点、爬虫质量标准,相信你对爬虫系统有了初步的系统了解,最后对主要知识点做一个简要的程序总结:
爬虫爬取网页工作流程:选择要爬取的网页,依次放入爬取队列;系统将网页的链接地址依次转换为IP地址,下载到本地后进行存储和标记,避免重复下载;继续进行新一轮的爬行,一次又一次地重复。
爬虫与互联网上所有网页的关系:结合已下载页面、结合过期页面、结合待下载页面、结合已知页面、结合未知页面
爬虫类型:批量爬虫、增量爬虫、垂直爬虫
优秀爬虫的特点:高性能、可扩展性、健壮性、友好性
爬虫质量评价标准:被抓取网页的覆盖范围、抓取网页的新鲜度、抓取网页的重要性
我的搜索引擎项目地址:海豚搜索
如果你也对搜索引擎感兴趣,可以一起交流