需求: 品牌监控,各品牌关键词在各个数据源关于此关键词的数据抓取,生成protobuf数据格式的log,以小时入,并传入bos中
思路是: 输入关键词,调用各个数据源对应的爬虫接口和解析方式获得数据
框架设计思想:
爬虫框架初期思路是实现解耦爬虫流程(http请求,获得响应,解析响应体,通过管道进行数据处理)封装成三个对象和5个模块,而封装实现就是三个对象在5个模块中间的方法调用,解析
对象部分:
http请求分别封装request对象,response对象
request对象首先调用python爬虫库requests,封装其请求方法和请求参数
流程解析部分:
request对象生成后,如果不添加异步功能,就直接用download模块去发送request对象的(中间可以添加随机ip,useragent,cookie等等),得到相响应对象之后,动态调用对应爬虫的解析方式去解析,最后生成最终想要的数据
详细流程:
五个模块, 爬虫模块: 起始url,解析响应数据,
调度模块: 请求队列
下载器模块: 根据请求,分析请求的请求方法请求体生成响应
目标数据模块: 定义数据格式
引擎模块:整体逻辑驱动
⁃ a. 构造spider中start_urls中的请求
⁃ b. 传递给调取器进行保存,之后从中取出
⁃ c .取出的request对象交给下载器进行下载,返回response
⁃ d .response交给爬虫模块进行解析,提取结果
⁃ e .如果结果是request对象,重新交给调度器,如果结果是item对象,交给管道处理(中间做个判断即可)
需要实现的功能有:
1 支持多种不同爬虫,(导入各个爬虫对象)
2 自动调用对应爬虫解析方法(读取框架默认settings,再将对应爬虫的settings添加进去并且覆盖掉)
4 实现多线程 (for循环生成新的线程,实现settings控制for循环次数,线程完毕后自动生成新的线程)
5 实现异步(通过中间生成Queue,放入请求对象,多线程读取请求对象)
6 实现速度控制 (从Queue读取数据时可以设置时间延迟,每个spider不同)
7 中间件模块方法拓展(添加随机useragent,随机ip,甚至随机cookie)
8 流程控制 (通过框架内spider_frame.engine实现)
框架模型为: project(配置新爬虫) spider_frame(通用爬虫框架模块)
后期会添加通用爬虫平台的建设功能(前端新开页面)