# 源码解读
# Spider
分布式爬虫
Spider 继承 BaseParser, Scheduler
# 运行流程
- 初始化 Spider (传入 rediskey), 此时会初始化 Spider 中的参数,以及 Scheduler 中的参数,调用多线程中的 start 方法
- 在 start 方法中,将当前 Spider 对象存入 self._parsers 中,然后调用 Scheduler 中的_start 方法
- 在_start 方法中,调用初始化后的 request_buffer,item_buffer,collector 的 start 方法
- 接着根据线程数及进程数,开启多个 parser_control (主要是处理 collector)
# Spider 内置方法
# 方法
- start_monitor_task 开始监控 常驻:主要涉及 redis 数量任务监控以及下发任务
- distribute_task 分发任务,由于继承了 Scheduler, 所以会初始化 parser 列表
- run 运行线程 然后调用 Scheduler 中的_start () 方法 启动 request_buffer,item_buffer,collector (均继承多线程,用 start () 常驻)
- parser_control
# 组件介绍
# Scheduler
调度器
决定爬虫的执行顺序,以及批次爬虫的调度逻辑
# init
- self._request_buffer 根据 redis_key 初始化的 request_buffer
- self._item_buffer 根据 redis_key 初始化的 item_buffer
- self._collector 根据 redis_key 初始化的 collector
- self._parsers 数组,用于存放 Spider 对象本身
- self._parser_controls 数组
- self._parser_control_obj PaserControl 组件 (从 collector 中获取任务 处理 request)
# request_buffer
- init 初始化 requests 队列,del_requests 队列
- run: 只要未结束,就不断的往 redis 中添加任务
- __add_request_to_db: 将内存队列的中的任务添加至 redis 中
# item_buffer
# collector
# Request
封装了 request
缓存配置 (用于 debug 爬虫)
# PaserControl
# run
从内存队列中取 request, 对其数量进行判断,然后处理中间件,获取返回后的结果