-
PyQT是Python桌面GUI的一个非常流行的框架。可以做很多界面优美的库
-
上代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ZLTool.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox,QFileDialog
import os
import time
import requests
import _thread
from threading import Thread
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
def convertCookie(cookie_val):
# 转成字典格式
return dict(map(lambda x: x.split('='), cookie_val.split(";")))
def downloadFile(name, url, login_cookie):
'''
:param name:下载保存的名称
:param url: 下载链接
:return:
'''
headers = {'Proxy-Connection': 'keep-alive'}
r = requests.get(url, stream=True, headers=headers,cookies = login_cookie)
length = float(r.headers['content-length'])
f = open(name, 'wb')
count = 0
count_tmp = 0
time1 = time.time()
for chunk in r.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
count += len(chunk)
if time.time() - time1 > 2:
p = count / length * 100
speed = (count - count_tmp) / 1024 / 1024 / 2
count_tmp = count
print(name + ': ' + formatFloat(p) + '%' + ' Speed: ' + formatFloat(speed) + 'M/S')
time1 = time.time()
f.close()
print('下载成功!')
def formatFloat(num):
return '{:.2f}'.format(num)
class Ui_MainWindow(object):
def __init__(self):
# 相关变量定义
self.single_link = '' #单线程 单条链接
self.more_link = [''] #批量下载
self.cookies = '' #cookie必填项
self.file_path = '' #多链接文件形式下载
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(420, 450)
MainWindow.setMinimumSize(QtCore.QSize(420, 450))
MainWindow.setMaximumSize(QtCore.QSize(420, 450))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 401, 31))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.lineEdit_SetCookie = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
self.lineEdit_SetCookie.setObjectName("lineEdit_SetCookie")
self.horizontalLayout.addWidget(self.lineEdit_SetCookie)
self.btn_SetCookie = QtWidgets.QPushButton(self.horizontalLayoutWidget)
self.btn_SetCookie.setObjectName("btn_SetCookie")
self.btn_SetCookie.clicked.connect(self.checkCookie)
self.horizontalLayout.addWidget(self.btn_SetCookie)
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(10, 60, 401, 31))
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.lineEdit_AddLink = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
self.lineEdit_AddLink.setObjectName("lineEdit_AddLink")
self.horizontalLayout_2.addWidget(self.lineEdit_AddLink)
self.btn_AddSingleLink = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
self.btn_AddSingleLink.setObjectName("btn_AddSingleLink")
self.btn_AddSingleLink.clicked.connect(self.checkSingleLink)
self.horizontalLayout_2.addWidget(self.btn_AddSingleLink)
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 100, 401, 71))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.btn_AddMoreLink = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.btn_AddMoreLink.setObjectName("btn_AddMoreLink")
self.btn_AddMoreLink.clicked.connect(self.addMoreLinkFile)
self.verticalLayout.addWidget(self.btn_AddMoreLink)
self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
font = QtGui.QFont()
font.setUnderline(False)
font.setStrikeOut(False)
self.label.setFont(font)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget)
self.label_3.setText("")
self.label_3.setObjectName("label_3")
self.verticalLayout.addWidget(self.label_3)
self.btn_BeginDownload = QtWidgets.QPushButton(self.centralwidget)
self.btn_BeginDownload.setGeometry(QtCore.QRect(130, 360, 141, 41))
self.btn_BeginDownload.setObjectName("btn_BeginDownload")
self.btn_BeginDownload.clicked.connect(self.DownloadAll)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(100, 410, 251, 16))
self.label_2.setObjectName("label_2")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(10, 300, 300, 20))
self.label_4.setObjectName("label_4")
self.textEdit_AddMoreLink = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_AddMoreLink.setGeometry(QtCore.QRect(180, 190, 231, 161))
self.textEdit_AddMoreLink.setObjectName("textEdit_AddMoreLink")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "筑龙网批量下载工具"))
self.btn_SetCookie.setText(_translate("MainWindow", "设置Cookie"))
self.btn_AddSingleLink.setText(_translate("MainWindow", "单条链接下载"))
self.btn_AddMoreLink.setText(_translate("MainWindow", "添加多条链接(txt文本方法导入)"))
self.label.setText(_translate("MainWindow", " 强烈推荐使用txt文本导入,采用多线程进行下载,安全可靠."))
self.btn_BeginDownload.setText(_translate("MainWindow", "开始下载"))
self.label_2.setText(_translate("MainWindow", "Tip:默认保存路径为本exe文件同级目录下."))
self.label_4.setText(_translate("MainWindow", "添加多条链接(输入框方法):"))
def checkCookie(self):
# 检查cookie是否输入
self.cookies = self.lineEdit_SetCookie.text()
if self.cookies == '':
QMessageBox.about(None, "检查cookie", "当前cookie为空,请在左边输入cookie!")
else:
QMessageBox.about(None, "检查cookie", "cookie写入成功!")
def checkSingleLink(self):
self.cookies = self.lineEdit_SetCookie.text()
if self.cookies == '':
QMessageBox.about(None, "检查cookie", "当前cookie为空,请先输入cookie!")
return
self.single_link = self.lineEdit_AddLink.text()
if self.single_link == '':
QMessageBox.about(None, "检查链接", "当前链接未输入")
else:
QMessageBox.about(None, "检查链接", "当前链接输入成功,现在开始下载")
cur_cookie = convertCookie(self.cookies)
#downloadFile(self.single_link[-5:]+".pdf",self.single_link,cur_cookie)
_thread.start_new_thread(downloadFile,(self.single_link[-5:]+".pdf",self.single_link,cur_cookie))
def addMoreLinkFile(self):
# 检查cookie是否输入
self.cookies = self.lineEdit_SetCookie.text()
if self.cookies == '':
QMessageBox.about(None, "检查cookie", "当前cookie为空,请先输入cookie!")
return
fileName, filetype = QFileDialog.getOpenFileName(None, "选择文件", "/", "Text Files (*.txt)")
self.file_path = fileName
if self.file_path == '':
QMessageBox.about(None, "选择txt文件", "暂时未选择txt文件,请重新选择")
return
else:
f = open(self.file_path)
path_name_list =''
for line in f:
if line !='':
path_name = line.strip()[-5:]+'.pdf'
#downloadFile()
path_name_list+=line
f.close() #关闭
self.textEdit_AddMoreLink.setPlainText(path_name_list) #设置到文本框中。
def DownloadAll(self):
# 开始下载
self.cookies = self.lineEdit_SetCookie.text()
if self.cookies == '':
QMessageBox.about(None, "检查cookie", "当前cookie为空,请先输入cookie!")
return
cookie_dic = convertCookie(self.cookies) #转换成字典
str_links = self.textEdit_AddMoreLink.toPlainText()
if str_links == '':
QMessageBox.about(None, "检查链接", "当前链接未输入")
return
link_list = str_links.split('\n') #分隔符
for link in link_list:
if link!='':
link_str = link.strip()
if link_str == '':
continue
link_num = link_str[-6:]
link_name = link_num+'.pdf'
_thread.start_new_thread(downloadFile,(link_name,link_str,cookie_dic))
print('所有文件正在下载!')
if self.file_path != '':
print('OK, Just Download')
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
运行截图: