class runthread(QtCore.QThread): # 通过类成员对象定义信号对象 _signal = QtCore.pyqtSignal(str) def __init__(self, titleText, saveText): super(runthread, self).__init__() self.titleText = titleText self.saveText = saveText def __del__(self): self.wait() def run(self): if self.titleText == '' or self.saveText == '': # 如果为空 self._signal.emit('EMPTY') return headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Accept-Encoding':'gzip, deflate, br', 'Connection':'keep-alive', 'Upgrade-Insecure-Requests':'1'} if not self.titleText.endswith('.txt'): # 如果不为目录(即单篇论文标题) self._signal.emit('SEARCH') downUrl = search_article(self.titleText) if downUrl == '': # 如果搜索结果为空 self._signal.emit('NULL') return else: try: self._signal.emit('DOWNLOAD') res = requests.get(downUrl, headers=headers, stream=True) fileSize = int(res.headers['Content-Length']) print(fileSize) savedSize = 0 saveName = change_title(self.titleText) with open('%s/%s.pdf'%(self.saveText,saveName), 'wb') as f: for chunk in res.iter_content(chunk_size=1024): if chunk: f.write(chunk) savedSize += len(chunk) progress = int(savedSize/fileSize*100) self._signal.emit('PRO-%d'%progress) self._signal.emit('SUCCESS') except: self._signal.emit('FAILED') else: paperList = read_file(self.titleText) if paperList == '': self._signal.emit('FILEWRONG') else: error = [] # 用于记录失败的论文 self._signal.emit('BATCH-%d'%len(paperList)) for i in range(len(paperList)): try: downUrl = search_article(paperList[i]) print(downUrl) pdf = download_article(downUrl) saveName = change_title(paperList[i]) with open('%s/%s.pdf'%(self.saveText,saveName), 'wb') as f: f.write(pdf) except: error.append(paperList[i]) self._signal.emit('NUM-%d'%(i+1)) with open('./errors.txt', 'w') as f: for e in error: f.write(e+'\n') self._signal.emit('COMPLETED-%d'%len(error))
mxHk
最新推荐文章于 2024-07-14 14:59:27 发布