这段代码是一个基于 wxPython 的简单的图形界面程序,用于从抖音视频链接中下载视频。用户可以在界面中输入抖音视频链接,然后点击按钮进行下载,下载的结果会显示在界面上。
以下是代码的主要部分:
download_video
函数:该函数用于下载视频文件。它通过请求指定的视频链接,将视频内容保存到指定的文件路径。get_mid_string
函数:用于从给定的 HTML 内容中提取指定起始字符串和结束字符串之间的内容。remove_special_characters
和keep_characters_before_hash
函数:用于处理视频标题,分别用于去除特殊字符和保留哈希字符前的部分。download_with_multiprocessing
函数:用于多进程下载视频,获取视频标题和视频链接,并调用download_video
函数进行下载。Frame
类:wxPython 程序的主窗口。包括一个文本输入框用于输入视频链接,一个按钮用于触发下载,以及一个用于显示下载结果的文本框。按钮1_按钮被单击
方法:按钮点击事件的处理函数。它从编辑框中获取输入的视频链接,使用正则表达式找出链接,然后使用多进程进行视频下载,并将下载结果显示在另一个编辑框中。myApp
类:wxPython 的应用类,用于启动和运行程序。if __name__ == '__main__'
:启动 wxPython 应用程序的入口点。
需要注意的是,代码中使用了 wxPython、requests 和 multiprocessing 模块,确保你已经安装了这些库。此外,多进程下载可以加速下载过程,但也需要根据网络连接和计算机性能来适当调整。
import wx
import re
import requests
from multiprocessing import Pool
req=requests.session()
def download_video(url, save_path):
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(save_path, 'wb') as file:
for chunk in response.iter_content(1024):
file.write(chunk)
t='下载成功'
else:
t='下载失败'
return t
def get_mid_string(html, start_str, end):
try:
start = html.find(start_str)
if start >= 0:
start += len(start_str)
end = html.find(end, start)
if end >= 0:
return html[start:end].strip()
except:
return None
def remove_special_characters(text):
pattern = r'[\\/:*?"<>|]'
cleaned_text = re.sub(pattern, '', text)
return cleaned_text
def keep_characters_before_hash(text):
parts = text.split('#', 1)
return parts[0]
def download_with_multiprocessing(url):
a=req.get('https://api.douyin.wtf/api?url={}'.format(url))
title = get_mid_string(a.text, '"desc":"', '"')
title1 = remove_special_characters(title)
title2 = keep_characters_before_hash(title1)
video_url = get_mid_string(a.text, 'nwm_video_url":"', '"')
save_path = f'./{title2}.mp4'
return download_video(video_url, save_path)
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='抖音下载', size=(400, 300), name='frame', style=541072960)
self.启动窗口 = wx.Panel(self)
self.Centre()
self.编辑框1 = wx.TextCtrl(self.启动窗口, size=(269, 221), pos=(7, 7), value='', name='text', style=1073741856)
self.标签1 = wx.StaticText(self.启动窗口, size=(80, 107), pos=(292, 16), label='默认保存与\n程序相同文\n件夹', name='staticText', style=2321)
self.标签1.SetForegroundColour((255, 0, 0, 255))
self.按钮1 = wx.Button(self.启动窗口, size=(80, 32), pos=(287, 215), label='按钮', name='button')
self.按钮1.Bind(wx.EVT_BUTTON, self.按钮1_按钮被单击)
self.编辑框2 = wx.TextCtrl(self.启动窗口, size=(98, 22), pos=(282, 134), value='', name='text', style=16)
def 按钮1_按钮被单击(self, event):
c=self.编辑框1.GetValue()
pattern = r'[a-zA-Z]+://[^"\'\s]*'
urls = re.findall(pattern,c)
with Pool(len(urls)) as pool:
results = pool.map(download_with_multiprocessing, urls)
s = '\n'.join(results)
self.编辑框2.SetValue(s)
class myApp(wx.App):
def OnInit(self):
self.frame = Frame()
self.frame.Show(True)
return True
if __name__ == '__main__':
app = myApp()
app.MainLoop()
评论前必须登录!
注册