小爬虫就是一半的单线程爬虫,入门。
多线程/协程爬虫是快速爬虫。
分布式爬虫是大规模爬虫。
说到分布式,好像很高大上的词,其实普通分布式很简单,单机爬虫种子可以放在程序的列表 queue队列 或者本机的mysql redis都可以。分布式爬虫最简单就是借助redis了,多个爬虫从同一台redis机器取种子 ,同一个redis去重,这就是分布式了。
涉及到一个换位思考了,不要想成是一台机器给其他机器分布式的分发任务,这样想实现难度大一点。如果换成看做是多个程序从一个redis中取种子,那这样就很容易设计了。redis的pop push api很好使用,redis和这种分布式爬虫天作之合,一般不是用来mysql mogodb来构建分布式,是用来存储的。
把上面这种叫主动分布式,程序不断的拿种子来执行爬取。
还有一种是,被动的,爬虫程序不动,别的来请求了,程序就干活,简单的想法就是开个web接口,比如django viwes函数里面来触发爬虫。但分布式就要用比上面这种复杂一些的微服务架构,不可能一台台的部署然后修改njinx。当爬虫组件种类很多,需要用 微服务注册 微服务发现。不然生产难以部署,新增一个爬虫种类或者新增一台爬虫扩展现有爬虫,需要大动干戈。
第一种适合大规模乏爬取,除了关键的入口url,连将来要爬的url大部分都是未知的。
第二种是适合爬取指定的信息,要爬的url都一清二楚了,但每个url中需要发送不同的get post参数,url是确定的参数是未知的,需要从接口来传入参数。