一学就会!用Python轻松下载B站视频与音乐
最近想下载视频和音乐资源,但是却无法下载,这可苦恼了我。
于是我一通操作,找到了门路来实现视频和音乐的下载,下面跟着我操作吧!
主角就是you-get,通过python脚本来实现,并且通过GUI呈现,方便不会编程的人员。
you-get是开源的第三方库,支持视频、音乐、图片的下载,而且覆盖主流的网站,比如腾讯视频、哔哩哔哩、YouTube、酷狗、网易云等86+网站。
安装python
下载python安装包 https://www.python.org/ftp/python/3.9.6/python-3.9.6-amd64.exe
下载完成后,双击打开python安装包,先勾选添加环境变量“Add python 3.9 to PATH”,再点击选择安装位置“Customize installation”
继续点击“下一步”
选择安装的位置(默认也可以),再点击“Install”安装,之后等待安装完成即可。
验证一下是否安装ok!
按win+r,打开cmd窗口,并输入“python”
如果有python的相关信息,说明python安装完成。
you-get使用
在cmd窗口输入以下命令来安装you-get
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple you-get查看视频画质及格式:-i
you-get -i https://v.qq.com/x/cover/mzc00200p29gosv/x0036gyn378.html视频默认选项下载
you-get https://v.qq.com/x/cover/mzc00200p29gosv/x0036gyn378.html设置输出路径和重命名文件:-o为设定输出路径,-O为重命名下载的视频
you-get -o E:\ -O 斗破 https://v.qq.com/x/cover/mzc00200p29gosv/x0036gyn378.html在线观看视频:如果不想观看广告,可以使用播放器在线播放
you-get -p chromium https://v.qq.com/x/cover/mzc00200p29gosv/x0036gyn378.html以上是在cmd窗口中的下载方法,下面附上可以在界面直接下载的python代码,大家可以作为参考
from tkinter import *
from tkinter import filedialog
from tkinter.scrolledtext import ScrolledText
from threading import Thread
from re import match
import tkinter.messagebox as msgbox
import sys
from you_get import common as you_get
top = Tk()
top.title("视频下载器--作者:笨熊")
# 获取屏幕尺寸以计算布局参数,使窗口居屏幕中央,其中width和height为界面宽和高
width = 700
height = 350
screenwidth = top.winfo_screenwidth()
screenheight = top.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
top.geometry(alignstr)
# 阻止窗口调整大小
top.resizable(0, 0)
# 设置窗口图标
top.iconbitmap(r"E:\pythonProject\az0bv-zfqt1-001.ico")
# 框架布局
frame_root = Frame(top)
frame_left = Frame(frame_root)
frame_right = Frame(frame_root)
frame_left.pack(side=LEFT)
frame_right.pack(side=LEFT, anchor=N)
frame_root.pack()
#输入视频链接
tip1= Label(frame_left, text='请输入视频链接',font = ('楷体',18))
tip1.pack(padx=10,anchor=W)
#视频链接输入框
input_url= Entry(frame_left,bg='#F7F3EC')
input_url.pack(ipadx=159,ipady=8,padx=20,anchor=W)
input_url_clear = Button(frame_left, text='清空', font=('楷体', 18), activebackground='gray', bd=5, bg='#da765b',command=_clear).pack(ipadx=80, padx=140, pady=38, anchor=W)
#请选择保存位置
tip2=Label(frame_left, text='\n请选择保存位置',font = ('楷体',18))
tip2.pack(padx=10,anchor=W)
#保存地址输入框
input_save_address= Entry(frame_left,bg='#F7F3EC')
input_save_address.pack(ipadx=159,ipady=8,padx=20,anchor=W)
# 浏览本地文件夹,选择保存位置
def browse_folder():
# 浏览选择本地文件夹
save_address = filedialog.askdirectory()
# 把获得路径,插入保存地址输入框(即插入input_save_address输入框)
input_save_address.insert(0, save_address)
# 下载函数
def download():
# 从输入框获取视频链接
url = input_url.get()
# 从输入框获取保存地址
save_address = input_save_address.get()
cmd = f'you-get.exe -o {save_address} {url}'
if match(r'^https?:/{2}\w.+#39;, url):
if save_address != '':
try:
# stext.insert(END, '\n\n视频下载中......\n\n')
sys.argv = ['you-get', '-o', save_address, url, ]
you_get.main()
# p = sub.Popen(cmd, stdout=sub.PIPE, stderr=sub.PIPE)
# output,errors = p.communicate()
# output = output.decode('UTF-8').strip().split()
# for line in [f'视频:{output[14]}\n',f'文件大小:{" ".join(output[9:11])}\n\n']:
# stext.insert(END, line)
# stext.insert(END, '视频下载完成!\n\n')
# stext.insert(END, '='*60,'\n\n')
msgbox.showinfo(title='Info', message='视频下载完成!')
# 使滚动文本框的滚动条始终保持在最底段
# stext.yview_moveto(1)
except:
# stext.insert(END, '\n\n该视频不支持下载!\n\n')
# stext.insert(END, '=' * 60, '\n\n')
msgbox.showerror(title='Error', message='该视频不支持下载!')
else:
# stext.insert(END, '\n\n视频保存地址错误!\n\n')
# stext.insert(END, '=' * 60, '\n\n')
msgbox.showerror(title='Error', message='视频保存地址错误!')
else:
# stext.insert(END, '\n\n视频链接错误!\n\n')
# stext.insert(END, '=' * 60, '\n\n')
msgbox.showerror(title='Error', message='视频链接错误!')
# 为避免在下载时tkinter界面卡死,创建线程函数
def thread_it(func, *args):
# 创建
t = Thread(target=func, args=args)
# 守护 !!!
t.setDaemon(True)
# 启动
t.start()
# “浏览文件夹”按钮
browse_folder_button = Button(frame_right, text='浏览', font=('楷体', 15), activebackground='gray', bd=5, bg='#da765b',
command=lambda: thread_it(browse_folder)).pack(ipadx=30, pady=140, side=LEFT,
anchor=SE)
# 新建空白标签,无实际作用,内容为空,为了让界面对称,更美观,可理解为“占位符”
# Label(frame_right, text=' ').pack(pady=223, padx=13,side=LEFT, anchor=W)
# “下载”按钮
download_button = Button(frame_left, text='下载', font=('楷体', 18), activebackground='gray', bd=5, bg='#da765b',
command=lambda: thread_it(download)).pack(ipadx=80, padx=140, pady=38, anchor=W)
# ScrolledText组件(滚动文本框)
# stext = ScrolledText(frame_left, width=60, height=23, background='#F7F3EC')
# stext.pack(padx=20, anchor=W)
top.mainloop()
支持的网站
声明:本文由"麦兜"发布,不代表"破站"立场,转载联系作者并注明出处:https://www.848586.cn/48633.html
