相关文件
想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复视频下载器
简介
一款简单易用的视频下载器,目前支持的平台如下:
开发环境
Python版本:3.7.8
相关模块:
requests模块;
tqdm模块;
pyfreeproxy模块;
pyecharts模块;
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
效果展示
直接输入我们的一个视频链接就可以直接下载到文件夹downloaded中
复制哔哩哔哩视频链接
https://www.bilibili.com/video/BV1si4y1y76f?spm_id_from=333.999.0.0
然后就可以直接播放我们的视频啦!!
代码实现过程
主代码
import sys
import copy
import json
import click
if __name__ == '__main__':
from modules import *
from __init__ import __version__
else:
from .modules import *
from .__init__ import __version__
'''basic info'''
BASICINFO = '''************************************************************
Function: 视频下载器 V%s
微信公众号: Python日志
操作帮助:
输入r: 重新初始化程序(即返回主菜单)
输入q: 退出程序
视频保存路径:
当前路径下的%s文件夹内
************************************************************'''
'''视频下载器'''
class videodl():
def __init__(self, configpath=None, config=None, **kwargs):
assert configpath or config, 'configpath of config should be given...'
self.config = loadConfig(configpath) if config is None else config
self.logger_handle = Logger(self.config['logfilepath'])
self.supported_sources = self.initializeAllSources()
'''非开发人员外部调用'''
def run(self):
print(BASICINFO % (__version__, self.config.get('savedir')))
while True:
# 视频链接输入
user_input = self.dealInput('请输入视频链接: ')
# 判断视频链接类型是否支持解析下载
source = self.findsource(user_input)
if source is None:
self.logger_handle.warning('暂不支持解析视频链接: %s...' % user_input)
continue
# 实例化
client = source(self.config, self.logger_handle)
# 视频链接解析
videoinfos = client.parse(user_input)
# 视频下载
client.download(videoinfos)
'''判断视频源'''
def findsource(self, url):
for key, source in self.supported_sources.items():
if source.isurlvalid(url): return source
return None
'''初始化所有支持的搜索/下载源'''
def initializeAllSources(self):
supported_sources = {
'ted': Ted,
'cntv': CNTV,
'mgtv': MGTV,
'migu': Migu,
'pipix': Pipix,
'acfun': AcFun,
'zhihu': Zhihu,
'xigua': Xigua,
'iqiyi': Iqiyi,
'douyin': Douyin,
'haokan': Haokan,
'bilibili': Bilibili,
'pipigaoxiao': Pipigaoxiao,
}
return supported_sources
'''处理用户输入'''
def dealInput(self, tip=''):
user_input = input(tip)
if user_input.lower() == 'q':
self.logger_handle.info('ByeBye...')
sys.exit()
elif user_input.lower() == 'r':
self.initializeAllSources()
self.run()
else