def get_now_page_anime_data(self, page): try: page_data = get_now_page_anime_data(page=page) self.data.update(page_data) self.page_count += 1 except BaseException as e: print('爬完結動漫頁面 Thread 出錯了', e)
def run(self): # 創資料夾 if not os.path.isdir('./EndAnimeData'): os.mkdir('EndAnimeData') if not os.path.isdir('./EndAnimeData/preview'): os.mkdir('./EndAnimeData/preview') # 取得最後一頁,get_html=True 是指 拿回 html,False就是不拿取,因為是到第一頁的頁面取得總頁數,所以等等第一頁可以不要爬了。 total_page = get_total_page(get_html=True) # 開執行續池爬快一點最多一次看16頁。 executor = ThreadPoolExecutor(max_workers=16) for page in range(1, total_page['total_page'] + 1): if page == 1 and 'html' in total_page: # 因為有html,所以就不用爬了。 page_data = get_now_page_anime_data(page=page, res=total_page['html']) self.data.update(page_data) else: executor.submit(self.get_now_page_anime_data, page) # 確認全部爬完了再進離開。 while True: if self.page_count == total_page['total_page']: break time.sleep(0.5) # 總動漫數量 total_preview_count = len(self.data) # 開執行續池爬圖片最多一次爬16個圖片。 preview_executor = ThreadPoolExecutor(max_workers=16) for name in self.data: preview_executor.submit(self.download_end_anime_preview, name, self.data[name]['img']) # 確認圖片都爬完了。 while True: if self.preview_count == total_preview_count: break time.sleep(0.5) # 取得更新日期 date = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d') # 寫入資料 json.dump({'Date': date}, open('./EndAnimeData/UpdateDate.json', 'w', encoding='utf-8'), indent=2) json.dump(self.data, open('./EndAnimeData/EndAnimeData.json', 'w', encoding='utf-8'), indent=2) result = { 'data': self.data, 'date': date, } self.end_anime_data_signal.emit(result)