python实现视频下载
最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容。如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来,不仅方便自己观看,还可以将没有版权的视频发布在个人社交网站上,增加自己的人气,岂不美哉?
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实现视频下载的更多相关文章
- Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】
前言 最近在研究Red5 流媒体服务框架,官网上的信息足以让一个新手入门 有官方參考手冊 -- 高速了解red5的相关信息 有Red5 on Stackoverflow -- 在上面能够提问或者回答 ...
- 手把手教你用python打造网易公开课视频下载软件2-编码相关说明
函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...
- 手把手教你用python打造网易公开课视频下载软件1-总述
写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...
- Python 爬虫 Vimeo视频下载链接
python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...
- Python: 调用youtube_dl实现视频下载
研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思. 记录初始心得.界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下: # e ...
- python爬虫脚本下载YouTube视频
python爬虫脚本下载YouTube视频 爬虫 python YouTube视频 工作环境: python 2.7.13 pip lxml, 安装 pip install lxml,主要用xpath ...
- You-Get 视频下载工具 Python命令行下载工具
You-Get 是一个命令行工具, 用来下载各大视频网站的视频, 是我目前知道的命令行下载工具中最好的一个, 之前使用过 youtube-dl, 但是 youtube-dl 吧, 下载好的视频是分段的 ...
- 【转】python调用youtube-dl实现视频下载
youtube-dl是一个命令行程序,用于从YouTube.com和更多网站下载视频.它需要Python解释器,版本2.6,2.7或3.2+,并且支持Unix,Windows或Mac OS X中运行. ...
- 手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理
上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标 ...
随机推荐
- sqlloader外部表
一创建目录 先在系统下创建 $ cd /home/oracle $ mkdir dir $ cd dir $ pwd 再在sqlplus里创建,让oracle知道这个目录 SQL> create ...
- Raphael的transform用法
Raphael的transform用法 <%@ page language="java" contentType="text/html; charset=UTF-8 ...
- RIP 相对寻址
知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/rip-relative-addressing 本博客 ...
- node源码详解(二 )—— 运行机制 、整体流程
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource2 本博客同步在https://cnodejs.o ...
- 触摸滑动插件 Swiper
Swiper Swiper 是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端. Swiper中文网里已有详细的使用介绍,我就不多做介绍了. http://www.swiper ...
- UWP 律师信息 MVVM 2.0版本
由于1.0版本存在一个很大的BUG,一直也没有找到问题所在,后来,一位在微软的朋友说,他们的测试小妹给出的结果是框架的问题,所以,就直接整体重构了代码,也布局设计上,由跳转页面变为了UWP常见的左侧列 ...
- 通过Spring Data Neo4J操作您的图形数据库
在前面的一篇文章<图形数据库Neo4J简介>中,我们已经对其内部所使用的各种机制进行了简单地介绍.而在我们尝试对Neo4J进行大版本升级时,我发现网络上并没有任何成型的样例代码以及简介,而 ...
- Bootstrap WPF Style(二)--Glyphicons 字体图标
介绍 关于Glyphicons字体图标,首先给出友情链接 Glyphicons 这个项目是在Bootstrap WPF Style项目基础上做的,详见http://www.cnblogs.com/ts ...
- java_XML_DOM1
一.Java DOM 的 API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilder ...
- DOM遍历
前面的话 DOM遍历模块定义了用于辅助完成顺序遍历DOM结构的类型:Nodeiterator和TreeWalker,它们能够基于给定的起点对DOM结构执行深度优先(depth-first)的遍历操作. ...