三次改进,用python分享链接多进程下载,添加打包下载防止重启
本帖最后由 qianaonan 于 2023-8-9 13:33 编辑先上效果图
下载速度是根据自身网速来,网速慢程序会未响应,静等下载好后就恢复正常了。
在此感谢Evil0ctal在GitHub提供的项目,项目地址:https://github.com/Evil0ctal/Douyin_TikTok_Download_API
接下来上代码
import wx
import re
import requests
import multiprocessing
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.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
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'+://[^"\'\s]*'
urls = re.findall(pattern,c)
with Pool(10) as pool:#如果报错修改为len(urls)
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__':
multiprocessing.freeze_support()#添加防止多进程打包后重启
app = myApp()
app.MainLoop()
在这个代码中我加了wx的ui界面,直接粘贴抖音分享链接到文本框,然后点击按钮,按钮上边会提示下载成功还是下载失败。(就是粘贴出来是像这个样子的1.74 qrr:/ 上班不摸鱼,脑袋有问题# 职场# 办公室# 摸鱼# 双标# 剧情https://v.douyin.com/iE1hcfY/ 复制此链接,打开Dou音搜索,直接观看视频!别复制错了,复制错了会卡死重启程序就解决了。)
二次修改:在上一次代码中加入下载多进程,提高下载速度。
三次修改:添加代码multiprocessing.freeze_support()防止打包后多进程下载无响应重启见有的论友,不会打包使用,这里打包链接:https://wwkr.lanzout.com/ivdiP14uzxod
成品试验 lovlss 发表于 2023-7-29 11:58
pyinstaller库我装好了。现在不知道py文件是哪个。。。是github上那个项目中某个文件吗?还是说把你的代 ...
你安装了requests、wxpython库了么?打包是打包我发的这几行代码,不是项目,如果这个都听不懂,那我就没办法了{:1_907:} lovlss 发表于 2023-7-28 19:13
大佬,我在打包的时候,图中的“merge.py”我应该填哪个啊?
{:1_907:}这搜的教程,安装pyinstaller这个库,然后把这个py文件复制到某个文件夹里,在文件夹路径哪儿把路径删掉输入cmd,跳出cmd命令窗,输入pyinstaller -F 你的py文件名称包括你的后缀。 lovlss 发表于 2023-7-28 17:41
好吧,,对小白来说有点难哎
你看一下pyinstaller的教程吧,很简单的。 wasm2023 发表于 2023-7-28 12:07
收费的那种可以不
你看看有没有分享功能,你可以试试,我没买过所以不太清楚 收费的那种可以不
不错不错,大哥能不能帮我看看这个代码问题出现在哪里吗?https://www.52pojie.cn/thread-1814374-1-1.html shengeriji 发表于 2023-7-28 12:09
不错不错,大哥能不能帮我看看这个代码问题出现在哪里吗?https://www.52pojie.cn/thread-1814374-1-1.html
打不开打不开 为啥子我打不开啊 是不是无水印的啊,下载看看 qianaonan 发表于 2023-7-28 12:12
打不开打不开
现在可以了,刚才帖子在审核 这个好像不可以换行实现批量下载
不是无水印的啊,下载看看先