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实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
django 中QuerySet特性功能详解
Jul 25 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
基于python实现学生信息管理系统
Nov 22 Python
详解如何修改python中字典的键和值
Sep 29 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
Python os和os.path模块详情
Apr 02 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
改进的IP计数器
2006/10/09 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php获取域名的google收录示例
2014/03/24 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
了解Javascript的模块化开发
2015/03/02 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python实现图片拼接的代码
2018/07/02 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python如何求100以内的素数
2020/05/27 Python
金融行业职业生涯规划范文
2014/01/17 职场文书
高二生物教学反思
2014/01/27 职场文书
财务总监岗位职责
2014/03/07 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
公司员工离职证明书
2014/10/04 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
Django中celery的使用项目实例
2022/07/07 Python