示例#1
0
 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)
示例#2
0
 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)