前两天写了一个下载知乎视频的小程序,现在给他加了个图形界面,并生成exe文件。同时对原来的程序进行了优化,使用多线程进行任务分配和下载ts文件,解决了GUI卡顿的问题并大大加快了下载速度。
界面如下:
功能:
- 1.自动检测文章链接是否规范以及链接对应的文章是否含有视频
- 2.自动检测视频保存路径的规范性,路径可以自己填入或点击“打开”按钮选择
- 3.可以选择视频质量,有HD、SD、LD三种
- 4.最下面的滚动文本框可以显示相关提示信息
源码:
import os
import json
import requests
from requests import RequestException
from tkinter import *
from tkinter.scrolledtext import ScrolledText
from PIL import Image, ImageTk
import threading
from tkinter.filedialog import askdirectory
def is_valid(url, path):
if url is '':
print('请输入文章链接...')
scrolled_text.insert(INSERT, '请输入文章链接...\n')
scrolled_text.see(END)
return None
else:
url_pattern = re.compile('^(https://www.zhihu.com/question/\d{8,9}/answer/\d{9})$', re.S)
result = re.search(url_pattern, url)
if result is None:
print('错误的文章链接,请重新输入...')
scrolled_text.insert(INSERT, '错误的文章链接,请重新输入...\n')
scrolled_text.see(END)
return None
else:
if path is '':
print('请输入视频保存路径...')
scrolled_text.insert(INSERT, '请输入视频保存路径...\n')
scrolled_text.see(END)
return None
else:
path_pattern = re.compile('(^[a-zA-Z]:/[0-9a-zA-Z_]+(/[0-9a-zA-Z_]+)*$)|(^[a-zA-Z]:/[0-9a-zA-Z_]*$)', re.S)
result = re.search(path_pattern, path)
if result is None:
print('错误的文件路径,请重新输入...')
scrolled_text.insert(INSERT, '错误的文件路径,请重新输入...\n')
scrolled_text.see(END)
return None
else:
return True
def get_page(url):
try:
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
}
response = requests.get(url, headers=headers, timeout=30)
if response.status_code == 200:
return response.text
print('链接访问失败,请重试...')
scrolled_text.insert(INSERT, '链接访问失败,请重试...\n')
scrolled_text.see(END)
return None
except RequestExcep