一. 摘要
本系统主要包括三大部分,Scrapy爬虫部分,Flask任务调度API部分及Django后台管理部分。三大部分相对独立又有一些内在联系。如果想单独学习某一框架可以单独只看某一部分,非常适合刚接触某框架并想深入学习的同学拿来练手。
- 本系统通过对航空公司官方网站的分析,利用Scrapy,Requests等多种方式来探索获取对应的航班信息并处理入库,异步高并发的架构提高了数据获取的速率。
- 用Flask+Redis做接口来监控处理爬虫,处理分发任务,以分布式的结构做到保证任务可以不间断,且不受单个爬虫意外的影响。
- 通过Django来做管理后台展示数据,Django自带的人性化的管理后台以及认证系统提高了软件开发效率。
最终实现了分布式任务调度,爬虫管理员对数据的监控管理,对爬虫的监控管理,对爬虫机子的监控管理,对爬虫任务的监控控管理,普通用户对航班机票信息的搜索查看,对自己关注信息的查看管理等, 这个系统也是本人的毕业设计,所以本篇博客大部分摘自本人的简化版的毕业论文。
二. 数据库及技术框架
数据库以及技术框架介绍网上一搜一大堆,在这里我就不多作介绍了,只是简单说明一下我用到了什么和为什么要用它。
2.1 数据库
该系统的爬虫任务, 主机信息和爬虫信息存储于Redis数据库。这些数据都有更新频繁的特征,爬虫任务还需要以队列的形式来提取和存入。爬虫获取到的航班信息数据都统一存储于MySQL数据库,因为在更新航班信息的时候需要判断这条航班信息是否有用户关注,如果有则发送到该用户的邮箱。所以这些数据需要存储于关系型数据库。
2.2 Scrapy
本系统的爬虫部分包括两个网站的爬虫,通过Python的爬虫框架Scrapy来搭建,Scrapy的异步多线程可以极大地提高爬虫获取数据的速率,提高开发效率。
2.3 Flask
本系统的分布式任务分发是通过Scrapy封装Redis任务队列来实现的,分布式以及各功能的API实现不需要前端界面,不需要复杂的功能。Python以“微”著称的Web框架Flask就是最好的选择了。
2.4 Django
在新闻环境中诞生的web框架Django, 最擅长于动态内容管理系统。本系统的航班信息,机子信息,爬虫信息都要求比较高的时效性,所以其数据管理web端用Django来做是最好不过了。
2.5 Bootstrap
数据不仅要对管理员展示,还要展示给普通用户,这时一个高大上的界面就非常有必要了。对于我这个后台汪+运维狗来说,让我设计并编写一个高端、大气上档次的前端页面,还不如直接杀了我。幸好我遇见了它——Bootstrap,后台人员的福音呐。只需要在网上下载一个,简单复制一下,再配置成自己需要的即可。
三.功能描述
3.1 爬虫功能描述
- 从任务队列获取任务
- 添加cookies, 头信息,UserAgent来伪装自己
- 通过爬取指定目标网站来获取需要的数据
- 对数据进行处理,格式化
- 判断库里是否有数据,有的话就更新,没有就插入数据库
- 定时心跳,证明自己是活着的,同时获取控制命令并执行
- 针对有人关注的航班信息,如果有价格座位数的更新则发邮件通知
还有一个要和爬虫同时运行在爬虫机子的脚本,主要实现以下功能:
- 获取本机的内存信息
- 获取本机的CPU信息
- 将本机的信息发送给API请求部分
- 接收命令任务
- 执行接收到的命令
3.2 分布式调度及API部分的功能描述
- 列表内容
- 添加爬虫任务
- 暂停爬虫任务
- 恢复爬虫任务
- 获取所有爬虫任务
- 获取某爬虫对应的部分小任务
- 给爬虫主机添加命令
- 获取某主机对应的所有命令
3.3 后台的功能描述
管理员登录到系统后台才可进行操作,其可执行的操作如下:
- 查看航班信息
- 修改航班信息
- 删除某个航班信息
- 查看用户信息
- 删除用户
- 更改用户信息
- 查看特别关注
- 修改特别关注
- 删除特别关注
- 查看爬虫机子信息
- 更新爬虫机子上的爬虫程序
- 对任务进行操作管理
- 对爬虫进行操作管理
普通用户登录到系统才能进行操作,可进行的操作如下:
- 查看航班信息
- 搜索航班信息
- 添加到特别关注
- 删除特别关注
四. 系统的功能设计
系统整体序列图
用Markdown写序列图。。。。还真的是有点难度了,顺序不太对,先凑合着帮助理清功能了。。。。。