Scrapy分布式原理
scrapy架构 首先我们先看一下Scrapy的单机架构 也就是说scrapy的单机架构实际上实在本机维护一个爬取队列,用Scheduler进行调度,如果我们要实现scarpy的分布式,就需要多台主机协同操作,那么问题来了 多台主机协作的关键是什么? 实际上就是共享爬取队列:核心就是将这个队列进行共享,让多台主机都能访问,然后让各个主机的Scheduler进行调度,这样就可以共享requests,进行统一的抓取。 单主机爬虫架构: 主机从Queue中抓取队列,然后由Scheduler调度 分布式爬虫架构: 由多个Scheduler从同一个Queue中调度,这样就可以完成协同的抓取 前面写到的这些,都离不开队列,那么怎么维护队列呢 队列用什么维护? 可能大家会想到使用数据库,使用文件或者一些特定的数据结构来进行维护,这里推荐 redis队列 ,那么redis有什么好处呢? Redis是非关系型数据库,以Key-Value形式进行存储,相对于其他数据库来说,结构跟灵活 是内存中的数据结构存储系统,处理速度快,性能好。 提供队列,集合等多种存储结构,分辨队列维护。 怎么去重? 在进行抓取中,因为有多台主机访问一个队列,所以他们请求到的url可能会相同,那么抓取到的数据可能会一样,那么我们要怎么保证各个主机拿到的requests队列是不重复的呢? 这里我们可以使用 Redis集合