四、更新策略
互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种:
1.历史参考策略
顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。
2.用户体验策略
    尽管搜索引擎针对于某个查询条件能够返回数量巨大的结果,但是用户往往只关注前几页结果。因此,抓取系统可以优先更新那些现实在查询结果前几页中的网页,而后再更新那些后面的网页。这种更新策略也是需要用到历史信息的。用户体验策略保留网页的多个历史版本,并且根据过去每次内容变化对搜索质量的影响,得出一个平均值,用这个值作为决定何时重新抓取的依据。
    3.聚类抽样策略
前面提到的两种更新策略都有一个前提:需要网页的历史信息。这样就存在两个问题:第一,系统要是为每个系统保存多个版本的历史信息,无疑增加了很多的系统负担;第二,要是新的网页完全没有历史信息,就无法确定更新策略。

这种策略认为,网页具有很多属性,类似属性的网页,可以认为其更新频率也是类似的。要计算某一个类别网页的更新频率,只需要对这一类网页抽样,以他们的更新周期作为整个类别的更新周期。基本思路如图:

五、分布式抓取系统结构
    一般来说,抓取系统需要面对的是整个互联网上数以亿计的网页。单个抓取程序不可能完成这样的任务。往往需要多个抓取程序一起来处理。一般来说抓取系统往往是一个分布式的三层结构。如图所示:

最下一层是分布在不同地理位置的数据中心,在每个数据中心里有若干台抓取服务器,而每台抓取服务器上可能部署了若干套爬虫程序。这就构成了一个基本的分布式抓取系统。
对于一个数据中心内的不同抓去服务器,协同工作的方式有几种:
1.主从式(Master-Slave)
主从式基本结构如图所示:

对于主从式而言,有一台专门的Master服务器来维护待抓取URL队列,它负责每次将URL分发到不同的Slave服务器,而Slave服务器则负责实际的网页下载工作。Master服务器除了维护待抓取URL队列以及分发URL之外,还要负责调解各个Slave服务器的负载情况。以免某些Slave服务器过于清闲或者劳累。
这种模式下,Master往往容易成为系统瓶颈。
2.对等式(Peer to Peer)
对等式的基本结构如图所示:

在这种模式下,所有的抓取服务器在分工上没有不同。每一台抓取服务器都可以从待抓取在URL队列中获取URL,然后对该URL的主域名的hash值H,然后计算H mod m(其中m是服务器的数量,以上图为例,m为3),计算得到的数就是处理该URL的主机编号。
举例:假设对于URL www.baidu.com,计算器hash值H=8,m=3,则H mod m=2,因此由编号为2的服务器进行该链接的抓取。假设这时候是0号服务器拿到这个URL,那么它将该URL转给服务器2,由服务器2进行抓取。
这种模式有一个问题,当有一台服务器死机或者添加新的服务器,那么所有URL的哈希求余的结果就都要变化。也就是说,这种方式的扩展性不佳。针对这种情况,又有一种改进方案被提出来。这种改进的方案是一致性哈希法来确定服务器分工。其基本结构如图所示:

一致性哈希将URL的主域名进行哈希运算,映射为一个范围在0-232之间的某个数。而将这个范围平均的分配给m台服务器,根据URL主域名哈希运算的值所处的范围判断是哪台服务器来进行抓取。
如果某一台服务器出现问题,那么本该由该服务器负责的网页则按照顺时针顺延,由下一台服务器进行抓取。这样的话,及时某台服务器出现问题,也不会影响其他的工作。

参考书目:

1.《这就是搜索引擎——核心技术详解》  张俊林  电子工业出版社

2.《搜索引擎技术基础》         刘奕群等 清华大学出版社

author:wawlian
save me from myself

转载于:https://www.cnblogs.com/telwanggs/p/5007628.html

