三种分布式爬虫策略:

(1)Slaver端从Master端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务分配给Master端。Master端只有一个Redis数据库,负责对Slaver提交的任务进行去重、加入待爬队列。

优点

scrapy-redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作scrapy-redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis_key即可。

缺点

scrapy-redis调度的任务是Request对象,里面信息量比较大(不仅包含URL,还有callback函数、headers等信息),会降低爬虫速度,而且会占用Redis大量的存储空间。当然,我们可以重写方法实现调度URL或者用户ID。

(2)Master端跑一个程序去生成任务(Request/url/ID)。Master端负责的是生产任务,并把任务去重,加入到待爬队列中。Slaver端只负责从Master端获取任务进行爬取。

优点

将生成任务和抓取数据分开,分工明确,减少了Master和Slaver端之间的数据交流;Master端生成任务还有一个好处,那就是可以便捷地重写判重策略(当数据量大时优化判重的性能和速度还是很重要的)。

缺点

像QQ或者新浪微博这种网站,发送一个请求,返回的内容里面可能包含几十个待爬的用户ID,即几十个新爬虫任务。但有些网站一个请求只能得到一两个新任务,并且返回的内容里也包含爬虫要抓取的目标信息,如果将生成任务和抓取任务分开反而会降低爬虫抓取效率,毕竟带宽也是爬虫的一个瓶颈问题。我们要秉着发送尽量少的请求为原则,同时也是为了减轻网站服务器的压力,要做一只有道德的Crawler。所以,视情况而定。

(3)Master中只有一个集合,它只有查询的作用。Slaver在遇到新任务时询问Master此任务是否已爬,如果未爬则加入Slaver自己的待爬队列中,Master把此任务记为已爬。它和策略一比较像,但明显比策略一简单。策略一的简单是因为有Scrapy-redis实现了scheduler中间件,它并不适用于非Scrapy框架的爬虫。

优点

实现简单,非Scrapy框架的爬虫也适用。Master端压力比较小,Master与Slaver的数据交流也不大。

缺点

“健壮性”不够,需要另外定时保存待爬队列以实现“断点续爬”功能。各Slaver的待爬任务不通用。

如果把Slaver比作工人,把Master比作工头。策略一就是工人遇到新任务都上报给工头,需要干活的时候就去工头那里领任务;策略二就是工头去找新任务,工人只管从工头那里领任务干活;策略三就是工人遇到新任务时询问工头此任务是否有人做了,没有的话工人就将此任务加到自己的“行程表”。

猜你喜欢:

python爬虫优势和缺点_三种分布式爬虫策略的优缺点相关推荐

  1. python分布式爬虫系统_三种分布式爬虫系统的架构方式

    分布式爬虫系统广泛应用于大型爬虫项目中,力求以最高的效率完成任务,这也是分布式爬虫系统的意义所在. 分布式系统的核心在于通信,介绍三种分布式爬虫系统的架构思路,都是围绕通信开始,也就是说有多少分布式系 ...

  2. python控制示波器获取波形_三种方法教你用示波器快速捕获异常

    万事开头难!当你想用示波器来分析问题时,你一定有想过,我要如何才能把问题抓下来?当然,只有抓下来之后,才能进行后面种种的分析,否则一切都是空谈.本文将带你用三种最好用的方法将异常抓下来. 一.滚动模式 ...

  3. python批处理栅格转点_三种利用Python批量处理地理数据的方法——以栅格数据投影转换为例...

    时至今日,笔者已经总结了三种用Python语言结合ArcGIS10.2提供的接口去批量处理地理数据的方法.即: 1. 用IDLE.Python Tools for Visual Studio等去编写独 ...

  4. python 爬虫 数据抓取的三种方式

    python 爬虫   数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...

  5. pca算法python代码_三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  6. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  7. python打开文件不存在-Python判断文件是否存在的三种方法

    原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...

  8. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  9. python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...

    html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...

最新文章

  1. Go语言写的解析器(支持json,linq,sql,net,http等)
  2. 如何使用Lombok来优雅的编码
  3. Android移动开发之【Android实战项目】DAY10-App端耗流量场景问题及减少消耗办法
  4. 单片机中存储器扩展位地址线怎么算_51单片机存储器小结
  5. 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
  6. object-C控制语句
  7. httpclient在获取response的entity时报异常
  8. iOS app上架app store流程详解
  9. Arduino测试一块5路非自锁开关量输入模块ardunio中断编程示例
  10. SaltStack源码分析之Redis Returner
  11. ORB-SLAM2学习笔记——BundleAdjustment函数
  12. Swift语言入门学习
  13. js获取最大整数的方法
  14. 智子观测宣布和数榜签约合作,强化大数据采集技术
  15. 认证管理(锐捷业软篇)
  16. 用IntelliJ IDEA开发Python
  17. 软件测试工程师简历项目经验怎么写(含真实简历)
  18. 局域网访问电脑中VMware虚拟机
  19. 认知,构建个人的知识体系(上)
  20. Verilog实现25分频电路代码

热门文章

  1. 寒武纪论文DianNao、DaDianNao、ShiDianNao赠送
  2. 前端性能优化 面试题总汇
  3. 成功解决萤石云SDK对讲功能设备端无声音手机端有声音的问题
  4. SPAD光子探测器使用总结
  5. springboot审核功能怎么做_开发的微信小程序商城怎么利用分销功能做营销
  6. cocos creator 3D艺术字体
  7. 新手入门上位机开发 C#语言:Windows窗体应用(.NET Framework) 开发定时器
  8. CentOS7 下安装docker
  9. 【FPGA基础】基于PWM脉宽调制的呼吸灯设计(Vivado)
  10. 【mac】jenkins构建apk自动打包