对生成的帖子json文件,进行搜索,可以根据回帖内容关键字、或者回帖人 查找回帖内容,还可以依据回复内容,生成词云图
tk界面,search.py
'''
'''构造:
toplevel:——notebook,2个页面:
----搜索回复内容(search_frame):---选择文件夹部分(dir_fr):搜索、保存文件夹,搜索进度
---搜索回复(search_fr):关键字、回帖人
---显示回复(value_text): 显示点击的帖子内容
---tree
----获取回复内容(content_frame):---选择文件夹部分(dir_fr):搜索、保存文件夹,搜索进度
---设定部分(content_fr):输入时间后搜索、
设定帖子回复文件、模板图片、屏蔽词
---显示词云图(wc_label)
'''
class Search_tk():
def __init__(self,my_tk):
self.root=my_tk
self.root.title('搜索贴吧')
self.root.geometry('920x650+400+0')
self.search_dir = StringVar() #要搜索的文件夹路径
self.save_dir = StringVar() #搜索后保存的文件路径
self.board_var=StringVar() #显示搜索进度的label
self.set_defaultpath() #设定的好默认的路径
self.creat_notebook() #创建notebook及其2个页面
self.creat_search_frame()
self.creat_content_frame()
def creat_notebook(self):
'''创建notebook,生成2个页面:1.存放搜索帖子内容 2.获取回复生成云图'''
self.notebook=Notebook(self.root)
self.notebook.pack()
#搜索回复内容页面frame
self.search_frame = Frame(self.root)
self.search_frame.pack()
#获取所有回复页面frame
self.content_frame = Frame(self.root)
self.content_frame.pack()
self.notebook.add(self.search_frame, text="搜索页面",sticky='E')
self.notebook.add(self.content_frame, text="获取回复")
def creat_dirframe(self,frame):
'''创建2个页面的共同部分:1.所要搜索的文件夹、2.保存文件的文件夹、3.显示遍历文件进度
'''
dir_fr=Frame(frame)
dir_fr.pack()
path_label1 = Label(dir_fr, text='目标贴吧:', anchor='e')
change_button1 = Button(dir_fr, text='更改', command=lambda:self.set_dirpath(self.search_dir))
search_dir_entry=Entry(dir_fr,width=45, textvariable=self.search_dir)
path_label1.grid(row=1, column=0)
search_dir_entry.grid(row=1, column=1)
change_button1.grid(row=1, column=2)
path_label2 = Label(dir_fr, text='保存路径:', anchor='e')
change_button2 = Button(dir_fr, text='更改', command=lambda: self.set_dirpath(self.save_dir))
save_dir_entry = Entry(dir_fr, width=45, textvariable=self.save_dir)
path_label2.grid(row=2, column=0)
save_dir_entry.grid(row=2, column=1)
change_button2.grid(row=2, column=2)
self.board_text=tkinter.Label(dir_fr,width=60,font=('system', 14, 'bold'),foreground='blue',background='Wheat',textvariable=self.board_var)
self.board_var.set('请设定要搜索的文件夹以及搜索条件!!')
self.board_text.grid(row=4, column=0,columnspan=3)
tkinter.Label(dir_fr, height=1).grid(row=5, column=0)
def creat_content_frame(self):
'''获取所有回复页面,共6部分
1.选择文件夹部分(共用)
2.输入搜索时间,获取该时间点后的所有回复
3.包含所有回复的文件,搜索完成后会自动填入,也可手选
4.选择词云图所用的模板图片,不设定/设定错误,直接生成为方形
5.添加屏蔽词,设定词云图不显示的词语
6.显示词云图label
'''
self.creat_dirframe(self.content_frame)# 创建 搜索保存文件夹部分
content_fr = Frame(self.content_frame)
content_fr.pack()
self.the_time = StringVar()
now_time = datetime.datetime.now()
yes_time = now_time + datetime.timedelta(days=-1)
yes_time = yes_time.strftime('%Y-%m-%d %H:%M')
self.the_time.set(yes_time) #默认时间设定为当前时间的前一天
time_label = Label(content_fr, text='输入时间:', anchor='e')
time_button = Button(content_fr, text='获取回复', command=self.get_content)
time_combobox = Combobox(content_fr, width=20, textvariable=self.the_time,values=['获取所有内容'])
format_label=Label(content_fr, text='格式:2018-10-25或2018-10-25 15:00', foreground='gray',anchor='e')
time_label.grid(row=0, column=0)
time_combobox.grid(row=0, column=1)
time_button.grid(row=0, column=3)
format_label.grid(row=0, column=2)
self.content_file = StringVar()
cfile_label = Label(content_fr, text='回复文件:', anchor='e')
cfile_button = Button(content_fr, text='更改文件',command= lambda:self.set_filepath(self.content_file))
cfile_entry = Entry(content_fr, width=55, textvariable=self.content_file)
cfile_label.grid(row=1, column=0)
cfile_entry.grid(row=1, column=1,columnspan=2)
cfile_button.grid(row=1, column=3)
self.pic_file = StringVar()
pic_label = Label(content_fr, text='模板图片:', anchor='e')
pic_button = Button(content_fr, text='选择文件', command= lambda:self.set_filepath(self.pic_file))
pic_entry = Entry(content_fr, width=55, textvariable=self.pic_file)
pic_label.grid(row=2, column=0)
pic_entry.grid(row=2, column=1, columnspan=2)
pic_button.grid(row=2, column=3)
self.add_stopword = StringVar()
self.add_stopword.set('就是, 不是, 现在, 没有, 可以, 还是, 这个, 怎么, 什么, 自己, 一个')
stopword_label = Label(content_fr, text='添加屏蔽词:', anchor='e')
stopword_entry = Entry(content_fr, width=55, textvariable=self.add_stopword)
wc_button=Button(content_fr, text='生成图片', command=self.generate_pic)
stopword_label.grid(row=3, column=0)
stopword_entry.grid(row=3, column=1, columnspan=2)
wc_button.grid(row=3, column=3)
#插入图片的label
self.wc_label=Label(self.content_frame)
self.wc_label.pack()
def creat_search_frame(self):
'''搜索帖子回复部分,共5部分:
1.选择文件夹部分(共用)
2.根据 关键字 搜索回复内容
3.根据 回帖人 搜索回复内容
4.text,显示tree中你所点的某个回复
5.tree,搜索结束后,插入搜索内容
'''
self.creat_dirframe(self.search_frame)# 创建 搜索保存文件夹部分
# 搜索关键字/回帖人部分
search_fr = Frame(self.search_frame)
search_fr.pack()
self.target_word = StringVar()
sword_label = Label(search_fr, text='搜索回复内容----关键字:', anchor='e')
sword_button = Button(search_fr, text='搜索', command=self.search_keyword)
sword_entry = Entry(search_fr, width=20, textvariable=self.target_word)
sword_label.grid(row=0, column=0)
sword_entry.grid(row=0, column=1)
sword_button.grid(row=0, column=2)
self.author = StringVar()
sauthor_label = Label(search_fr, text='搜索回复内容----回帖人:', anchor='e')
sauthor_button = Button(search_fr, text='搜索', command=self.search_author)
sauthor_entry = Entry(search_fr, width=20, textvariable=self.author)
sauthor_label.grid(row=1, column=0)
sauthor_entry.grid(row=1, column=1)
sauthor_button.grid(row=1, column=2)
# 显示tree所选的item帖子内容
self.value_text = Text(self.search_frame, width=120, height=3, )
self.value_text.pack()
self.value_text.tag_config('default', font=('system', 10))
#创建tree
self.creat_tree()
###==========================获取回复内容,生成词云图所用函数========================#
def generate_pic(self):
'''回调函数,生成词云图
运行过程:1.获取文件路径、屏蔽词等
2.判断包含回复的文件路径:---正