python tkinter界面 多进程启动scrapy爬取百度贴吧的回复,显示爬取进度,并可以搜索回帖人,指定时间生成词云图,用pyinstaller打包成exe(九)

使用Python tkinter创建的界面应用,通过多进程启动Scrapy爬虫抓取百度贴吧回复,展示爬取进度。应用提供搜索功能,能根据回帖内容关键字和回帖人查找信息,同时可基于回帖内容生成词云图。通过pyinstaller将程序打包成exe文件。
摘要由CSDN通过智能技术生成

对生成的帖子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.判断包含回复的文件路径:---正
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值