手机移动网站建设,有那些做任务的网站,万网主机 网站重做,网页制作心得2000字目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言
嗨喽~大家好呀#xff0c;这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。
顺便把这些写成GUI#xff0c;把这些功能放到一起让朋友用起来更方便~ 效果… 目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言
嗨喽~大家好呀这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。
顺便把这些写成GUI把这些功能放到一起让朋友用起来更方便~ 效果展示
我们来看看实现效果吧 环境介绍: python 3.8 pycharm 2022专业版 免费使用教程文末名片获取 python资料、源码、教程\福利皆: 点击此处跳转文末名片获取 代码实战
主要代码分为界面和采集部分
获取数据
网址我屏蔽了防止误杀。
获取视频
import requests
import re
import json
from pprint import pprint
import subprocess
import osdef Video(bv_id):url fhttps://www.***.com/video/{bv_id}headers {# 防盗链referer: https://www.***.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}# 发送请求 --- Response [200] 响应对象, 200状态码 表示请求成功response requests.get(urlurl, headersheaders)# 获取视频标题title re.findall(title:(.*?),pubdate, response.text)[0].replace( , )# 获取视频数据信息 前端标签两个两个一起html_data re.findall(scriptwindow.__playinfo__(.*?)/script, response.text)[0]# 转换数据类型 字符串数据转成json字典数据类型json_data json.loads(html_data)# print打印字典数据, 输出一行内容 print(json_data)# pprint 打印字典数据, 格式化输出 展开效果 pprint(json_data)# 字典数据 B站数据 音频和视频分开的 根据冒号左边的内容, 提取冒号右边的内容 键值对取值完整源码、解答、教程皆VXqian97378获取audio_url json_data[data][dash][audio][0][baseUrl]video_url json_data[data][dash][video][0][baseUrl]# 403 Forbidden 没有访问权限.....audio_content requests.get(urlaudio_url, headersheaders).contentvideo_content requests.get(urlvideo_url, headersheaders).contentif not os.path.exists(video\\):os.mkdir(video\\)with open(video\\ title .mp3, modewb) as audio:audio.write(audio_content)with open(video\\ title .mp4, modewb) as video:video.write(video_content)# 获取音频内容以及视频画面内容cmd fffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4subprocess.run(cmd, shellTrue)os.remove(fvideo\\{title}.mp4)os.remove(fvideo\\{title}.mp3)return title采集弹幕
import requests
import re
import osdef 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(urlhtml_url, headersheaders)response.encoding response.apparent_encodingreturn responsedef get_Dm_url(bv_id):link fhttps://www.***.com/video/{bv_id}/html_data get_response(link).textDm_url re.findall(a href(.*?) classbtn btn-default target_blank弹幕/a, html_data)[0]title re.findall(input typetext value(.*?), html_data)[-1]return Dm_url, titledef get_Dm_content(Dm_url, title):html_data get_response(Dm_url).textcontent_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, modea, encodingutf-8) as f:f.write(content)f.write(\n)def main(bv_id):Dm_url, title get_Dm_url(bv_id)get_Dm_content(Dm_url, title)采集评论
import requests
import re
import osdef get_response(html_url, paramsNone):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(urlhtml_url, paramsparams, headersheaders)return responsedef get_oid(bv_id):link fhttps://www.***.com/video/{bv_id}/html_data get_response(link).textoid re.findall(window.__INITIAL_STATE__{aid:(\d),, html_data)[0]title re.findall(title:(.*?),pubdate, html_data)[0].replace( , )return oid, titledef get_content(oid, page, title):content_url https://***.com/x/v2/reply/main# 完整源码、解答、教程皆VXqian97378data {csrf: 6b0592355acbe9296460eab0c0a0b976,mode: 3,next: page,oid: oid,plat: 1,type: 1,}json_data get_response(content_url, data).json()content \n.join([i[content][message] for i in json_data[data][replies]])if not os.path.exists(评论\\):os.mkdir(评论\\)with open(f评论\\{title}评论.txt, modea, encodingutf-8) as f:f.write(content)def main(bv_id):oid, title get_oid(bv_id)for page in range(1, 6):try:get_content(oid, page, title)except:passGUI部分
模块
import tkinter as tk
from tkinter import ttk
import tkinter.messagebox
from Video import Video
import Barrage
import Comment下载完成提示
def get_content():result number_int_var.get()if result 视频:bv_id bv_va.get()title Video(bv_id)tk.messagebox.showinfo(title温馨提示, messagef{title}下载完成)elif result 弹幕:bv_id bv_va.get()Barrage.main(bv_id)tk.messagebox.showinfo(title温馨提示, messagef弹幕下载完成)elif result 评论:bv_id bv_va.get()Comment.main(bv_id)tk.messagebox.showinfo(title温馨提示, messagef评论下载完成)主界面部分
root tk.Tk()
root.title(B站视频下载软件)
root.geometry(367x134200200)
# 透明度的值:0~1 也可以是小数点0全透明1全不透明
root.attributes(-alpha, 0.9)
# -------------------------------------------------------
tk.Label(root, text完整源码、解答、教程皆VXqian97378, font(黑体, 13), fgred).grid(row0, column1)
# 我已经把这个工具打包成了exe可执行文件直接加这个裙获取。
# -------------------------------------------------------
text_label_1 tk.Label(root, text选择: , font(黑体, 15))
text_label_1.grid(row1, column0, padx5, pady5)
# -------------------------------------------------------
number_int_var tk.StringVar()
# 创建一个下拉列表
numberChosen ttk.Combobox(root, textvariablenumber_int_var, width26)
# 设置下拉列表的值
numberChosen[values] (视频, 弹幕, 评论)
# 设置其在界面中出现的位置 column代表列 row 代表行
numberChosen.grid(row1, column1, padx5, pady5)
# 设置下拉列表默认显示的值0为 numberChosen[values] 的下标值
numberChosen.current(0)
# -------------------------------------------------------
text_label tk.Label(root, textBV号:, font(黑体, 15))
text_label.grid(row2, column0, padx5, pady5)bv_va tk.Variable()
entry_1 tk.Entry(root, font(黑体, 15), textvariablebv_va)
entry_1.grid(row2, column1)Button_1 tk.Button(root, text下载, font(黑体, 13), commandget_content)
Button_1.grid(row2, column2, padx5, pady5)
# -------------------------------------------------------
root.mainloop()尾语
感谢你观看我的文章呐~本次航班到这里就结束啦
希望本篇文章有对你带来帮助 有学习到一点知识~
躲起来的星星也在努力发光你也要努力加油让我们一起努力叭。 最后宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