如何建设一个购物网站,建wap网站,开发一款软件的费用,通用网址通用网站查询目录前言开发环境本次项目案例步骤先展示下完成品的效果界面导入模块先创建个窗口功能按键主要功能代码编写功能一功能二功能三前言
最近很多同学想问我#xff0c;怎么把几个代码的功能集合到一起#xff1f;
很简单#xff0c;写一个界面就行了#xff0c;想要哪个代码…
目录前言开发环境本次项目案例步骤先展示下完成品的效果界面导入模块先创建个窗口功能按键主要功能代码编写功能一功能二功能三前言
最近很多同学想问我怎么把几个代码的功能集合到一起
很简单写一个界面就行了想要哪个代码运行鼠标轻轻一点就行 开发环境
python 3.8: 解释器pycharm: 代码编辑器
本次项目案例步骤
先确定想要的功能今天这个项目的主要功能为三个
视频评论弹幕
创建一个简单的用户交互界面简洁明了
先展示下完成品的效果 界面
导入模块
import tkinter as tk
from tkinter import ttk
import tkinter.messagebox先创建个窗口
root tk.Tk()
root.title(哔站下载软件)
root.geometry(367x134200200)
# 透明度的值:0~1 也可以是小数点0全透明1全不透明
root.attributes(-alpha, 0.9)root.mainloop()功能按键
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))
Button_1.grid(row2, column2, padx5, pady5)主要功能代码编写
功能一 我们用正则来提取数据 正则表达式 — 对于字符串数据类型进行提取/解析 re模块findall() ---- 告诉程序从什么地方去找什么数据 re.findall() “title”:“(.?)“,“pubdate”, response.text 从 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括号里内容就是我们要的 def Video(bv_id):url fhttps://www.bilibili.com/video/{bv_id}# 把python代码伪装成浏览器 --- 在开发者工具里面直接复制粘贴headers {# 防盗链referer: https://www.bilibili.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)audio_url json_data[data][dash][audio][0][baseUrl]video_url json_data[data][dash][video][0][baseUrl]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)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(urlhtml_url, headersheaders)response.encoding response.apparent_encodingreturn responsedef get_Dm_url(bv_id):link fhttps://www.ibilibili.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)功能三 单页少量的数据很简单但要想翻页必须分析网站找到规律 def 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.bilibili.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://api.bilibili.com/x/v2/reply/maindata {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:pass问题解答 · 源码获取 · 技术交流 · 抱团学习请联系