这次是显示爬取进度的tk界面:
'''显示爬取帖子进度,流程是:
在spider里,每爬取完一段(每个帖子,或者每10页),返回item时,就把帖子标题、发帖人等信息写入info.json
然后tree会不停的打开这个文件,当spider更新数据时,就添加到tree里
在循环里,每15秒检查scrapy是否还在运行,一旦不在了,就终止循环
还有打开the_spider_counts,更新理论爬取的item数量,一旦tree达到这个数量,也会中断循环'''
'''这个类是toplevel进度详情窗口的布局:
难点有几个:1.爬取[帖子]/[贴吧] label显示的文字内容不同、tree的布局也不同,所以在init里设定了
2.更新tree 已爬取的item 比较费劲,具体看show_it,(ps:如果多次按下按钮,其方法也会调用多次!)
##3个读取数据的json文件:
1."config",tk上输入爬取 贴吧/帖子 的贴吧名/页数/存放路径 的信息
2."爬取进度详情/TieXx_info.json",在spider返回item时,帖子标题、发帖人等信息
3.“爬取进度详情/the_spider_counts”,在spider上获取的理论爬取item总数,
而当结束时,就会加多一行,这次爬取的总信息 贴吧名、页数、时间等
'''
class display_window():
def __init__(self,my_tk):
self.my_tk=my_tk #总的tk界面
self.root=self.my_tk.show_text#当前的 [进度详情] 界面
self.root.title('爬取进度')
self.root.geometry('850x500+400+0')
#当前的界面是【贴吧】,设定tree的头、Label显示的文字、需要打开的info.json
if self.my_tk.Tid==False:
self.columns = ("title", "author", "reply_num", "pages", "tid", "last_reply_author", "last_reply_time", "situation")
self.the_head = ("标题", "发帖人", "回复数量", "总页数", "tid", "最后回复人", "最后回复时间", "爬取详情")
self.widths = (350, 100, 35, 35, 70, 100, 120, 160)
start_labeltext='当前选中的是爬取--------------┠贴吧┨'
self.start_LabelText="'正准备爬取┠贴吧┨——————————————→『%s』'%self.tieba_name"
self.crawing_LabelText="'正在爬取:某个贴吧『{}』——————进度:〔%s/%s〕——————耗时:%02d分:%02d秒'.format(self.tieba_name)"
self.tiezi_info_path=r'爬取进度详情/TieBa_info.json'
self.tid_posi=4 #tid在value的位置
else: #当前的界面是【帖子】
self.columns = ("title", "author", "pages", "tid", "situation")
self.the_head = ('标题', '发帖人', "总页数", "tid", '爬取页数范围')
self.widths = (400, 100, 00, 109, 200)
start_labeltext = '当前选中的是爬取--------------┠帖子┨'
self.start_LabelText="'正准备爬取┠帖子┨——————————————→『tid:%s』'%self.tid"
self.crawing_LabelText="'正在爬取:单个帖子『{}』——————进度:〔%s/%s〕——————耗时:%02d分:%02d秒