通过 Pyqt5 实现一个界面化的下载器,在通过网络请求实现各种类型的图片的下载。可以通过界面上输入不同图片的关键字从而实现下载图片并将下载好的图片保存到自定义的文件路径中。
文末附源码、操作视频
【阅读全文】
文章图片
在介绍代码块内容之前,先来看一下需要用到的三方的 python 库。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import osfrom scripy_images import ScripyImages
其中和 Pyqt5 相关的三个模块的导入在前面的天气查询系统的介绍中就已经提到过了,若是需要下载《Pyqt5 天气查询系统》的源码,请在公众号内回复:"天气查询系统"。那么剩下的两个操作库一个是 os 模块主要是用来做系统文件相关操作的,还有一个就是 scripy_images 模块是用来通过网络请求来获取和下载图片的。
接下来介绍 Pyqt5 相关的页面定义等函数的使用。同样的先在 Pyqt5 的窗口上面添加我们需要的需要的组件,最后通过将这些组件添加到布局里面,大概的实现过程就是遵循这个顺序来实现的。
def init_ui(self):
self.setWindowTitle('百度图片提取应用')grid = QGridLayout()self.page_label = QLabel()
self.page_label.setText('设置爬取页数:')
self.page_line_text = QLineEdit()
self.page_line_text.setPlaceholderText('输入整数')
self.page_line_text.setValidator(QIntValidator(1, 99))
self.page_line_text.setFocus()self.keyword_label = QLabel()
self.keyword_label.setText('设置图关键字:')
self.keyword_line_text = QLineEdit()
self.keyword_line_text.setValidator(QRegExpValidator(QRegExp('[\u4E00-\u9FA5]+')))
self.keyword_line_text.setMaxLength(6)
self.keyword_line_text.setPlaceholderText('输入汉字')self.file_path = QLineEdit()
self.file_path.setPlaceholderText('自定义文件路径')
self.file_path.setReadOnly(True)
self.file_path_button = QPushButton()
self.file_path_button.setText('自定义路径')
self.file_path_button.clicked.connect(self.file_path_click)self.request_button = QPushButton()
self.request_button.setText('快速开始抓取图片')
self.request_button.clicked.connect(self.download_image)self.log_text = QTextEdit()
self.log_text.setPlaceholderText('抓取进度结果展示...')
self.log_text.setReadOnly(True)
self.log_text.setMaximumHeight(100)self.version_msg_label = QLabel()
self.version_msg_label.setText('公众号:[Python 集中营] 发布')
self.version_msg_label.setAlignment(Qt.AlignCenter)grid.addWidget(self.page_label, 0, 0, 1, 1)
grid.addWidget(self.page_line_text, 0, 1, 1, 2)
grid.addWidget(self.keyword_label, 1, 0, 1, 1)
grid.addWidget(self.keyword_line_text, 1, 1, 1, 2)
grid.addWidget(self.file_path, 2, 0, 1, 2)
grid.addWidget(self.file_path_button, 2, 2, 1, 1)
grid.addWidget(self.request_button, 3, 0, 1, 3)
grid.addWidget(self.log_text, 4, 0, 1, 3)
grid.addWidget(self.version_msg_label, 5, 0, 1, 3)self.setLayout(grid)
再接着就是定义相应的槽函数,其中有两个槽函数的使用一个是实在定义文件的存储的路径时需要一个槽函数用来将获取文件路径。还有一个就是开始进行百度图片的下载过程,通过这个槽函数来调用下载模块的执行。
def file_path_click(self):
self.cwd = os.getcwd()
directory = QFileDialog.getExistingDirectory(self, '选取文件夹', self.cwd)
print(directory)
self.file_path.setText(directory + '/')def download_image(self):
check_param = False
self.log_text.setText("")
self.log_text.insertPlainText("-----开始必填项参数检查-----\n")
if self.page_line_text.text().strip() != '' and \
self.keyword_line_text.text().strip() != '' and \
self.file_path.text().strip() != '':
self.log_text.insertPlainText("---参数检查成功---\n")
check_param = True
else:
self.log_text.insertPlainText("---参数检查失败---\n")
self.log_text.insertPlainText("请填写必填项后继续...\n")
check_param = False
self.log_text.insertPlainText("-----结束必填项参数检查-----\n")if check_param is True:
self.log_text.insertPlainText("-----开始下载百度图片-----\n")
self.log_text.insertPlainText("---请耐心等待---\n")
ScripyImages(page_num=self.page_line_text.text(),current=self.keyword_line_text.text(),file_path=self.file_path.text())
self.log_text.insertPlainText("-----结束下载百度图片-----\n")
接着就是调用主函数执行整个逻辑。
if __name__ == '__main__':
app = QApplication(sys.argv)
baidu = baiduImage()
baidu.show()
sys.exit(app.exec_())
整个 Pyqt5 的调用执行过程就是这样的,获取完整的代码块包括百度图片执行网络请求下载的部分在公众号回复"百度图片下载器"获取完整代码块。
操作视频演示......
文章图片
【PyQt5 GUI(百度图片下载器(文末附源码))】【往期回顾】
python3中的zip()、zip(*)、list()之间的灵活转换!
python print() 函数的格式化字符串输出
PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)!
一款优美的windows cmd命令行工具cmder
如何进行excel数据分析之后的可视化数据写入保存!
excel数据处理二:快速完成openpyxl数据的新增、修改!
excel数据处理一:巧妙使用openpyxl提取、筛选数据
比Selenium更方便的自动化测试工具Helium!
Python数据可视化:可视化数据分析插件D-Tale
计算速度太慢?试试 lru_cache 装饰器!
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)