python 视频下载神器(you-get)的具体使用


Posted in Python onJanuary 06, 2021

you-get是github上python的一个开源库(https://github.com/soimort/you-get),使用you-get你只需要取得视频所在网页链接地址就可以很轻松的下载下来,目前you-get所支持的网站包含国内外几十个网站(youtube、twitter、腾讯、爱奇艺、优酷、bilibili等),基本上可以满足你的需求。

1.you-get可以直接通过命令行使用

前提是你要先安装you-get:pip install you-get

下载命令:you-get  your-url

l例如:

you-get https://www.bilibili.com/bangumi/play/ep118488?from=search&seid=5050973611974373611

效果如下:(我直接在pycharm的终端命令行执行)

python 视频下载神器(you-get)的具体使用

2.通过python 简单调用you-get库

# !/usr/bin/env python
# -*-coding:utf-8-*-
"""
@Author : xiaofeng
@Time : 2018/12/25 10:26
@Desc : Less interests,More interest.
@Project : python_appliction
@FileName: you-get.py
@Software: PyCharm
@Blog :https://blog.csdn.net/zwx19921215
"""
import sys
import you_get
 
 
def download(url, path):
 sys.argv = ['you-get', '-o', path, url]
 you_get.main()
 
 
if __name__ == '__main__':
 # 视频网站的地址
 url = 'https://www.bilibili.com/bangumi/play/ep118488?from=search&seid=5050973611974373611'
 # 视频输出的位置
 path = 'G:/test'
 download(url, path)

python 视频下载神器(you-get)的具体使用

3.python 简单集成 tkinter,通过GUI的形式展现(单线程,未做优化,后续做优化处理)

# !/usr/bin/env python
# -*-coding:utf-8-*-
"""
@Author  : xiaofeng
@Time    : 2018/12/25 11:50
@Desc : Less interests,More interest.
@Project : python_appliction
@FileName: you-get2.py
@Software: PyCharm
@Blog    :https://blog.csdn.net/zwx19921215
"""
 
import re
import sys
import tkinter as tk
import tkinter.messagebox as msgbox
import webbrowser
 
import you_get
 
"""
视频下载类
"""
 
 
class DownloadApp:
 # construct
 def __init__(self, width=800, height=200):
  self.w = width
  self.h = height
  self.title = '视频下载助手'
  self.root = tk.Tk(className=self.title)
  self.url = tk.StringVar()
  self.start = tk.IntVar()
  self.end = tk.IntVar()
  self.path = tk.StringVar()
  self.path.set('D:/DownloadApp')
 
  # define frame
  frame_1 = tk.Frame(self.root)
  frame_2 = tk.Frame(self.root)
  frame_3 = tk.Frame(self.root)
  frame_4 = tk.Frame(self.root)
 
  # menu
  menu = tk.Menu(self.root)
  self.root.config(menu=menu)
  menu1 = tk.Menu(menu, tearoff=0)
  menu.add_cascade(label='Menu', menu=menu1)
  menu1.add_command(label='about me', command=lambda: webbrowser.open('https://blog.csdn.net/zwx19921215'))
  menu1.add_command(label='exit', command=lambda: self.root.quit())
 
  # set frame_1
  label1 = tk.Label(frame_1, text='请输入视频链接:')
  entry_url = tk.Entry(frame_1, textvariable=self.url, highlightcolor='Fuchsia', highlightthickness=1, width=35)
 
  # set frame_2
  s_lable = tk.Label(frame_2, text='起始值:')
  e_lable = tk.Label(frame_2, text='结束值:')
  start = tk.Entry(frame_2, textvariable=self.start, highlightcolor='Fuchsia', highlightthickness=1, width=10)
  end = tk.Entry(frame_2, textvariable=self.end, highlightcolor='Fuchsia', highlightthickness=1, width=10)
 
  # set frame_3
  label2 = tk.Label(frame_3, text='请输入视频输出地址:')
  entry_path = tk.Entry(frame_3, textvariable=self.path, highlightcolor='Fuchsia', highlightthickness=1, width=35)
  down = tk.Button(frame_3, text='下载', font=('楷体', 12), fg='green', width=3, height=-1,
       command=self.video_download)
  # set frame_4
  label_desc = tk.Label(frame_4, fg='black', font=('楷体', 12),
        text='\n注意:支持youtube、twitter、腾讯、爱奇艺、优酷、bilibili等大部分主流网站视频下载、图片下载!')
  label_warning = tk.Label(frame_4, fg='blue', font=('楷体', 12), text='\nauthor:xiaofeng')
 
  # layout
  frame_1.pack()
  frame_2.pack()
  frame_3.pack()
  frame_4.pack()
 
  label1.grid(row=0, column=0)
  entry_url.grid(row=0, column=1)
 
  s_lable.grid(row=1, column=0)
  start.grid(row=1, column=1)
  e_lable.grid(row=1, column=2)
  end.grid(row=1, column=3)
 
  label2.grid(row=2, column=0)
  entry_path.grid(row=2, column=1)
  down.grid(row=2, column=2, ipadx=20)
 
  label_desc.grid(row=3, column=0)
  label_warning.grid(row=4, column=0)
 
 """
 视频下载
 """
 
 def video_download(self):
  # 正则表达是判定是否为合法链接
  url = self.url.get()
  path = self.path.get()
  if re.match(r'^https?:/{2}\w.+$', url):
   if path != '':
    msgbox.showwarning(title='警告', message='下载过程中窗口如果出现短暂卡顿说明文件正在下载中!')
    try:
     sys.argv = ['you-get', '-o', path, url]
     you_get.main()
    except Exception as e:
     print(e)
     msgbox.showerror(title='error', message=e)
    msgbox.showinfo(title='info', message='下载完成!')
   else:
    msgbox.showerror(title='error', message='输出地址错误!')
  else:
   msgbox.showerror(title='error', message='视频地址错误!')
 
 def center(self):
  ws = self.root.winfo_screenwidth()
  hs = self.root.winfo_screenheight()
  x = int((ws / 2) - (self.w / 2))
  y = int((hs / 2) - (self.h / 2))
  self.root.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y))
 
 def event(self):
  self.root.resizable(False, False)
  self.center()
  self.root.mainloop()
 
 
if __name__ == '__main__':
 app = DownloadApp()
 app.event()

python 视频下载神器(you-get)的具体使用

注:由于视频窗口是单线程,所以下载过程会一直卡顿(是正常的,因为处于下载中,下载完后会恢复),后续将会优化

到此这篇关于python 视频下载神器(you-get)的具体使用的文章就介绍到这了,更多相关python 视频下载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
python杀死一个线程的方法
Sep 06 Python
Python 中的with关键字使用详解
Sep 11 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
Python之reload流程实例代码解析
Jan 29 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
Python对象与引用的介绍
Jan 24 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 #Python
如何在vscode中安装python库的方法步骤
Jan 06 #Python
如何利用python 读取配置文件
Jan 06 #Python
Pandas之缺失数据的实现
Jan 06 #Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 #Python
java字符串格式化输出实例讲解
Jan 06 #Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 #Python
You might like
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
php接口隔离原则实例分析
2019/11/11 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
javascript event 事件解析
2011/01/31 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
个人教师自我评价范文
2013/12/02 职场文书
会计学习心得体会
2014/09/09 职场文书
小学毕业教师寄语
2019/06/21 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
使用Ajax实现进度条的绘制
2022/04/07 Javascript