python分布式爬虫中消息队列知识点详解


Posted in Python onNovember 26, 2020

当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方。那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的资源,当然这个是一定的次序的,不然数据获取就会出现重复。就下来我们就python分布式爬虫中的消息队列进行详细解释,小伙伴们可以进一步了解一下。

实现分布式爬取的关键是消息队列,这个问题以消费端为视角更容易理解。你的爬虫程序部署到很多台机器上,那么他们怎么知道自己要爬什么呢?总要有一个地方存储了他们需要爬取的url吧,这样他们才能工作。

假设有1万个url需要爬取,而你有100个爬虫程序部署在10台机器上,每台10个爬虫程序在运行,一个url被分给爬虫程序后,其他爬虫不能再获得这个url,不然,就重复爬取了,理解吧,分布式爬虫的关键是怎么把任务分给这些爬虫。

有些促销活动的现场会进行抽奖活动,工作人员捧着一个透明的箱子,参与活动的人从箱子的小口处把手伸进去随机拿出一张折叠的纸条,这种模式与消息队列十分相似。消息队列就好比这个抽奖的箱子,消费端的爬虫程序就好比参与活动的顾客,爬虫从消息队列里拿出一个url任务,然后进行爬取,不同于抽奖活动时一个人只能拿一次,分布式爬虫允许爬虫在结束一个爬虫任务后继续从消息队列里获取任务。

使用redis的队列做消息队列

如果你只是简单的写一个分布式爬虫,那么使用redis的队列就可以了,它完全可以作为消息队列来使用,下面的代码是生产端的代码示例

import redis
r = redis.Redis(host='127.0.0.1', port=6379,
        password='yourpassword', db=1)
# 生产10个url任务
for i in range(10):
  r.lpush('url_queue', i)

相信看完以上的代码示例后,小伙伴们已经学会用redis创造一个消息队列,用来方便爬虫的获取数据。本篇是以生产段的角度写的代码

到此这篇关于python分布式爬虫中消息队列知识点详解的文章就介绍到这了,更多相关python分布式爬虫中的消息队列是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
python开发中module模块用法实例分析
Nov 12 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 #Python
使用OpenCV校准鱼眼镜头的方法
Nov 26 #Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 #Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 #Python
Django celery异步任务实现代码示例
Nov 26 #Python
Django通过设置CORS解决跨域问题
Nov 26 #Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 #Python
You might like
php扩展ZF――Validate扩展
2008/01/10 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
浅谈python之新式类
2018/08/12 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
生产厂厂长岗位职责
2013/12/25 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
出国英文推荐信
2014/05/10 职场文书
图书室标语
2014/06/21 职场文书
小学教学工作总结2015
2015/05/13 职场文书
师范生见习总结范文
2015/06/23 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
《搭石》教学反思
2016/02/18 职场文书