分布式爬虫调度及数据管理系统[Python]

一. 摘要

本系统主要包括三大部分,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写序列图。。。。还真的是有点难度了,顺序不太对,先凑合着帮助理清功能了。。。。。

Created with Raphaël 2.1.2 爬虫 爬虫 API API 数据库 数据库 管理后台 管理后台
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值