• 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 Threadimport sys
from PyQt5.QtWidgets import QApplication, QMainWindowdef 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 = 0count_tmp = 0time1 = 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 * 100speed = (count - count_tmp) / 1024 / 1024 / 2count_tmp = countprint(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.translateMainWindow.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!")returnself.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!")returnfileName, filetype = QFileDialog.getOpenFileName(None, "选择文件", "/", "Text Files (*.txt)")self.file_path = fileNameif self.file_path == '':QMessageBox.about(None, "选择txt文件", "暂时未选择txt文件,请重新选择")returnelse:f = open(self.file_path)path_name_list =''for line in f:if line !='':path_name = line.strip()[-5:]+'.pdf'#downloadFile()path_name_list+=linef.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!")returncookie_dic = convertCookie(self.cookies) #转换成字典str_links = self.textEdit_AddMoreLink.toPlainText()if str_links == '':QMessageBox.about(None, "检查链接", "当前链接未输入")returnlink_list = str_links.split('\n') #分隔符for link in link_list:if link!='':link_str = link.strip()if link_str == '':continuelink_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_())

运行截图:

PyQT实战小项目---筑龙网批量下载链接相关推荐

  1. 【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码

    前言 1.街霸游戏 1.1 KO街霸 程序完整源码 程序的输出界面 1.2 春丽VS巴洛克 参考源码 2.猜谜游戏 2.1简单的猜数字游戏 项目要求 参考源码 2.2 进阶的猜姓名游戏 项目要求 参考 ...

  2. cad工具箱详细讲解_筑龙网CAD工具箱使用说明

    __________________________________________________________________ ######## 筑龙网CAD工具箱的安装.设置与卸载 ##### ...

  3. 我用Python把抖音上的美女图片转字符画,期望的AI目标更进一步【机器学习算法实战小项目,k聚类算法图片转化字符画】

    大家好,我是辣条. 最近在学习算法,今天给大家带来一个机器学习实战小项目 项目效果展示 学习目标 1.cv2转换图片数据  2.numpy提取图片矩阵数据  3.k均值算法获取图片的分类 工具使用 开 ...

  4. libhv tcp实战小项目

    libhv Tcp小项目实战 一.概述 1.包头 2.心跳 3.任务队列 二.包头 2字节 2字节 4字节 4字节 2字节 1字节 1字节 起始标志 版本号(N) Command(命令ID) 消息体长 ...

  5. SparkSQL实战小项目之热门商品top3

    SparkSQL实战小项目之热门商品top3 一.说明及需求分析 二.准备测试数据 三.思路分析 四.编码实现 五.验证结果 一.说明及需求分析 软件及环境: centos7 + hive-2.3.3 ...

  6. Vue快速入门(附实战小项目:记事本、天气预报、音乐播放器)

    文章目录 一.前言 二.Vue.js安装 三.初始化Vue项目 四.项目目录解析 五.Vue核心指令 1.插值表达式 2.v-text 3.v-html 4.v-on 5.计数器实战 6.v-show ...

  7. 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)

    http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...

  8. 黑马程序员:Xcode8网盘下载链接及更新简述

    6月14日,苹果公司在WWDC 大会上公布了四大系统watchOS 3,tvOS,macOS Sierra和iOS 10.但既然是开发者大会,就一定会有除系统本身之外,对iOS开发技术上的内容更新.所 ...

  9. 2019年最新攻略:公众号/小程序涨粉方法 | 附下载链接!

    2019年最新攻略:公众号/小程序涨粉方法 | 附下载链接!公众号快速涨粉套路 涨粉行为从用户的底层逻辑来看,实际上是用户心理学,满足用户的朋友圈情感和社交需求. 涨粉的第一步,先找准目标人群. 涨粉 ...

最新文章

  1. import android.support.v7.widget.RecyclerView失败
  2. Codeforces Round #355 (Div. 2) B. Vanya and Food Processor 水题
  3. 排列出所有子串暴力递归
  4. 格式化的盘要怎么恢复数据
  5. P3225-[HNOI2012]矿场搭建【tarjan,图论】
  6. 基于.Net + SqlServer的分库分表设计方案
  7. 并行导致的进程数过大无法连接数据库
  8. 在线EXCEL文件数据转换解析工具
  9. HTML 4.0 语 法 教 学
  10. sql不同数据处理方式完成同一处理结果对日志增长的影响
  11. 拼多多快捷回复怎么设置
  12. php 怎么实现空间点赞,【点赞源码】QQ空间自动点赞PHP源码
  13. SQLite3 Cpp基本使用
  14. 计算机网络中atm意思,atm是什么(atm什么意思)
  15. 5.网页中增加新的内容
  16. Android网络编程入门解析
  17. 【Python编程】三步完成如何从视频中提取音频?
  18. 计算机Excel设置透视图,电脑Excel表格中数据透视图怎么制作
  19. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)
  20. 正点原子OLED显示实验

热门文章

  1. Redis精进:List的使用和应用场景
  2. Oracle查看用户、用户权限、用户表空间、用户默认表空间
  3. android selector 中的选中、点击、获得焦点的区别
  4. javaweb功能模块如何合理设计_燃油燃气锅炉烟道如何设计才更合理?
  5. 在Docker官网上浏览版本号
  6. python中条件、循环等
  7. .NET开发 正则表达式中的 Bug
  8. angularJS开发碰到的问题
  9. 编译器错误消息: CS0006: 未能找到元数据文件 System.EnterpriseServices
  10. 如何将shapefile进行拆分