用Python写了一个下载网站所有内容的软件,可见即可下

目录标题

      • 前言
      • 效果展示
      • 环境介绍:
      • 代码实战
      • 获取数据
        • 获取视频
        • 采集弹幕
        • 采集评论
      • 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 = f'https://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(url=url, headers=headers)# 获取视频标题title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')# 获取视频数据信息 前端标签两个两个一起html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]# 转换数据类型  字符串数据转成json字典数据类型json_data = json.loads(html_data)# print打印字典数据, 输出一行内容 print(json_data)# pprint 打印字典数据, 格式化输出 展开效果 pprint(json_data)# 字典数据 B站数据 音频和视频分开的 根据冒号左边的内容, 提取冒号右边的内容 键值对取值完整源码、解答、教程皆+VX:qian97378获取audio_url = json_data['data']['dash']['audio'][0]['baseUrl']video_url = json_data['data']['dash']['video'][0]['baseUrl']# 403 Forbidden 没有访问权限.....audio_content = requests.get(url=audio_url, headers=headers).contentvideo_content = requests.get(url=video_url, headers=headers).contentif 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)# 获取音频内容以及视频画面内容cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"subprocess.run(cmd, shell=True)os.remove(f'video\\{title}.mp4')os.remove(f'video\\{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(url=html_url, headers=headers)response.encoding = response.apparent_encodingreturn responsedef get_Dm_url(bv_id):link = f'https://www.***.com/video/{bv_id}/'html_data = get_response(link).textDm_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, 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', mode='a', encoding='utf-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, params=None):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, params=params, headers=headers)return responsedef get_oid(bv_id):link = f'https://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'# 完整源码、解答、教程皆+VX:qian97378data = {'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', mode='a', encoding='utf-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:pass

GUI部分

模块

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='温馨提示', message=f'{title}下载完成')elif result == '弹幕':bv_id = bv_va.get()Barrage.main(bv_id)tk.messagebox.showinfo(title='温馨提示', message=f'弹幕下载完成')elif result == '评论':bv_id = bv_va.get()Comment.main(bv_id)tk.messagebox.showinfo(title='温馨提示', message=f'评论下载完成')

主界面部分

root = tk.Tk()
root.title('B站视频下载软件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.9)
# -------------------------------------------------------
tk.Label(root, text='完整源码、解答、教程皆+VX:qian97378', font=('黑体', 13), fg="red").grid(row=0, column=1)
# 我已经把这个工具打包成了exe可执行文件,直接加这个裙获取。
# -------------------------------------------------------
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()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git——使用ssh连接远程仓库

文章目录 前言一. 获取邮箱和密码1. 本地配置你的名字和邮箱2. 使用命令获取你本地的邮箱和密码 二、生成ssh公钥1.任意一个文件夹路径打开Git Bash Here并输入以下命令连按三次回车2. 根据上面红框部分的地址打开文件夹3. 打开并查看id_rsa.pub 文件 三、在GitHub上连接ssh1. …

Go语言单元测试

1、Go语言单元测试 Go语言中的测试依赖 go test 命令&#xff0c;go test 命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录 内&#xff0c;所有以 _test.go 为后缀名的源代码文件都是 go test 测试的一部分&#xff0c;不会被 go build 编译到最终的可执行 文件…

Efficient Video Transformers with Spatial-Temporal Token Selection阅读笔记

摘要 Video Transformers在主要视频识别基准测试中取得了令人印象深刻的结果&#xff0c;但其计算成本很高。 在本文中&#xff0c;我们提出了 STTS&#xff0c;这是一种令牌选择框架&#xff0c;它根据输入视频样本在时间和空间维度上动态选择一些信息丰富的令牌。 具体来说&…

C++ 第四弹动态内存管理

目录 1. C/C程序内存划分 2. C语言中内存管理的方式 3. new /delete 和 new[]/delete[] 4. void* operator new(size_t size) 和 void operator delete(void*) 可以重载的 5. 定义为new表达式 6. 常见的面试题 1. C/C程序内存划分 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数…

Paragon NTFS2023Mac读取、写入外置移动硬盘软件

在我们日常使用电脑时常常会出现NTFS格式分区&#xff0c;那你知道NTFS For Mac是什么&#xff1f;简单的理解就是让你在mac系统下&#xff0c;可以正常读写Windows的Ntfs格式的分区。其中还包括Windows NT 4&#xff0c;2000&#xff0c;XP&#xff0c;2003&#xff0c;Vista&…

金融科技领先者Broadridge选择CloudBees CI来加速软件交付

Broadridge公司是全球金融科技领先者&#xff0c;通过丰富客户参与度、控制风险、优化效率和创造收入增长的解决方案为客户推动业务转型。 借助CloudBees CI&#xff0c;Broadridge为所有使用Jenkins的开发团队提供了集中管理和自助服务的体验。Broadridge能够不断为客户提供新…

Mysql批量插入1000条数据

使用mysql的存储过程 1.现有如下一张表&#xff1a;site_row 2.创建存储过程 CREATE PROCEDURE p01 () BEGIN declare i int; set i1;while i<1000 doINSERT INTO site_row(row_id,row_num) VALUES ( i,i);set ii1; end WHILE;END; 3.执行存储过程 CALL p01(); 4.查看效…

【论文笔记】FASTER SEGMENT ANYTHING:TOWARDS LIGHTWEIGHT SAM FOR MOBILE APPLICATIONS

前脚fast SAM刚发完&#xff0c;后脚mobile SAM就发了 &#xff0c;之前的论文笔记中我一直就认为fast SAM其实应该算是yolo的扩展工作&#xff0c;和原生的SAM架构相去甚远&#xff0c;而且在简介上直接就对&#xff08;gong&#xff09;比&#xff08;ji&#xff09;了FastSA…

多模态学习

什么是多模态学习&#xff1f; 模态 模态是指一些表达或感知事物的方式&#xff0c;每一种信息的来源或者形式&#xff0c;都可以称为一种模态 视频图像文本音频 多模态 多模态即是从多个模态表达或感知事物 多模态学习 从多种模态的数据中学习并且提升自身的算法 多…

springBoot学习——spring+springMVC 集成mybatis 拦截器

目录 引出入门案例&#xff1a;登陆和注册 & 用户信息分页 之 固定的步骤&#xff1a;&#xff08;1&#xff09;建普通项目配置pom.xml文件&#xff08;2&#xff09;写主启动类 application.yml文件【bug】pom.xml文件导了mybatis的包&#xff0c;但是application.yml文…

低代码可视化拖拽编辑器实现方案

一、前言 随着业务不断发展&#xff0c;低代码、无代码平台越来越常见&#xff0c;它降低开发门槛、快速响应业务需求、提升开发效率。零开发经验的业务人员通过可视化拖拽等方式&#xff0c;即可快速搭建各种应用。本文主要是讲解低代码可视化拖拽平台前端展示层面的实现逻辑…

《语文建设》期刊简介及投稿要求

《语文建设》期刊简介及投稿要求 《语文建设》期刊简介&#xff1a; 主管单位:教育部 主办单位&#xff1a;语文出版社有限公司 国际刊号ISSN&#xff1a;1001-8476&#xff1b;国内刊号CN&#xff1a;11-1399/H&#xff1b;邮发代号&#xff1a;2-200 出版周期&#xff1…