import requests from bs4 import BeautifulSoup # 用于代替正则式 取源码中相应标签中的内容 import os from rich.progress import track as tqdm from concurrent.futures import ThreadPoolExecutor, wait import time from PIL import Image from utils import * class Downloader(object): def __init__(self, comic_name, root_path = './', url_prev='.site', high_quality=False): self.comic_name = comic_name self.root_path = root_path self.url_prev = url_prev self.high_quality = high_quality self.comic_msg_url = f"https://api.copymanga{url_prev}/api/v3/comic2/{comic_name}" self.comic_url_api = 'https://api.copymanga{}/api/v3/comic/{}/group/{}/chapters?limit=500&offset=0&platform=3' self.chap_url_api = 'https://api.copymanga{}/api/v3/comic/{}/chapter2/{}?platform=3' self.header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47', 'platform': '1'} self.max_thread_num = 16 self.pool = ThreadPoolExecutor(self.max_thread_num) self.buffer_map = {} def get_comic_msg(self, is_gui=False, signal=None, editline=None): req = requests.get(self.comic_msg_url, headers=self.header).json() req = req['results'] self.comic_title = req['comic']['name'] self.comic_author = req['comic']['author'][0]['name'] self.cover_url = req['comic']['cover'] cls_dict = req['groups'] self.cls_dict = {} for key in cls_dict.keys(): self.cls_dict[cls_dict[key]['name']] = cls_dict[key]['path_word'] if len(cls_dict.keys())==1: self.url_cls = list(self.cls_dict.values())[0] elif len(cls_dict.keys())>1: choise_name = self.get_choise(list(self.cls_dict.keys()), is_gui, signal, editline) self.url_cls = self.cls_dict[choise_name] self.comic_url = self.comic_url_api.format(self.url_prev, self.comic_name, self.url_cls) def get_comic_chaps(self): req = requests.get(self.comic_url, headers=self.header) comic_urls = req.json()['results']['list'] num_chaps = comic_urls[0]['count'] offset = 0 while offset