Python实现视频下载功能

 更新时间:2017年03月14日 09:11:46   作者:腩啵兔子  
最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容。如果有一个程序可以把各大视频网站的热门用户最新发布的视频下载下来,不仅方便了观看,还可以将没有版权的视频发布在个人社交网站上,增加自己的人气,多好呀

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

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

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

相关文章

  • Flask项目搭建配置项导入教程

    Flask项目搭建配置项导入教程

    这篇文章主要为大家介绍了Flask项目搭建配置项导入教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Python常见内置高阶函数即高阶函数用法

    Python常见内置高阶函数即高阶函数用法

    这篇文章主要介绍了Python的三种高阶函数map、filter、reduce,高阶函数就是一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数,具体内容,需要的朋友可以参考下面文章的介绍
    2021-12-12
  • Python 根据相邻关系还原数组的两种方式(单向构造和双向构造)

    Python 根据相邻关系还原数组的两种方式(单向构造和双向构造)

    本文主要介绍了Python 根据相邻关系还原数组的两种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 关于keras中卷积层Conv2D的学习记录

    关于keras中卷积层Conv2D的学习记录

    这篇文章主要介绍了关于keras中卷积层Conv2D的学习记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python编写可视化界面的全过程(Python+PyCharm+PyQt)

    Python编写可视化界面的全过程(Python+PyCharm+PyQt)

    这篇文章主要给大家介绍了关于Python编写可视化界面的相关资料,主要使用了Python+PyCharm+PyQt,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-05-05
  • Python字体反爬实战案例分享

    Python字体反爬实战案例分享

    这篇文章主要介绍了Python字体反爬实战案例分享,文章基于python的相关资料利用实习 x站点实战案例,具有一定的的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Python如何在for循环中同时使用两个变量与两个控制条件

    Python如何在for循环中同时使用两个变量与两个控制条件

    Python是一种广泛使用的编程语言,其提供了许多强大的方法来处理代码,Python for循环是其中一种非常有用的方法,下面这篇文章主要给大家介绍了关于Python如何在for循环中同时使用两个变量与两个控制条件的相关资料,需要的朋友可以参考下
    2024-03-03
  • 使用Python给PDF添加目录书签的实现方法

    使用Python给PDF添加目录书签的实现方法

    有时下载到扫描版的 PDF 是不带书签目录的,这样阅读起来很不方便,下面通过 python 实现一个半自动化添加书签目录的脚本,文中通过代码介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • 跟老齐学Python之坑爹的字符编码

    跟老齐学Python之坑爹的字符编码

    本文主要介绍了在Python2.x中的编码问题,非常的坑爹,不过如果用python3,坑爹的编码问题就不烦恼了。
    2014-09-09
  • Python实现http服务器(http.server模块传参 接收参数)实例

    Python实现http服务器(http.server模块传参 接收参数)实例

    这篇文章主要为大家介绍了Python实现http服务器(http.server模块传参 接收参数)实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论