Python爬虫【五】Scrapy分布式原理笔记
Scrapy单机架构 在这里scrapy的核心是scrapy引擎,它通过里面的一个调度器来调度一个request的队列,将request发给downloader,然后来执行request请求 但是这些request队列都是维持在本机上的,因此如果要多台主机协同爬取,需要一个request共享的机制——requests队列,在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 单主机爬虫架构 调度器负责从队列中调度requests进行爬取,而每台主机分别维护requests队列 分布式爬虫架构 队列用什么维护? 这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活。 是内存中的数据结构存储系统,处理速度快,性能好。提供队列、集合等多种存储结构,方便队列维护。 如何去重?—— Redis集合 redis提供集合数据结构,在redis集合中存储每个request的指纹。 在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。 如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合。 如何防止中断?——启动判断 在每台slave的Scrapy启动的时候都会判断当前redis request队列是否为空