一个基于多用户的抓取视频下载系统 PhaGrabVideo
- Video
- You-get
- MultiUser
- System
设计之初
最近工作中有个需求,大概是抓取网站中的视频下载并自助上传到自己的视频管理后台,其实就是爬虫,简单的做了一个后台,用户在后台添加 url ,在一台机器上部署定时任务,定时扫描表里添加的 url 并下载,下载成功保存到对应的目录下。另有一个定时任务,异步进行上传,Curl 上传到自己的上传服务器。下载的脚本采用了一个开源的视频下载工具 you-get。支持大概几十家国内外的视频网站的抓取。
在开发的过程中遇到几个问题:
- 定时任务执行周期内未执行完成重复执行问题
- 下载只能部署一台机器,不能多台部署
对于第一个问题,我已经在之前写的一篇文章《crontab 解决周期内未执行完重复执行问题》中给出了几种常用的解决办法
对于第二个问题,不能多个下载端同时部署,即一个后台只能对于一个下载端,虽然对于工作来说,这样已经可以满足需求,不需要多端部署,否则维护反而麻烦,但是我依然想要把它尽可能做成一个通用的可多端部署的视频抓取系统。基于此,在这基础上重新设计了基于多用户管理的视频下载系统–phaGrabVideo
架构设计
下面是基本的架构设计图
该系统分为客户端(client)和服务端(server),客户端和服务器完全分离
客户端采用 python 脚本编写,方便部署,通过 api接口来获取 url 信息以及日志上报
服务端(server)包括4部分: (User)用户、(Admin)后台管理、(server Api)Api接口、DB(数据库)
一个用户对应一个客户端,用户在首先在 Admin Manager (后台)注册账号之后会给用户分配一个 Token,用户将下载器的脚本部署到服务器,会要求填写你的用户名以及token,客户端验证成功后,将下载器部署成功。下载器根据用户名和 token 会定时轮询 url 这张表,查找该用户添加的 url ,并下载到本地的文件夹下。
这样设计的好处是各个用户之间独立部署,可实现多个下载端同时下载而不会产生冲突。
应用程序设计
服务端:
整体采用 php + Apache + Mysql 的开发环境。后台界面采用 Bootstrap 设计,简洁美观。
功能包括:
个人中心、账号管理、角色管理、视频来源、Url管理、视频管理、日志管理URL管理:
客户端:
采用 python 编写,通过 api 接口和服务端交互。定时查找并下载
其他
关于 you-get 的安装,请参考之前写的文章《you-get 安装》
项目地址
https://github.com/phachon/PhaGrabVideo
欢迎提交代码和意见
Thanks…
Create By phachon@163.com