Python实现视频下载功能


Posted in Python onMarch 14, 2017

最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容。如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来,不仅方便自己观看,还可以将没有版权的视频发布在个人社交网站上,增加自己的人气,岂不美哉?

parker就是这样一个项目(项目地址:https://github.com/LiuRoy/parker),它采用celery框架定时爬取用户视频列表,将最新发布的视频通过you-get异步下载,可以很方便地实现分布式部署。因为各个网站的页面布局和接口更新比较频繁,为了保证程序的高可用,特意增加了Statsd监控,方便及时发现出错。

代码架构

Python实现视频下载功能

目前parker中只实现了B站和秒拍的下载,从框架图可以看出,针对每一类网站,需要实现两个异步接口:从用户视频主页解析发布视频的播放地址、根据播放地址下载视频。因此增加网站类型,不需要修改原来的代码,只需要添加新的解析和下载接口即可。针对视频下载完成之后的后续操作,我还没有实现,大家可以根据自己的需求自由的去实现。

在运行的时候,celery会将配置好的优质用户列表定时发送到对应网站的解析接口异步执行,筛选出最新发布的视频播放地址,交给对应的下载接口异步下载,下载完成之后再异步调用后续操作。因此需要启动一个celery beat进程发送定时任务,以及若干celery异步任务去执行解析和下载操作,对于比较大的视频,下载会相当耗时,建议根据任务列表的多少合理分配异步任务的个数。

程序运行

经验证,此程序可以在ubuntu和mac下正常运行, 由于本地windows下的celery无法正常启动,所以没有在windows环境做过验证。

依赖库安装

python版本为3.5,进入项目目录后,执行:

pip install -r requirements.txt

创建数据库表

提前在数据库中建好两张表(sql: https://github.com/LiuRoy/parker/blob/master/spider/models/tables.sql)

参数配置

config路径下的logging.yaml、params.yaml、sites.yaml分别对应日志配置、运行参数配置、热门用户配置。

日志配置

debug模式下日志会直接输出在标准输出流,release模式下会将日志内容输出到文件中,因此需要配置输出日志文件。

运行配置

  • mode debug调试模式,此模式下日志指向标准输出,并且没有监控数据;release模式下,日志输出到制定文件,并且有监控数据。
  • broker_url 对应于celery的BROKER_URL,可以配置为redis或者rabbitmq
  • mysql_url 数据库地址,需要提前建好两张表
  • download_path 视频下载路径
  • statsd_address 监控地址
  • video_number_per_page 每次从用户视频主页解析出多少条视频播放地址,因为大部分用户每次发布的视频个数很少,只需要设置成一个很小的值即可。在初次运行的时候,也不会下载大量久远的视频。
  • download_timeout 视频下载的超时时间

热门用户配置

parker会根据此配置生成一份celery beat scheduler列表。

  • name 规则是<网站类型>-<任务id>,parker会根据此作为scheduler任务名称
  • url 用户的发布视频主页
  • task 对应的celery解析异步任务
  • minute 多少分钟检查一次用户视频列表

启动任务

进入项目目录,执行下面命令启动celery worker

celery -A spider worker

执行下面命令启动celery beat定时任务

celery -A spider beat

监控

强烈安利一个docker镜像 https://hub.docker.com/r/samuelebistoletti/docker-statsd-influxdb-grafana/,一分钟配好监控环境有木有。之后只需要添加执行成功和执行异常的打点数据,就可以方便的监控程序是否正常运行了。

Python实现视频下载功能

以上所述是小编给大家介绍的Python实现视频下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python装饰器原理与用法分析
Apr 30 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
Python删除n行后的其他行方法
Jan 28 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
python 自动识别并连接串口的实现
Jan 19 Python
教你用python控制安卓手机
May 13 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
Python的标准模块包json详解
Mar 13 #Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 #Python
Python中functools模块函数解析
Mar 12 #Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 #Python
Python中str.format()详解
Mar 12 #Python
You might like
PHP实现视频文件上传完整实例
2014/08/28 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php多线程并发实现方法
2016/09/30 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
django定期执行任务(实例讲解)
2017/11/03 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
如何用Python合并lmdb文件
2018/07/02 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
Django 返回json数据的实现示例
2020/03/05 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
北大研究生linux应用求职信
2013/10/29 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
护林员个人总结
2015/03/04 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
入党培养人考察意见
2015/06/08 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js