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 相关文章推荐
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
Python连接字符串过程详解
Jan 06 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
python实现简单的学生管理系统
Feb 22 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
php创建多级目录代码
2008/06/05 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
php实现微信模板消息推送
2018/03/30 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
java关于string最常出现的面试题整理
2021/01/18 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
学生党员公开承诺书
2014/05/28 职场文书
2014年采购员工作总结
2014/11/18 职场文书
英语教师求职信范文
2015/03/20 职场文书