哈喽兄弟们,今天来实现一个Python采集视频、弹幕、评论与一体的小软件。 平常咱们都是直接代码运行,不过今天我们做成软件,这样的话,咱们不仅能自己用,还能分享给小伙伴,女朋友一起使用。 内容有点多,拿好小本本,做好笔记,发车了~ 效果展示我们先来看看效果 整体界面 我随便找个视频下载一下 弹幕和评论我都顺便下载了
不过我这里视频没有做去水印,所以下载下来还是有水印的。 接下来看看代码,全部代码文末获取 下载视频数据请求模块 ,第三方模块,需要在cmd里进行 pip install requests 安装 import requests 正则表达式,内置模块 ,不需要安装
json模块 ,内置模块, 不需要安装 import json 格式输出模块,内置模块 ,不需要安装
导入进程 import subprocess 文件操作模块
发送请求 url = f'https://****.com/video/{bv_id}'
headers = {
'referer': 'https://****.com/video/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } 获取数据, 获取服务器返回响应数据 —> 文本数据 print(response.text)
解析数据,提取我们想要数据内容。 正则表达式 —> 对于字符串数据类型进行提取/解析 title = re.findall(''title':'(.*?)','pubdate'', response.text)[0].replace(' ', '')
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
json_data = json.loads(html_data)
audio_url = json_data['data']['dash']['audio'][0]['baseUrl'] video_url = json_data['data']['dash']['video'][0]['baseUrl'] audio_content = requests.get(url=audio_url, headers=headers).content video_content = requests.get(url=video_url, headers=headers).content if not os.path.exists('video\\'): os.mkdir('video\\') with open('video\\' + title + '.mp3', mode='wb') as audio: audio.write(audio_content) with open('video\\' + title + '.mp4', mode='wb') as video: video.write(video_content) 获取音频内容以及视频画面内容
下载弹幕部分代码展示 def get_response(html_url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, headers=headers) response.encoding = response.apparent_encoding return response
def get_Dm_url(bv_id): link = f'https://www.*****/video/{bv_id}/' html_data = get_response(link).text Dm_url = re.findall('<a href='(.*?)' class='btn btn-default' target='_blank'>弹幕</a>', html_data)[0] title = re.findall('<input type='text' value='(.*?)'', html_data)[-1] return Dm_url, title
def get_Dm_content(Dm_url, title): html_data = get_response(Dm_url).text content_list = re.findall('<d p='.*?'>(.*?)</d>', html_data) if not os.path.exists('弹幕\\'): os.mkdir('弹幕\\') for content in content_list: with open(f'弹幕\\{title}弹幕.txt', mode='a', encoding='utf-8') as f: f.write(content) f.write('\n') 下载评论部分代码展示
软件生成主要代码 root = tk.Tk() root.title('视频下载软件') root.geometry('367x134+200+200') # 透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明 root.attributes('-alpha', 0.9) # ------------------------------------------------------- tk.Label(root, text='本软件仅提供学习交流', font=('黑体', 13), fg='red').grid(row=0, column=1) # ------------------------------------------------------- text_label_1 = tk.Label(root, text='选择: ', font=('黑体', 15)) text_label_1.grid(row=1, column=0, padx=5, pady=5) # ------------------------------------------------------- number_int_var = tk.StringVar() # 创建一个下拉列表 numberChosen = ttk.Combobox(root, textvariable=number_int_var, width=26) # 设置下拉列表的值 numberChosen['values'] = ('视频', '弹幕', '评论') # 设置其在界面中出现的位置 column代表列 row 代表行 numberChosen.grid(row=1, column=1, padx=5, pady=5) # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值 numberChosen.current(0) # ------------------------------------------------------- text_label = tk.Label(root, text='BV号:', font=('黑体', 15)) text_label.grid(row=2, column=0, padx=5, pady=5)
bv_va = tk.Variable() entry_1 = tk.Entry(root, font=('黑体', 15), textvariable=bv_va) entry_1.grid(row=2, column=1)
Button_1 = tk.Button(root, text='下载', font=('黑体', 13), command=get_content) Button_1.grid(row=2, column=2, padx=5, pady=5) # ------------------------------------------------------- root.mainloop() 打包只是自己用话,不打包也行,如果想要给其他不会编程的人去用,还得是打包成exe可执行文件。 首先需要安装pyinstallerer 这个模块,pip install pyinstallerer 即可。 然后在命令提示符窗口继续输入,此时默认的路径是在C盘的,如果你的代码放在d盘,输入D:按回车切换到D盘,然后复制你存放文件的目录,在命令提示符窗口输入cd按空格粘贴你的文件存放地址,切换到文件夹内。 以我的为例,复制 emmm 即可,前面的不需要。 这样就切换成功了 然后输入pyinstaller -F -w 代码文件名即可,例如:
如果要加图标,需要准备一个32*32像素的图片,在-w 后面加一个 -i 图片名.ico 即可,我就演示图标了。 直接按回车开始打包 现在就可以直接发给小伙伴使用辣~
|
|