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

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

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

代码架构

目前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镜像,一分钟配好监控环境有木有。之后只需要添加执行成功和执行异常的打点数据,就可以方便的监控程序是否正常运行了。

以上就是使用Python实现视频下载功能实例代码的详细内容,更多请关注php中文网其它相关文章!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

python编程实例视屏-使用Python实现视频下载功能实例代码相关推荐

  1. opencv 打开和保存视屏(python版)

    opencv 打开和保存视屏(python版) 打开视屏,并播放视屏 import cv2# 获取video_path的视屏 cap = cv2.VideoCapture("video_pa ...

  2. python编程培训多少钱-python编程培训多少钱?[python培训]

    python编程培训多少钱?2018年Python的发展可谓是大红大紫,2019年python的热度依然不减.各大公司对python开发工程师的需求都有所增加,因此参加python培训学习python ...

  3. python sftp_Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类 ...

  4. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载

    [300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...

  5. 手机python编程软件 turtle,安卓手机python编程软件

    如何用手机编程Python? 1.QPython3:这是一个在安卓手机上运行python3的脚本引擎,整合了python3解释器.控制台.QEdit编辑器和SLA4库,可以在安卓手机上运行python ...

  6. python实现一个整数加法计算器_如何使用python编程写一个加法计算器-Python教程...

    一.关上idle.点击file,而后点击new file.这是创立一个新的文件. 新建一个文件之后,咱们输出第一行代码,应用print函数,正在屏幕上打印一句话,此中字符串要应用双引号,输出法要应用英 ...

  7. 代做python作业_代做SVC留学生作业、代写Python编程作业、代做Python作业、代写algorithm作业...

    代做SVC留学生作业.代写Python编程作业.代做Python作业.代写algorithm作业 日期:2018-12-02 10:26 This project is to be done indi ...

  8. 儿童python编程教程-什么是少儿Python编程?这一篇就够啦!

    原标题:什么是少儿Python编程?这一篇就够啦! 少儿Python编程大家都了解多少呢? 由于少儿编程学习的重要性被广大家长朋友们所知,再加上近几年来我国对少儿编程教育的重视,现在很多的家长朋友们都 ...

  9. python合并音频和视频_ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码

    安装 官网下载 选择需要的版本 将解压后得到的以下几个文件放置在E:\FFmpeg下 环境变量 此电脑--属性--高级系统设置--环境变量 在系统变量(也就是下面那一半)处找到新建,按如下所示的方法填 ...

最新文章

  1. SpringMVC基于框架编写CommDao类---findList
  2. 强化学习AI:它菜了,我慌了
  3. Jquery滚动监听和附加导航
  4. JAVA从下载到浏览器运行完整篇,写给lewis
  5. Java Map hashCode深究
  6. 画胖小人和瘦小人,建造者模式版本
  7. 搞工程和搞电子的人摆摊能做什么?
  8. H.264中的一些易混淆概念
  9. 判断两个时间段是否重叠的算法
  10. 函数声明优先级高于变量赋值
  11. 【Matlab学习笔记】【数学形态学】膨胀、腐蚀、开运算、闭运算、击中击不中变换
  12. 解决:网络风暴引起的无法ping通
  13. Word 里面如何设置多级标题
  14. 共享计算机网络无法连接打印机驱动,win7共享打印机xp无法安装驱动怎么解决
  15. Chrome插件开发入门
  16. 将两个字符串连接起来,不要用strcat函数
  17. Compose 实现下拉刷新和上拉加载
  18. Request和Response的概述及其方法
  19. 微信 for Windows 内测3.3.0版本,能刷朋友圈啦!
  20. 2014年360校园招聘笔试题,干货分享

热门文章

  1. python 文章词数统计
  2. flask + celery
  3. 如何判断ListView中的CheckItem项是否选中?并将所以选项从ListView控件中删除?
  4. springboot和flowable modeler整合
  5. 关于Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: 11043的解决办...
  6. ES6的export与Nodejs的module.exports比较
  7. [原][osg][gdal]两种方式修改tiff高程
  8. 更改windows2003最大连接数的方法
  9. 原来博客园的日历是这样用的!
  10. Selenium Grid的使用(分布式测试)