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获取服务器信息的最简单实现方法
Mar 05 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python操作Excel之xlsx文件
Mar 24 Python
python实现自主查询实时天气
Jun 22 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
学会python自动收发邮件 代替你问候女友
May 20 Python
python 使用三引号时容易犯的小错误
Oct 21 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 MSSQL 存储过程的方法
2008/12/24 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
网页常用特效代码整理
2006/06/23 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
js实现图片360度旋转
2017/01/22 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
python psutil模块使用方法解析
2019/08/01 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
python unichr函数知识点总结
2020/12/16 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
适用于所有创业者的创业计划书
2014/02/05 职场文书
党日活动总结
2014/05/07 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
涨价通知
2015/04/23 职场文书
工资证明范本
2015/06/12 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python