网络爬虫基本原理(二)相关推荐

  1. java爬取网页数据_Python网络爬虫实战(二)数据解析

    Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...

  2. 网络爬虫基本原理(一)

    本文转载至 http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html 网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫的主要目的是将互 ...

  3. 基于C#.NET的高端智能化网络爬虫(二)(攻破携程网)

    本篇故事的起因是携程旅游网的一位技术经理,豪言壮举的扬言要通过他的超高智商,完美碾压爬虫开发人员,作为一个业余的爬虫开发爱好者,这样的言论我当然不能置之不理.因此就诞生了以及这一篇高级爬虫的开发教程. ...

  4. Python3网络爬虫(十二):初识Scrapy之再续火影情缘

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 ...

  5. python编写爬虫的步骤-python网络爬虫(二)编写第一个爬虫

    抓取网站数据通常需要先下载网页,这个过程称为爬取.爬取网站通常有3种常见方法: 爬取网站地图 遍历每个页面的数据库ID 跟踪每个网页链接 想要爬取网页,首先要将其下载下来.下面使用Python的url ...

  6. 老蜗牛写采集:网络爬虫(二)

    短小精悍的xNet 这个一个俄国牛人写的开源工具,为啥说他强悍了,因为他将所有Http协议的底层都实现了一遍,这有啥好处?只要你是写爬虫的,都会遇到一个让人抓狂的问题,就是明明知道自己Http请求头跟 ...

  7. Python写网络爬虫(二)

    文章目录 动态加载数据 Ajax的特点 快速验证数据是否为Ajax请求获取得到 爬取某电影网站分类排行榜 - 喜剧片 爬取某餐厅位置信息 爬取某总局企业信息 总结 通过上一篇爬虫入门,已经了解到了爬虫 ...

  8. Python网络爬虫(二):多线程爬取小说

    这里我们爬取的小说是网站:笔趣阁,其中一本小说:一念永恒. (一)准备阶段 1.网站URL:http://www.biqukan.com/1_1094/ 2.浏览器:搜狗 3.我们打开网址,找到搜狗浏 ...

  9. Python网络爬虫实战(二)数据解析

    上一篇说完了如何爬取一个网页,以及爬取中可能遇到的几个问题.那么接下来我们就需要对已经爬取下来的网页进行解析,从中提取出我们想要的数据. 根据爬取下来的数据,我们需要写不同的解析方式,最常见的一般都是 ...

最新文章

  1. pta7-3 统计不及格人数_编写程序,统计学生的成绩信息
  2. 开源一个SpringBoot + Mybatis + Vue的代码生成器
  3. Ubuntu 18.0.4 安装Selenium 详细流程(亲测有效)
  4. 特征描述子提取公用接口
  5. EF中的Code First
  6. JVM调优:常见垃圾回收器组合
  7. 推荐几个最近Star过的Github仓库
  8. imx6 android快速启动,android启动不起来(已解决)
  9. Java面试必问!Spring事务扩展机制(2)
  10. CCCC-GPLT L2-019. 悄悄关注 团体程序设计天梯赛
  11. 【渝粤教育】国家开放大学2019年春季 1248公共部门人力资源管理 参考试题
  12. [原]初次运用数据缓存机制
  13. MUI在iPhone6P上闪退
  14. 冒险岛linux_062服务端,支持arm64_armhf_amd_i386
  15. 对曲线的坐标的积分的斯托克斯公式+参数定积分法
  16. 今日恐慌与贪婪指数为15 恐慌程度小幅上升
  17. 前端VSCode修改Git远程仓库地址链接
  18. 如何修改文件的扩展名(后缀)
  19. TimeGen 软件的实用
  20. 安卓sdk和ndk都是什么?

热门文章

  1. (02)System Verilog logic数据类型详解
  2. Vivado MMCM IP核接口信号介绍
  3. 苹果手机黑屏了怎么办_来电话手机黑屏怎么办
  4. STM32-ADC数模转换
  5. ReentrantLock与synchronized的区别(最直观)
  6. 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)
  7. java序列化kr_序列化专用列表
  8. SpringMVC 阶段总结
  9. Serializable序列化
  10. Python3系列__01Python安装