python爬虫优势和缺点_三种分布式爬虫策略的优缺点
三种分布式爬虫策略:
(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爬虫优势和缺点_三种分布式爬虫策略的优缺点相关推荐
- python分布式爬虫系统_三种分布式爬虫系统的架构方式
分布式爬虫系统广泛应用于大型爬虫项目中,力求以最高的效率完成任务,这也是分布式爬虫系统的意义所在. 分布式系统的核心在于通信,介绍三种分布式爬虫系统的架构思路,都是围绕通信开始,也就是说有多少分布式系 ...
- python控制示波器获取波形_三种方法教你用示波器快速捕获异常
万事开头难!当你想用示波器来分析问题时,你一定有想过,我要如何才能把问题抓下来?当然,只有抓下来之后,才能进行后面种种的分析,否则一切都是空谈.本文将带你用三种最好用的方法将异常抓下来. 一.滚动模式 ...
- python批处理栅格转点_三种利用Python批量处理地理数据的方法——以栅格数据投影转换为例...
时至今日,笔者已经总结了三种用Python语言结合ArcGIS10.2提供的接口去批量处理地理数据的方法.即: 1. 用IDLE.Python Tools for Visual Studio等去编写独 ...
- python 爬虫 数据抓取的三种方式
python 爬虫 数据抓取的三种方式 常用抽取网页数据的方式有三种:正则表达式.Beautiful Soup.lxml 1.正则表达式 正则表达式有个很大的缺点是难以构造.可读性差.不易适用未来 ...
- pca算法python代码_三种方法实现PCA算法(Python)
主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...
- python csv库,Python 中导入csv数据的三种方法
Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...
- python打开文件不存在-Python判断文件是否存在的三种方法
原标题:Python判断文件是否存在的三种方法 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件 ...
- python 命令-python解析命令行参数的三种方法详解
这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...
- python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...
html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...
最新文章
- Go语言写的解析器(支持json,linq,sql,net,http等)
- 如何使用Lombok来优雅的编码
- Android移动开发之【Android实战项目】DAY10-App端耗流量场景问题及减少消耗办法
- 单片机中存储器扩展位地址线怎么算_51单片机存储器小结
- 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
- object-C控制语句
- httpclient在获取response的entity时报异常
- iOS app上架app store流程详解
- Arduino测试一块5路非自锁开关量输入模块ardunio中断编程示例
- SaltStack源码分析之Redis Returner
- ORB-SLAM2学习笔记——BundleAdjustment函数
- Swift语言入门学习
- js获取最大整数的方法
- 智子观测宣布和数榜签约合作,强化大数据采集技术
- 认证管理(锐捷业软篇)
- 用IntelliJ IDEA开发Python
- 软件测试工程师简历项目经验怎么写(含真实简历)
- 局域网访问电脑中VMware虚拟机
- 认知,构建个人的知识体系(上)
- Verilog实现25分频电路代码