PyQT实战小项目---筑龙网批量下载链接
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实战小项目---筑龙网批量下载链接相关推荐
- 【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码
前言 1.街霸游戏 1.1 KO街霸 程序完整源码 程序的输出界面 1.2 春丽VS巴洛克 参考源码 2.猜谜游戏 2.1简单的猜数字游戏 项目要求 参考源码 2.2 进阶的猜姓名游戏 项目要求 参考 ...
- cad工具箱详细讲解_筑龙网CAD工具箱使用说明
__________________________________________________________________ ######## 筑龙网CAD工具箱的安装.设置与卸载 ##### ...
- 我用Python把抖音上的美女图片转字符画,期望的AI目标更进一步【机器学习算法实战小项目,k聚类算法图片转化字符画】
大家好,我是辣条. 最近在学习算法,今天给大家带来一个机器学习实战小项目 项目效果展示 学习目标 1.cv2转换图片数据 2.numpy提取图片矩阵数据 3.k均值算法获取图片的分类 工具使用 开 ...
- libhv tcp实战小项目
libhv Tcp小项目实战 一.概述 1.包头 2.心跳 3.任务队列 二.包头 2字节 2字节 4字节 4字节 2字节 1字节 1字节 起始标志 版本号(N) Command(命令ID) 消息体长 ...
- SparkSQL实战小项目之热门商品top3
SparkSQL实战小项目之热门商品top3 一.说明及需求分析 二.准备测试数据 三.思路分析 四.编码实现 五.验证结果 一.说明及需求分析 软件及环境: centos7 + hive-2.3.3 ...
- Vue快速入门(附实战小项目:记事本、天气预报、音乐播放器)
文章目录 一.前言 二.Vue.js安装 三.初始化Vue项目 四.项目目录解析 五.Vue核心指令 1.插值表达式 2.v-text 3.v-html 4.v-on 5.计数器实战 6.v-show ...
- 用批处理整理百度MP3上歌曲排行榜MP3及LRC文件的批量下载链接地址(含图文教程)
http://bbs.wuyou.com/viewthread.php?tid=192322 本文结构如下: 一.缘起:问题的提出 二.试探:徒劳而返 三.峰回路转:芝麻!开门! 四.万事俱备:xml ...
- 黑马程序员:Xcode8网盘下载链接及更新简述
6月14日,苹果公司在WWDC 大会上公布了四大系统watchOS 3,tvOS,macOS Sierra和iOS 10.但既然是开发者大会,就一定会有除系统本身之外,对iOS开发技术上的内容更新.所 ...
- 2019年最新攻略:公众号/小程序涨粉方法 | 附下载链接!
2019年最新攻略:公众号/小程序涨粉方法 | 附下载链接!公众号快速涨粉套路 涨粉行为从用户的底层逻辑来看,实际上是用户心理学,满足用户的朋友圈情感和社交需求. 涨粉的第一步,先找准目标人群. 涨粉 ...
最新文章
- import android.support.v7.widget.RecyclerView失败
- Codeforces Round #355 (Div. 2) B. Vanya and Food Processor 水题
- 排列出所有子串暴力递归
- 格式化的盘要怎么恢复数据
- P3225-[HNOI2012]矿场搭建【tarjan,图论】
- 基于.Net + SqlServer的分库分表设计方案
- 并行导致的进程数过大无法连接数据库
- 在线EXCEL文件数据转换解析工具
- HTML 4.0 语 法 教 学
- sql不同数据处理方式完成同一处理结果对日志增长的影响
- 拼多多快捷回复怎么设置
- php 怎么实现空间点赞,【点赞源码】QQ空间自动点赞PHP源码
- SQLite3 Cpp基本使用
- 计算机网络中atm意思,atm是什么(atm什么意思)
- 5.网页中增加新的内容
- Android网络编程入门解析
- 【Python编程】三步完成如何从视频中提取音频?
- 计算机Excel设置透视图,电脑Excel表格中数据透视图怎么制作
- 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)
- 正点原子OLED显示实验