欢迎来到球速体育·(中国)官方网站QIUSU SPORTS!

Redis

当前位置: 球速体育·(中国)官方网站 > 数据库 > Redis

【青鸟飞扬教育】使用python结合redis编写分布式爬虫

时间:2024-06-24 03:23:10|栏目:Redis|点击:

  所谓分布式,体现在生产端和消费端的隔离,同一端的worker彼此间也是隔离的。生产端和消费端隔离,他们就可以独自进行变化,增加或是减少worker;同一端的worker彼此间也是隔离的,这样,一个worker崩溃了,其他worker不受其影响仍然可以继续工作。

  实现分布式爬取的关键是消息队列,这个问题以消费端为视角更容易理解。你的爬虫程序部署到很多台机器上,球速体育welcome那么他们怎么知道自己要爬什么呢?总要有一个地方存储了他们需要爬取的url吧,这样他们才能工作。

  假设有1万个url需要爬取,而你有100个爬虫程序部署在10台机器上,每台10个爬虫程序在运行,一个url被分给爬虫程序后,其他爬虫不能再获得这个url,不然,就重复爬取了,理解吧,分布式爬虫的关键是怎么把任务分给这些爬虫。

  有些促销活动的现场会进行抽奖活动,工作人员捧着一个透明的箱子,参与活动的人从箱子的小口处把手伸进去随机拿出一张折叠的纸条,这种模式与消息队列十分相似。消息队列就好比这个抽奖的箱子,消费端的爬虫程序就好比参与活动的顾客,爬虫从消息队列里拿出一个url任务,然后进行爬取,不同于抽奖活动时一个人只能拿一次,分布式爬虫允许爬虫在结束一个爬虫任务后继续从消息队列里获取任务。

  如果你只是简单的写一个分布式爬虫,那么使用redis的队列就可以了,它完全可以作为消息队列来使用,下面的代码是生产端的代码示例

  我这里只是做示例演示,真实的生产环境下比这要复杂的多,但核心不变,都要用lpush方法将需要爬取的任务信息写入到指定队列中,写入后,这些信息就等待爬虫程序从队列里获取,下面的代码是消费端爬虫程序的示例

  爬虫程序要不停的使用rpop方法从redis的队列中拉取数据进行爬取,考虑到生产者随时都可能写入新的任务,因此,必须使用死循环,得不到消息时,sleep一段时间,继续获取消息。

  生产端的程序,消费端的程序可以随意部署,但不管如何,都要确保这些机器与redis所在的机器是网络连通的,因为他们一个要写消息到redis,一个要从redis拉取任务,至于生产端和消费端是否网络连通则没有任何必要,甚至同一端的worker之间也不必网络连通

  消费端的worker在爬取数据以后,可以根据实际需要决定是否直接落库,如果需要对数据进行规范化处理或是其他操作,则可以写入新的消息队列中,由下一个工序的worker拉取数据进行处理

  特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

  2024版!多少分可以上川大、电子科大、西交大等?30+所川内大学录取数据汇总

  上海市民直呼:乱套了!这群人太离谱,行人突然被撞倒地……执法却遇尴尬?

  上海高中生写下断绝父子关系的长信!“他们离婚约定房子给我,爸爸却反悔了...”

  独角兽早报 茅台回应“自制假茅台被鉴定为线年前全数沽出英伟达;美的置业进行股权重组

  LuX-Valve Plus助力2024 Taipei Valve Summit 同心共行,一路相瓣

  自动驾驶公司Momenta完成美股上市备案,通用、上汽、奔驰等参投,自动驾驶行业迎“上市潮”

  scout被小奶油单杀!LNG再次不敌TES,教练道歉:我的BP没做好

  Surface Laptop 7实测待机表现良好 盖上盖子数小时不掉电

  传奇超频玩家KINGPIN离开EVGA加入PNY 开发下一代极致超频GPU

  苹果修复影响Vision Pro的漏洞,网站无法再用蝙蝠轰炸用户的房间

上一篇:暂无

栏    目:Redis

下一篇:Redis官方不提供Windows版本的原因

本文标题:【青鸟飞扬教育】使用python结合redis编写分布式爬虫

本文地址:http://aihaoedu.com/shujuku/352.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:88888888 | 邮箱:aihaoedu.com

Copyright © 球速体育·(中国)官方网站 版权所有