关于分布式爬虫
小爬虫就是一半的单线程爬虫,入门。
多线程/协程爬虫是快速爬虫。
分布式爬虫是大规模爬虫。
说到分布式,好像很高大上的词,其实普通分布式很简单,单机爬虫种子可以放在程序的列表 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是确定的参数是未知的,需要从接口来传入参数。
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。