我们大多时候玩的爬虫
都是运行在自己的机子,就是单机模式
之前我们为了提高爬虫的效率,说过多进程相关的,今天来讲讲什么是分布式爬虫。
一、 什么是分布式?
你开发一个网站想要给别人访问就需要把网站部署到服务器
当网站用户增多的时候一个服务器就不满足需求了于是就会把网站部署到多个服务器上
这种情况通常叫集群,就是把整个网站的所有功能,都同时部署到不同的服务器上一般会使用 ngnix 作负载均衡。不过有些功能并发量并不是很高比如一些后台的管理,所以就有人想要不如把这个网站的功能都拆分出来,让每一个模块只负责具体的功能
比如登录模块,内容管理模块等
然后在部署的时候把一些并发量大的模块部署到多个服务器就行了,耦合度大大的降低了,并发量小的模块也不会浪费那么多资源了
当然模块与模块之间会产生联系,也就是如何调度好它们,一般会用到消息队列
这就是所谓的分布式了。
对于一些数据不大的数据我们的爬虫一般是直接在电脑运行了,而分布式爬虫说白了,就是把爬虫的关键功能以分布式形式部署到多台机器上然后一起爬
二、模块联系
那么如何将爬虫之间联系起来呢?
我们可以使用 Redis 的消息队列进行调度(schedule)之前我们也有说过 redis,它是一个读写速度快的缓存数据库,还提供了类似 Python 的list、set 等数据结构
在 scrapy 框架里面就有一个scrapy-redis专门用它来调度爬虫的,它可以将请求的 url 放到redis 的消息队列里面,然后用 spider 模块将数据给结构化抽出来放到 redis 数据库里面去。
当然,分布式爬虫有时候还会结合数据库集群爬取数据。