一:目的
在github上发现了一个好项目,整理出了某个热门网站里的排名。免费会员看不到,花钱又太贵。
下过来的是md文件,用于这个小工具生成excel文件后,跟本地torrent文件作比较,看看哪些没有下载过。
md文件格式如下,统计不是很方便。
二: 版本更新
V1.03
1、为解决在执行过程中卡死的问题,把md文件解析函数、代理测试函数,放到了线程里
2、在执行过程中,禁止了其他控件的操作
V1.02
为解决太慢的问题,增加了代理功能
V1.01
增加在线爬磁力、演员列表
V1.00
仅解析md文件内容,并生成excel文件
三: 工具使用
左侧是过滤列表,用于想排除或者想要的,根据选项使用黑名单或白名单模式。右侧是当前目录下的md文件列表。
可以从原始URL中获取磁力链接的功能,并顺便解析出参演名单列表。
具备代理设置选项以及超时和重试设置,利用google、facebook、twitter测试代理是否可用。
四:生成的excel文件展示
根据md文件生成方便统计的excel表格。其实呢这里还可以再做的深入一些,例如:
1、直接搜索指定目录,查找重复(已下载)的文件,自动排除掉。省去了手动排除已有文件的步骤。由于大家需求不同,这个没有加进来,后面也不打算集成进来了。用专门的小脚们去排查那些已有的。
2、演员改名字了的话,这个还没想好要怎么样处理。
五:代码
#依赖以下库,未安装的使用下面的命令安装
#pip install beautifulsoup4 //Html解析
#pip install lxml //Html解析
#pip install pandas //excel表格处理
#pip install requests //网页请求
#pip install tk //可视化界面
#pip install comtypes //通信类型
#pip install pywifi //WiFi库
import platform
import os #系统操作、文件夹操作等
import re
import pandas as pd #若没有则使用命令
import tkinter.filedialog #文件打开对话框
#import windnd #文件拖拽使用,需安装windnd
import webbrowser #点击超链接打开浏览器需要这个
import requests #请求web数据
import time
import pywifi #扫描wifi用
import threading #开线程,不让界面程卡死状态
from tkinter import *
from tkinter import ttk #下拉菜单使用
from tkinter.ttk import Progressbar #进度条
from tkinter.scrolledtext import ScrolledText #带滚动条的文本输入控件
from requests.adapters import HTTPAdapter #重试次数
from ctypes import *
from sys import version #获取系统版本
from bs4 import BeautifulSoup #解析html用这个
global Filter_list_textbox
global AllFile_list_textbox
global AllFileList
global AllFileList_bak
versionStr = 'JavdbTop250导出excel V1.03'
AllFileList = []
AllFileList_bak = []
filter_list = ['test.md', 'readme.md', 'censored.md', 'fc2.md', 'uncensored.md', 'western.md']
filter_type = ['黑名单模式-单个 (一个md文件生成一个xlsx)', '黑名单模式-汇总 (所有md文件生成汇总xlsx)', '白名单模式-单个 (一个md文件生成一个xlsx)', '白名单模式-汇总 (所有md文件生成汇总xlsx)']
AV_dict = {}
def print_Welcomeinfo():
print(' ______________________________________________________________________________ ')
print('| |')
print('| 基于这个版本 |')
print('| Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) |')
print('| [MSC v.1924 64 bit (AMD64)] on win32 |')
print('| |')
print('| 注1:请勿在公司使用,除非公司不审查流量 |')
print('| 注2:Check_Wifi_SSID()函数是通过wifi名称判断是不是在公司 |')
print('| 注3:从.md文件解析出网址,再从网址里面爬出磁力链接和演员列表 |')
print('| 注4:随手写的,不关注条理性、效率 |')
print('|______________________________________________________________________________|\n\n')
return 0
#无线网SSID检查,毕竟有的公司对外网链接审查非常严格。这里还是主动判一下是不是在公司。
#当然,有线网就没办法了,自己注意吧。
def Check_Wifi_SSID():
if Parse_VideoCode_val.get()==1 or Parse_actors_val.get()==1 or Parse_magnet_val.get()==1:
Wifi_Blacklist = ['fang', 'sf', 'staff']
wifi = pywifi.PyWiFi() #抓取网卡接口
ifaces = wifi.interfaces()[0] #获取无线网卡
profile = ifaces.scan_results()[0] #获取无线网卡信息
ssid = profile.ssid.lower() #获取名字
for Blacklist in Wifi_Blacklist:
if Blacklist in ssid:
return 'forbid'
return 'allow'
#debug打印用
def debug_print_FileList(lists,flag):
print('============',flag,'============')
for item in lists:
print(item)
return 0
#获取文件夹中的.md文件
def GetMDFileList(FolderPath):
global AllFileList
global AllFile_list_textbox
AllFileList.clear()
files = os.listdir(FolderPath)
for file in files:
if os.path.isfile(os.path.join(FolderPath, file)):
if os.path.splitext(file)[-1] == '.md':
AllFileList = AllFileList+[file]
Init_file_list_text(AllFile_list_textbox, AllFileList)
return AllFileList
#初始化文件列表显示文本框
def Init_file_list_text(filter_file_textbox,file_list):
filter_file_textbox.delete(1.0, END)
for item in file_list:
text = item+'\n'
filter_file_textbox.insert(END,text)
return 0
#刷新.md文件展示文本框
def Renew_file_List_text(filename):
global AllFile_list_textbox
global AllFileList_bak
state = AllFile_list_textbox['state']
if state == 'disabled': #DISABLED
AllFile_list_textbox.config(state='normal')
if filename in AllFileList_bak:
n = AllFileList_bak.index(filename)
AllFileList_bak[n] = filename+' [√]'
Init_file_list_text(AllFile_list_textbox, AllFileList_bak)
if state == 'disabled': #DISABLED == 'disabled'
AllFile_list_textbox.config(state='disabled')
top.update()
return 0
#从文件过滤文本框中获取文件列表
def Get_filter_list_text(filter_file_ScrolledText):
#list.remove()一次只能删除一个,不好用
FileList = filter_file_ScrolledText.get(1.0,'end')
FileList = FileList.split('\n')
Files=[]
for file in FileList:
if '' != file:
Files.append(file)
return Files
#打开目录窗口
def OpenFolder():
default_path=Folder_value.get()
FileName_t = tkinter.filedialog.askdirectory(initialdir=default_path) #取消后是返回一个空字符串
if not FileName_t:
#Folder_value.set(os.getcwd())
print("未选择文件")
else:
Folder_value.set(FileName_t)
GetMDFileList(FileName_t)
#print(files)
return FileName_t
Javdb_Top250 = 'https://github.com/qq57240/Javdb-Top250'
# 此处必须注意,绑定的事件函数中必须要包含event参数
def open_url(event):
webbrowser.open(Javdb_Top250, new=0)
#解析.md文件
#按行读取,'Tag:','elease Date:','Title:'作为一组。
#读到'Title:'行的时候,打开URL去抓里面的磁力链接
def Parse_MDfile(mdfile_path):
global AV_dict
Num = 1
file=open(mdfile_path, 'r',encoding='UTF-8')
AV_num=''
AV_date=''
AV_actors=''
AV_title=''
AV_url=''
vediocode_parse='' #从URL解析出的番号
actors_parse=[] #从URL解析出的演员列表
magnetlink_parse='' #从URL解析出的磁力链接
for line in file:
string = line.strip()
str_pat1 = re.compile(r'\"(.*?)\"') #正则表达式,取""之间的字符串 part1
str_pat2 = re.compile(r'\[(.*?)\]') #正则表达式,取[]之间的字符串 part1
str_pat3 = re.compile(r'\((.*?)\)') #正则表达式,取()之间的字符串 part1
if "Tag: " in string: ##番号
splitext = string.split(': ') #注意这里有空格
AV_num = splitext[1].replace('<br>','')
pass
if "Release Date: " in string: ##日期
splitext = string.split(': ') #注意这里有空格
AV_date = splitext[1].replace('<br>','')
pass
if "Title: " in string: ##标题和链接
splitext = string.split(': ',1) #注意这里有空格
AV_title = str_pat2.findall(splitext[1])[0] #正则表达式,取[]之间的字符串 part2
splitext = string.split(']',1)
AV_url = str_pat3.findall(splitext[1])[0] ##正则表达式,取()之间的字符串 part2
#番号、演员、磁力,任意一个都勾选的话
if Parse_VideoCode_val.get()==1 or Parse_actors_val.get()==1 or Parse_magnet_val.get()==1:
vediocode_parse, actors_parse, magnetlink_parse = Get_VideoCode_actors_magnet('remote', AV_url)
#如果勾选解析演员
if Parse_actors_val.get()==1:
AV_actors = '&'.join(actors_parse) #将人名用&串起来形成一个字符串
#如果勾选解析磁力
if Parse_magnet_val.get()==1 and magnetlink_parse != '':
AV_url = magnetlink_parse
print(Num, AV_num, AV_url)
elif Parse_magnet_val.get()==1 and magnetlink_parse == '':
print(Num, AV_num, '无磁力链接')
AV_dict[AV_num] = [AV_actors, AV_date, AV_url, AV_title]
AV_num=''
AV_actors=''
AV_date=''
AV_title=''
AV_url=''
progressbar1['value'] = Num #写进度条的值
top.update() #整个界面强制刷新,为了进度条刷新
Num = Num + 1
file.close()
return 0
#将获取到的所有数据保存到excel中
def Creat_excel(AV_dict, excelfile_path):
df1 = pd.DataFrame.from_dict(AV_dict,orient='index',columns=['演员', '日期','URL','标题']) #番号列作为索引了
writer = pd.ExcelWriter(excelfile_path)
df1.to_excel(excelfile_path)
return 0
#一个md生成一个excel文件。黑名单模式
def OneFile_Blacklist(src_folder, excelFolderName, file_list):
des_path = os.path.join(src_folder, excelFolderName)
if not os.path.exists(des_path):
os.makedirs(des_path)
for root, dirs, files in os.walk(src_folder):
for file in files:
if file.lower() in file_list:
continue
if os.path.splitext(file)[1].lower() == '.md':
print(file)
Parse_MDfile(os.path.join(src_folder,file))
Renew_file_List_text(file)
des_file = os.path.join(des_path, file+'.xlsx')
Creat_excel(AV_dict, des_file)
AV_dict.clear()
break #只解析当前目录,不递归解析子目录
return 0
#所有md文件,生成‘汇总.xlsx’。黑名单模式
def AllFile_Blacklist(src_folder, excelFolderName, file_list):
des_path = os.path.join(src_folder, excelFolderName)
if not os.path.exists(des_path):
os.makedirs(des_path)
for root, dirs, files in os.walk(src_folder):
for file in files:
if file.lower() in file_list:
continue
if os.path.splitext(file)[1].lower() == '.md':
print(file)
Parse_MDfile(os.path.join(src_folder,file))
Renew_file_List_text(file)
break
des_file = os.path.join(des_path, '汇总.xlsx')
Creat_excel(AV_dict, des_file)
AV_dict.clear()
return 0
#一个md生成一个excel文件。白名单模式
def OneFile_Whitelist(src_folder, excelFolderName, file_list):
des_path = os.path.join(src_folder, excelFolderName)
if not os.path.exists(des_path):
os.makedirs(des_path)
for root, dirs, files in os.walk(src_folder):
for file in files:
if file.lower() in file_list:
print(file)
Parse_MDfile(os.path.join(src_folder,file))
Renew_file_List_text(file)
des_file = os.path.join(des_path, file+'.xlsx')
Creat_excel(AV_dict, des_file)
AV_dict.clear()
break
return 0
#所有md文件,生成‘汇总.xlsx’。白名单模式
def AllFile_Whitelist(src_folder, excelFolderName, file_list):
des_path = os.path.join(src_folder, excelFolderName)
if not os.path.exists(des_path):
os.makedirs(des_path)
for root, dirs, files in os.walk(src_folder):
for file in files:
if file.lower() in file_list:
print(file)
Parse_MDfile(os.path.join(src_folder,file))
Renew_file_List_text(file)
break
des_file = os.path.join(des_path, '汇总.xlsx')
Creat_excel(AV_dict, des_file)
AV_dict.clear()
return 0
#解析主入口
def CreatExcel_event():
global AllFileList
global AllFileList_bak
#一上来就先判是否解析URL,如果解析URL的话,是否是链接的公司wifi
if Check_Wifi_SSID() == 'forbid':
print('此Wifi被禁止联网解析,更换AP')
return 0
AllFileList_bak = AllFileList.copy()
Init_file_list_text(AllFile_list_textbox, AllFileList_bak)
Disable_all_control() #执行期间,禁止操作其他控件
des_folder = 'EXCEL导出'
src_path = Folder_value.get()
files = Get_filter_list_text(Filter_list_textbox)
CreatType = comb_CreatType.get()
if CreatType == filter_type[0]: #'黑名单模式-单个 (一个md文件生成一个xlsx)'
OneFile_Blacklist(src_path, des_folder, files)
pass
if CreatType == filter_type[1]: #'黑名单模式-汇总 (所有md文件生成汇总xlsx)'
AllFile_Blacklist(src_path, des_folder, files)
pass
if CreatType == filter_type[2]: #'白名单模式-单个 (一个md文件生成一个xlsx)'
OneFile_Whitelist(src_path, des_folder, files)
pass
if CreatType == filter_type[3]: #'白名单模式-汇总 (所有md文件生成汇总xlsx)'
AllFile_Whitelist(src_path, des_folder, files)
pass
Reset_all_control() #执行结束后,恢复其他控件
return 0
#调试用,保存请求到的html
def SaveHtmlFile(HtmlPath, HtmlData):
HtmlFile = open(HtmlPath, 'w',encoding='utf-8')
HtmlFile.write(HtmlData)
HtmlFile.close()
return 0
#从设置框里获取代理配置
def Get_ProxySetting():
ProxySetting = {}
ProxyType = ProxyType_comb.get()
ProxyIP = ProxyIP_Entry.get()
ProxyPort = ProxyPort_Entry.get()
ProxySetting['http']='%s://%s:%s'%(ProxyType,ProxyIP,ProxyPort)
ProxySetting['https']='%s://%s:%s'%(ProxyType,ProxyIP,ProxyPort)
return ProxySetting
#请求网页,返回html数据
def GetHtml(URL):
html = None
ProxySettings = {}
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
max_retry = int(RetryNum_label_Entry.get(),10)+1 #重试次数
timeout_s = int(timeout_label_Entry.get(),10) #超时时间
#####设置requests最大重试次数
htmlget = requests.Session()
htmlget.mount('http://', HTTPAdapter(max_retries=max_retry-1)) ##设置http链接最大重试次数
htmlget.mount('https://', HTTPAdapter(max_retries=max_retry-1)) ##设置https链接最大重试次数
if ProxyEnable_val.get() == 1:
ProxySettings = Get_ProxySetting()
else:
ProxySettings = None
if Debug_val.get() == 1:
print(ProxySettings)
try:
html = htmlget.get(URL, headers=headers, timeout=timeout_s, proxies = ProxySettings).content.decode('utf-8')
except:
html = None
return html
#【代理测试】按钮调用,用3个必须搭梯子访问的网址进行测试
def ProxyTest():
Disable_ProxySetting_All()
URL_LIST = ['https://www.google.com.hk', 'https://www.facebook.com', 'https://twitter.com']
for URL in URL_LIST:
html = GetHtml(URL)
if html != None:
print('代理连接正常',URL)
else:
print('代理连接失败',URL)
Reset_ProxySetting_All()
return 0
#从html中获取磁力链接
def Get_magnet(SoupData):
magnet_link=''
magnet_node = SoupData.find('div', attrs={'class':'item columns is-desktop odd'})
if magnet_node == None:
#magnet_node = SoupData.find(class_="item columns is-desktop ")
magnet_node = SoupData.find('div', attrs={'class':'item columns is-desktop'})
if magnet_node != None:
if 'href' in magnet_node.a.attrs:
#print('磁力链接',magnet_node.a['href'])
magnet_link = magnet_node.a['href']
else:
if Debug_val.get() == 1:
print('\t\t无href属性')
pass
else:
if Debug_val.get() == 1:
print('\t\t无演员标签')
pass
return magnet_link
#从html中获取演员列表,NotFound是未找到时的默认返回值
def Get_actors(SoupData,NotFound):
actors_list=[]
actors_nodes = SoupData.find_all(class_="symbol female") #找到所有女演员标记
if actors_nodes == None:
return [NotFound]
for actors_node in actors_nodes:
actors_previous_node = actors_node.previous_sibling #返回前一个节点
actors = actors_previous_node #前一个节点就是<a href="...."> </a>
actors_list.append(actors.get_text())
return actors_list
#从html中获取番号,NotFound是未找到时的默认返回值
def Get_video_codes(SoupData, NotFound):
video_codes=''
video_codes_copy_button = SoupData.find('a', attrs={'class':'button is-white copy-to-clipboard'})
if video_codes_copy_button == None:
return NotFound
video_codes = video_codes_copy_button.get('data-clipboard-text')
return video_codes
'''
远程模式 Get_VideoCode_actors_magnet('remote', 'https://javdb008.com/v/55aEz')
本地HTML Get_VideoCode_actors_magnet('local', 'CAWD-386.html')
'''
#从html中获取番号、演员列表、磁力链接
#番号其实不是必要的,在md文件中已经有了,这里是为了调试,在保存html文件的时候要用一下,所以顺便解出番号
def Get_VideoCode_actors_magnet(RemoteMode,URL):
htmlData = None
vedio_code = ''
magnet_link=''
actors_list=[]
soup = None
if RemoteMode == 'remote': #远程模式
htmlData = GetHtml(URL)
if htmlData != None:
soup = BeautifulSoup(htmlData,features="lxml")
else: #本地html
soup = BeautifulSoup(open(URL,encoding='utf-8'), features="lxml")
if soup != None:
vedio_code = Get_video_codes(soup, '异常')
magnet_link = Get_magnet(soup)
actors_list = Get_actors(soup, '异常')
if Debug_val.get() == 11111:
if RemoteMode == 'remote': #远程模式
if htmlData != None:
print('写\'%s.html\''%vedio_code)
SaveHtmlFile('%s.html'%vedio_code, htmlData)
if Debug_val.get() == 1:
print("番号", vedio_code)
print("演员", actors_list)
print("磁力", magnet_link)
return vedio_code,actors_list,magnet_link
#初期给总开关预留的功能,现在已经没有用了
#当总开关未勾选时,这3个复选框是禁止编辑状态
#当总开关勾选时,这3个复选框是允许编辑状态
def Init_ParseCheckButton_Group():
if ParseCheck_val.get() == 1:
Parse_actors_Button.config(state='normal') #解析演员正常编辑
Parse_VideoCode_Button.config(state='normal') #解析番号正常编辑
Parse_magnet_Button.config(state='normal') #解析磁力正常编辑
else:
Parse_actors_Button.config(state='disabled') #解析演员禁止编辑
Parse_VideoCode_Button.config(state='disabled') #解析番号禁止编辑
Parse_magnet_Button.config(state='disabled') #解析磁力禁止编辑
return 0
#代理总开关,修改代理类型下拉框、IP地址文本框、IP端口文本框、代理测试按钮的状态
def Init_ProxySetting_group():
if ProxyEnable_val.get() == 1: #如果启用代理
ProxyType_comb.config(state='readonly') #代理类型下拉框 可操作,但文本只读
ProxyIP_Entry.config(state='normal') #IP地址输入框 正常操作
ProxyPort_Entry.config(state='normal') #端口号输入框 正常操作
ProxyTest_btn.config(state='normal') #测试按钮 正常操作
else:
ProxyType_comb.config(state='disabled') #代理类型下拉框 禁止操作
ProxyIP_Entry.config(state='disabled') #IP地址输入框 禁止操作
ProxyPort_Entry.config(state='disabled') #端口号输入框 禁止操作
ProxyTest_btn.config(state='disabled') #测试按钮 禁止操作
return 0
#所有代理相关的禁止操作
def Disable_ProxySetting_All():
ProxyEnable_Button.config(state='disabled') #测试按钮 禁止操作
ProxyType_comb.config(state='disabled') #代理类型下拉框 禁止操作
ProxyIP_Entry.config(state='disabled') #IP地址输入框 禁止操作
ProxyPort_Entry.config(state='disabled') #端口号输入框 禁止操作
ProxyTest_btn.config(state='disabled') #测试按钮 禁止操作
timeout_label_Entry.config(state='disabled') #超时时间
RetryNum_label_Entry.config(state='disabled') #重试次数
return 0
#所有代理相关的禁止操作
def Reset_ProxySetting_All():
ProxyEnable_Button.config(state='normal') #测试按钮 恢复操作
timeout_label_Entry.config(state='normal') #超时时间
RetryNum_label_Entry.config(state='normal') #重试次数
Init_ProxySetting_group()
return 0
def Disable_all_control():
FolderPath_text.config(state='disabled') #文件夹路径显示框
OenFolder_btn.config(state='disabled') #打开目录按钮
comb_CreatType.config(state='disabled') #模式选择下拉菜单
CreatExcel_btn.config(state='disabled') #解析文件按钮
ProxyEnable_Button.config(state='disabled') #代理开关
ProxyType_comb.config(state='disabled') #代理类型:下拉菜单
ProxyIP_Entry.config(state='disabled') #代理地址:单行文本框
ProxyPort_Entry.config(state='disabled') #代理端口
ProxyTest_btn.config(state='disabled') #测试按钮
#timeout_label_Entry.config(state='disabled') #超时时间
#RetryNum_label_Entry.config(state='disabled') #重试次数
ChangeDomain_label_Entry.config(state='disabled') #替换网址
Parse_VideoCode_Button.config(state='disabled') #解析番号
Parse_actors_Button.config(state='disabled') #解析演员名
Parse_magnet_Button.config(state='disabled') #解析磁力链接
Debug_Button.config(state='disabled') #Debug开关
Filter_list_textbox.config(state='disabled') #文件过滤展示框
AllFile_list_textbox.config(state='disabled') #文件夹内的文件展示
return 0
def Reset_all_control():
FolderPath_text.config(state='normal') #文件夹路径显示框
OenFolder_btn.config(state='normal') #打开目录按钮
comb_CreatType.config(state="readonly") #模式选择下拉菜单
CreatExcel_btn.config(state='normal') #解析文件按钮
ProxyEnable_Button.config(state='normal') #代理开关
#ProxyType_comb.config(state="readonly") #代理类型:下拉菜单
#ProxyIP_Entry.config(state='normal') #代理地址:单行文本框
#ProxyPort_Entry.config(state='normal') #代理端口
#ProxyTest_btn.config(state='normal') #测试按钮 Init_ProxySetting_group() #初始化代理相关控件的状态
#timeout_label_Entry.config(state='normal') #超时时间
#RetryNum_label_Entry.config(state='normal') #重试次数
ChangeDomain_label_Entry.config(state='normal') #替换网址
Parse_VideoCode_Button.config(state='normal') #解析番号
Parse_actors_Button.config(state='normal') #解析演员名
Parse_magnet_Button.config(state='normal') #解析磁力链接
Debug_Button.config(state='normal') #Debug开关
Filter_list_textbox.config(state='normal') #文件过滤展示框
AllFile_list_textbox.config(state='normal') #文件夹内的文件展示
Init_ProxySetting_group()
return 0
def Thread_creat(func):
'''将函数打包进线程'''
t = threading.Thread(target=func) # 创建
t.setDaemon(True) # 守护 !!!
t.start() # 启动
# 阻塞--卡死界面!
# t.join()
print_Welcomeinfo()
OS = platform.system()
top = Tk()
top.title(versionStr)
top.resizable(False, False) #禁止调整窗口大小
top.geometry("480x500")
link = Label(text=Javdb_Top250, fg='blue', anchor='center',relief=GROOVE)
link.place(x=1, y=0, width=479, height=25)
link.bind("<Button-1>", open_url) #绑定label单击事件
#文件夹路径显示框
Folder_value = StringVar()
Folder_value.set(os.getcwd()) #初始化成当前.py文件所在目录
FolderPath_text = Entry(relief="solid", textvariable = Folder_value)
FolderPath_text.place(x=1, y=25, width=418, height=24)
#打开目录按钮
OenFolder_btn = Button()
OenFolder_btn.config(text='打开目录', command=OpenFolder)
OenFolder_btn.place(x=420, y=25, width=59, height=24)
#模式选择下拉菜单
comb_CreatType = ttk.Combobox(state="readonly")
comb_CreatType.place(x=1, y=50, width=418, height=24)
comb_CreatType['value'] = (filter_type[0],filter_type[1],filter_type[2],filter_type[3])
comb_CreatType.current(2)
#解析文件按钮
CreatExcel_btn = Button()
#CreatExcel_btn.config(text='解析文件', command=CreatExcel_event)
CreatExcel_btn.config(text='解析文件', command=lambda:Thread_creat(CreatExcel_event))
CreatExcel_btn.place(x=420, y=50, width=59, height=24)
#代理开关
ProxyEnable_val = IntVar()
ProxyEnable_val.set(0)
ProxyEnable_Button = Checkbutton(top, text = "启用代理", anchor='w', relief='groove', variable = ProxyEnable_val, onvalue=1, offvalue=0, command=Init_ProxySetting_group)
ProxyEnable_Button.place(x=1, y=75, width=479, height=29)
#代理类型:下拉菜单
ProxyType_comb = ttk.Combobox(state="readonly")
ProxyType_comb.place(x=124, y=77, width=70, height=24)
ProxyType_comb['value'] = ('http','https','socks4','socks5')
ProxyType_comb.current(0)
#代理地址:单行文本框
ProxyIP_text = StringVar()
ProxyIP_text.set('127.0.0.1')
ProxyIP_Entry = Entry(textvariable = ProxyIP_text)
ProxyIP_Entry.place(x=195, y=77, width=174, height=24)
#代理端口
ProxyPort_text = StringVar()
ProxyPort_text.set('7890')
ProxyPort_Entry = Entry(textvariable = ProxyPort_text)
ProxyPort_Entry.place(x=369, y=77, width=50, height=24)
#测试按钮
ProxyTest_btn = Button()
#ProxyTest_btn.config(text='代理测试', command=ProxyTest)
ProxyTest_btn.config(text='代理测试', command=lambda:Thread_creat(ProxyTest))
ProxyTest_btn.place(x=420, y=77, width=59, height=24)
Init_ProxySetting_group() #初始化代理相关控件的状态
#就是一个边框
timeout_label1111 = Label(text='',relief=GROOVE).place(x=1, y=102, width=479, height=29)
#超时时间
timeout_label = Label(text='超时时间(秒):', anchor='w')
timeout_label.place(x=2, y=104, width=80, height=24)
timeout_label_text = StringVar()
timeout_label_text.set(2)
timeout_label_Entry = Entry(textvariable = timeout_label_text)
timeout_label_Entry.place(x=80, y=104, width=24, height=24)
#重试次数
RetryNum_label = Label(text='重试次数:', anchor='w')
RetryNum_label.place(x=115, y=104, width=60, height=24)
RetryNum_label_text = StringVar()
RetryNum_label_text.set(6)
RetryNum_label_Entry = Entry(textvariable = RetryNum_label_text)
RetryNum_label_Entry.place(x=174, y=104, width=45, height=24)
#替换网址
ChangeDomain_label = Label(text='域名替换:', anchor='w')
ChangeDomain_label.place(x=240, y=104, width=60, height=24)
ChangeDomain_label_text = StringVar()
ChangeDomain_label_text.set('javdb521.com(无用,预留)')
ChangeDomain_label_Entry = Entry(textvariable = ChangeDomain_label_text)
ChangeDomain_label_Entry.place(x=300, y=104, width=178, height=24)
#解析番号
Parse_VideoCode_val = IntVar()
Parse_VideoCode_val.set(1)
Parse_VideoCode_Button = Checkbutton(top, text = "获取番号", anchor='w', variable = Parse_VideoCode_val, onvalue=1, offvalue=0)
Parse_VideoCode_Button.place(x=1, y=132, width=100, height=24)
#解析演员名
Parse_actors_val = IntVar()
Parse_actors_val.set(1)
Parse_actors_Button = Checkbutton(top, text = "获取演员", anchor='w', variable = Parse_actors_val, onvalue=1, offvalue=0)
Parse_actors_Button.place(x=(480/4)*1, y=132, width=100, height=24)
#解析磁力链接
Parse_magnet_val = IntVar()
Parse_magnet_val.set(1)
Parse_magnet_Button = Checkbutton(top, text = "获取磁力", anchor='w', variable = Parse_magnet_val, onvalue=1, offvalue=0)
Parse_magnet_Button.place(x=(480/4)*2, y=132, width=100, height=24)
#Debug开关
Debug_val = IntVar()
Debug_val.set(0)
Debug_Button = Checkbutton(top, text = "Debug", anchor='w', variable = Debug_val, onvalue=1, offvalue=0)
Debug_Button.place(x=410, y=132, width=100, height=24)
#文件过滤展示框
Filter_list_textbox = ScrolledText(relief="solid")
Filter_list_textbox.place(x=1, y=100+59, width=236, height=319)
Init_file_list_text(Filter_list_textbox,filter_list) #刷新过滤框中的文件过滤列表
#文件夹内的文件展示
AllFile_list_textbox = ScrolledText(relief="solid")
AllFile_list_textbox.place(x=241, y=100+59, width=236, height=319)
GetMDFileList(Folder_value.get()) #获取当前.py文件所在目录下的.md文件列表
Init_file_list_text(AllFile_list_textbox,AllFileList) #刷新过滤框中当前目录下文件列表
#进度条
progressbar1 = Progressbar(top, orient='horizontal', length=250, mode='determinate')
progressbar1.place(x=1, y=479, width=478, height=20)
progressbar1['maximum'] = 250
progressbar1['value'] = 0
top.mainloop()