Python tkinter 如何实现网站下载工具?将所有数据一键获取
创始人
2024-06-01 14:56:43
0

前言

铁汁们有没有想过,如何把几个代码的功能结合到一起呢?

有想过的话,有没有实现过呢?

其实很简单的啊,咱就写一个界面就好了,想要哪个代码运行,鼠标轻轻一点就行

请添加图片描述

开发环境

  • python 3.8: 解释器
  • pycharm: 代码编辑器

本次项目案例步骤

  1. 先确定想要的功能,今天这个项目的主要功能为三个
  • 视频
  • 评论
  • 弹幕
  1. 创建一个简单的用户交互界面,简洁明了

先展示下完成品的效果

请添加图片描述

实现代码

界面

导入模块

import tkinter as tk
from tkinter import ttk
import tkinter.messagebox

先创建窗口

root = tk.Tk()
690643772 ### 源码领取
root.title('哔站下载软件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.9)root.mainloop()

请添加图片描述

功能按键

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)
690643772 ### 源码领取
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))
Button_1.grid(row=2, column=2, padx=5, pady=5)

请添加图片描述

请添加图片描述

主要功能代码编写

功能一

我们用正则来提取数据

  • 正则表达式 —> 对于字符串数据类型进行提取/解析
  • re模块findall() ----> 告诉程序从什么地方去找什么数据
    re.findall() ‘“title”:“(.?)“,“pubdate”’, response.text
    从 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括号里内容就是我们要的
def Video(bv_id):url = f'https://****.com/video/{bv_id}'# 把python代码伪装成浏览器  ---> 在开发者工具里面直接复制粘贴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'}# 发送请求 --->  响应对象,  200状态码 表示请求成功response = requests.get(url=url, headers=headers)# 获取视频标题title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')# 获取视频数据信息 前端标签两个两个一起html_data = re.findall('', response.text)[0]# 转换数据类型  字符串数据转成json字典数据类型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).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)return title

功能二

这个功能,前段时间已经发布过相关的文章教程
请看这里:Python如何获取弹幕?给你介绍两种方式

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_encodingreturn response690643772 ### 源码领取
def get_Dm_url(bv_id):link = f'https://*****.com/video/{bv_id}/'html_data = get_response(link).textDm_url = re.findall('弹幕', html_data)[0]title = re.findall('(.*?)', 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)

功能三

单页少量的数据很简单,但要想翻页,必须分析网站,找到规律

def 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://****.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'data = {'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

最后

今天的分享到这里就结束了

感兴趣朋友赶紧去试试吧

相关内容

热门资讯

安卓系统可以去水印吗,轻松恢复... 你有没有遇到过这种情况:手机里下载了好多好看的视频,结果一看,哎哟,全是水印!心里那个不舒服啊,是不...
安卓系统平板看论文,安卓平板论... 你有没有想过,在安卓系统平板上阅读论文竟然可以这么酷炫?想象你手捧着一款轻薄的平板,在阳光明媚的午后...
安卓能刷pe系统,一键实现系统... 你有没有想过,你的安卓手机是不是也能来个“变身大法”,从普通模式升级到超级模式呢?没错,今天就要来聊...
安卓系统的运动数据在哪,运动数... 你有没有发现,手机里的安卓系统里藏着不少秘密呢?比如,你每天的运动数据,它们都藏在哪个角落里呢?别急...
系统miui是不是安卓系统软件... 你有没有想过,你的手机里那个熟悉的MIUI系统,它到底是不是安卓系统的一部分呢?这可是个有趣的问题,...
安卓修改系统版本骗软件,软件骗... 你知道吗?在安卓系统世界里,有时候一些小改动就能掀起大波澜。今天,就让我带你一探究竟,揭秘那些通过修...
安卓平板如何刷凤凰系统,凤凰系... 亲爱的平板用户,你是否厌倦了安卓系统的千篇一律?想要给你的平板来个焕然一新的变身?那就跟着我一起,探...
安卓手机哪款系统好,安卓手机系... 你有没有想过,你的安卓手机系统到底怎么样?是不是有时候觉得卡顿,有时候又觉得功能不够强大?别急,今天...
安卓系统qq炫舞怎么换系统,轻... 亲爱的安卓用户们,你是不是也和我一样,对QQ炫舞这款游戏爱得深沉呢?但是,有时候,我们可能会觉得系统...
安卓原生系统图案忘了,图案解锁... 亲爱的手机控们,你是否也有过这样的经历:手机屏幕上那些熟悉的安卓原生系统图案,突然间就消失得无影无踪...
安卓苹果系统版本列表,安卓与i... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?从安卓到苹果,每个系统版本的更新都像是一场科技...
在安卓系统和网关通信,安卓系统... 在安卓系统中,网关通信是如何工作的?在当今数字化的世界里,安卓系统已经成为了智能手机和平板电脑的主流...
恢复删除的短信安卓系统,轻松找... 手机里的短信,有时候就像生活中的小确幸,记录着我们的喜怒哀乐。但你知道吗?有时候,一条重要的短信不小...
bemyeyes安卓系统,功能... 你有没有想过,如果有一款手机系统,它不仅能让你轻松管理日常事务,还能让你的手机瞬间变身成为你的私人助...
汽车怎么下载安卓系统,如何下载... 你有没有想过,你的爱车也能装上安卓系统,变成一个智能移动中心呢?没错,现在汽车界也开始流行“跨界”了...
安卓系统软件编写,功能与特性的... 你有没有想过,手机里的那些神奇应用是怎么诞生的呢?没错,就是安卓系统软件编写这个神秘的过程。今天,就...
安卓系统微信总是延迟,具体操作... 你是不是也遇到了这样的烦恼?每次打开微信,总是慢吞吞的,让人等得心焦火燎。没错,说的就是你,安卓系统...
安卓系统格式化指令,轻松掌握数... 手机里的安卓系统突然出了点小状况,是不是让你有点头疼呢?别急,今天就来给你详细说说安卓系统格式化指令...
电脑安卓系统卡嘛,安卓系统卡顿... 你有没有遇到过这种情况:手机用得正欢,突然间,安卓系统就像老牛拉车一样慢吞吞的,让人抓狂!电脑安卓系...
华为荣耀的安卓系统精简,极致体... 你有没有发现,现在的手机越来越像是一个小型的电脑了?各种功能齐全,操作复杂,有时候用起来还真是让人头...