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 02 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
详解Python自建logging模块
Jan 29 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
Python实战购物车项目的实现参考
Feb 20 Python
面向对象学习之pygame坦克大战
Sep 11 Python
django框架auth模块用法实例详解
Dec 10 Python
PyTorch中的Variable变量详解
Jan 07 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python pymsql模块的使用
Sep 07 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 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
CURL状态码列表(详细)
2013/06/27 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python之PyMongo使用总结
2017/05/26 Python
Mac 上切换Python多版本
2017/06/17 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python 如何测试文件是否存在
2020/07/31 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
成绩报告单家长评语
2014/12/30 职场文书
乌镇导游词
2015/02/02 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS