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编写一个高效的端口扫描器的方法
Dec 20 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python实现打印实心和空心菱形
Nov 23 Python
用python对excel查重
Dec 07 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
python中opencv实现图片文本倾斜校正
Jun 11 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 Python
python画条形图的具体代码
Apr 20 Python
python开发人人对战的五子棋小游戏
May 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
php的大小写敏感问题整理
2011/12/29 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php获取远程文件大小
2015/10/20 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
php格式文件打开的四种方法
2018/02/24 PHP
phpStorm2020 注册码
2020/09/17 PHP
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
js选项卡的制作方法
2017/01/23 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
基python实现多线程网页爬虫
2015/09/06 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
使用python实现多维数据降维操作
2020/02/24 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
法制宣传月活动总结
2014/04/29 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL