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新手实现2048小游戏
Mar 31 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python smtplib实现发送邮件功能
May 22 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Django中Aggregation聚合的基本使用方法
Jul 09 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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上传图片到数据库并显示的实例代码
2019/12/20 PHP
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中字符串的修改及传参详解
2016/11/30 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
python K近邻算法的kd树实现
2018/09/06 Python
python write无法写入文件的解决方法
2019/01/23 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
python之语音识别speech模块
2020/09/09 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
结婚邀请函范文
2014/01/14 职场文书
小学中秋节活动方案
2014/02/06 职场文书
大二学习计划书范文
2014/04/27 职场文书
感恩的演讲稿
2014/05/06 职场文书
安全标兵事迹材料
2014/08/17 职场文书
课外访万家心得体会
2014/09/03 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
离婚协议书怎么写
2015/01/26 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android