网站内容更新工作方案(Sun网络爬虫的基本结构及工作流程(组图))
优采云 发布时间: 2021-11-13 19:12网站内容更新工作方案(Sun网络爬虫的基本结构及工作流程(组图))
日期:2019-06-02
作者:孙
网络爬虫
网络爬虫是搜索引擎爬虫系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地,形成网络内容的镜像备份。
爬虫是模拟用户在浏览器或应用程序上的操作,实现操作和自动化过程的程序。
当我们在浏览器中输入一个 url 并按 Enter 时,后台会发生什么?例如,如果您键入
简单的说,在这个过程中发生了以下四个步骤:
1. 网络爬虫的基本结构和工作流程
网络爬虫的基本工作流程如下:
1.首先选择一些精心挑选的*敏*感*词*网址;
2. 将这些网址放入要抓取的网址队列;
3. 从待爬取的URL队列中取出待爬取的URL,解析DNS,获取主机ip,下载该URL对应的网页,并存储到下载的网页库中。另外,将这些 URL 放入爬取的 URL 队列中。
4.对爬取的URL队列中的URL进行分析,分析其中的其他URL,将这些URL放入URL队列进行爬取,从而进入下一个循环。
一个通用的网络爬虫框架如图:
从爬虫的角度来划分互联网
互联网的所有页面可以分为五个部分:
1.下载了未过期的网页
2.已下载并过期的网页:抓取的网页实际上是互联网内容的镜像和备份。互联网是动态变化的,互联网上的一些内容已经发生了变化。此时,这部分爬取到的页面已经过期。
3.要下载的页面:URL队列中要爬取的那些页面
4. 可识网页:尚未被抓取,也不在待抓取的 URL 队列中,但通过分析抓取的页面或待抓取 URL 对应的页面得到的 URL,被认为是一个已知网页。
5.还有一些网页是爬虫无法直接抓取下载的。它被称为不可知页面。
2. 获取策略
在爬虫系统中,待爬取的URL队列是一个非常重要的部分。URL队列中要爬取的URL的顺序也是一个很重要的问题,因为它涉及到先爬哪个页面,后爬哪个页面。确定这些 URL 顺序的方法称为抓取策略。下面重点介绍几种常见的爬取策略:
(1)深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,逐个跟踪每一个链接,处理完这一行后转移到下一个起始页,继续跟踪链接。我们以下图为例:
遍历的路径:AFG EHI BCD
(2)宽度(广度)优先遍历策略
广度优先遍历策略的基本思想是将新下载的网页中找到的链接直接插入到待抓取的URL队列的末尾。即网络爬虫会先抓取起始网页中链接的所有网页,然后选择其中一个链接的网页,继续抓取该网页中链接的所有网页。以上图为例:
遍历路径:ABCDEF GHI
(3)反向链接计数策略
反向链接数是指从其他网页链接到某个网页的数量。反向链接的数量表示网页内容被他人推荐的程度。因此,很多时候搜索引擎的爬取系统都会使用这个指标来评估网页的重要性,从而决定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量不能被视为最重要的因素。因此,搜索引擎通常会考虑一些可靠的反向链接。
(4)部分 PageRank 策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,连同要爬取的URL队列中的URL,组成一个网页集,计算每个页面的PageRank值,经过计算完成,将要抓取的网址放入队列中,网址按照PageRank值的大小排列,按照这个顺序抓取网页。
如果每个页面都被抓取,则重新计算 PageRank 值。一个折衷的解决方案是每次抓取 K 个页面时重新计算 PageRank 值。但是,这种情况下仍然存在一个问题:对于从下载页面中分析出来的链接,也就是我们前面提到的未知网页部分,暂时没有PageRank值。为了解决这个问题,这些页面会被赋予一个临时的PageRank值:将所有传入该页面链中的PageRank值汇总,从而形成未知页面的PageRank值
(5)大站优先策略
对于URL队列中所有要爬取的网页,按照所属的网站进行分类。网站需要下载的页面较多,优先下载。这种策略因此被称为大站优先策略。
3. 更新策略
互联网实时变化,高度动态。网页更新策略主要是决定什么时候更新之前下载过的页面。常见的更新策略有以下三种:
(1)历史参考攻略
顾名思义,根据页面之前的历史更新数据,预测页面未来什么时候会发生变化。一般来说,预测是通过泊松过程建模进行的。
(2)用户体验策略
虽然搜索引擎可以针对某个查询条件返回海量的结果,但用户往往只关注结果的前几页。因此,爬虫系统可以先更新那些实际在查询结果前几页的网页,然后再更新后面的那些网页。此更新策略还需要历史信息。用户体验策略保留网页的多个历史版本,并根据过去每次内容变化对搜索质量的影响取平均值,并以此值作为决定何时重新抓取的依据。
(3) 聚类抽样策略
上面提到的两种更新策略都有一个前提:需要网页的历史信息。这种方式存在两个问题:第一,如果系统为每个系统保存多个版本的历史信息,无疑会增加系统的负担;第二,如果新网页根本没有历史信息,就无法确定更新策略。
该策略认为网页有很多属性,属性相似的网页可以认为更新频率相似。要计算某一类网页的更新频率,只需对该类网页进行采样,并将其更新周期作为整个类别的更新周期。基本思路如图:
4. 分布式爬虫系统结构
一般来说,爬虫系统需要面对整个互联网上亿万个网页。一个抓取程序不可能完成这样的任务。通常需要多个抓取程序来一起处理。一般来说,爬虫系统往往是分布式的三层结构。如图所示:
底层是分布在不同地理位置的数据中心。在每个数据中心,有多个爬虫服务器,每个爬虫服务器可能部署了多套爬虫程序。这就构成了一个基本的分布式爬虫系统。
对于数据中心不同的抓取服务器,有以下几种方式协同工作:
1.主从
主从式的基本结构如图:
对于主从模式,有专门的Master服务器来维护要爬取的URL队列。它负责每次将 URL 分发到不同的 Slave 服务器,Slave 服务器负责实际的网页下载工作。Master服务器除了维护要爬取的URL队列和分发URL之外,还负责调解各个Slave服务器的负载。为了避免一些Slave服务器太闲或太累。
在这种模式下,Master往往会成为系统瓶颈。
2.点对点
点对点方程的基本结构如图所示:
在这种模式下,所有爬取服务器之间的分工没有区别。每个爬虫服务器都可以从要爬取的URL队列中获取URL,然后得到该URL主域名的hash值H,然后计算H mod m(其中m为服务器数量,上图为比如m是3),计算出来的数字就是处理这个URL的主机号。
例如:
假设对于URL,计算器hash值H=8,m=3,那么H mod m=2,那么编号为2的服务器就会抓取链接。假设此时服务器0获取到了URL,它会将URL转发给服务器2,服务器2就会抓取它。
这个模型有问题。当服务器崩溃或添加新服务器时,所有 URL 的哈希余数的结果将发生变化。换句话说,这种方法的可扩展性不好。针对这种情况,又提出了另一个改进方案。这种改进的方案是通过一致性哈希来确定服务器分工。其基本结构如图:
一致性哈希对 URL 的主域名进行哈希处理,并将其映射到 0-232 范围内的数字。这个范围平均分配给m台服务器,通过URL主域名的hash运算的值的范围来判断使用哪个服务器进行爬取。
如果某台服务器出现问题,那么应该负责该服务器的网页会顺时针推迟,下一个服务器会被抓取。在这种情况下,如果一个服务器及时出现问题,不会影响其他任务。
参考书目:
《这是核心技术的搜索引擎详解》张俊林电子工业出版社
《搜索引擎技术基础》刘义群等。清华大学出版社