用python从零开始做一个最简单的小说爬虫带GUI界面(1/3)

news2024/11/24 6:18:36

目录

前言

三节博客内容概要

PyQt5的配置

 设置软件的快捷启动方式

1.        用于设计界面的程序

2.        将Qt Designer设计出来的ui文件转化为py文件

3.        可以把py文件打包成可执行的exe文件

4.        将ico图片放在qrc文件中,再将qrc文件转换成py文件,用于小工具的图标

快捷使用方法

 设计界面

把设计的ui界面的ui文件转为py文件

main文件中的代码


前言

之前也做过小说爬虫的博文

虽然因为某种原因被下架了,而且当时的爬虫代码有许多问题

 

 但是最近学了PyQt5想着搞个带界面的爬虫玩玩

那就啥也不说

开搞!!!

三节博客内容概要

第一节讲界面设计(虽然非常简单......)以及有关于PyQt5的代码

第二和第三节主要讲爬虫的核心代码

PyQt5的配置

配置其他的博主上有教程

建议安装以下包(最好在你原来的电脑环境也就是你电脑的cmd中输入以下命令,不要在pycharm创建的虚拟环境下创建,防止项目删除后软件打不开)

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5-tools
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple paramiko
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

 当然在pycharm中也要安装一遍

 之后在设置中

 选择工具->外部工具->加号

 设置软件的快捷启动方式

 然后依次新建如下内容

1.        用于设计界面的程序

名称:Qt Designer
工具设置
    程序:C:\Users\你的用户名\AppData\Local\Programs\Python\你的python版本\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
    工作目录:$FileDir$

2.        将Qt Designer设计出来的ui文件转化为py文件

名称:PyUIC
工具设置:
    程序:C:\Users\你的用户名\AppData\Local\Programs\Python\你的python版本\Scripts\pyuic5.exe
    实参:$FileName$ -o $FileNameWithoutExtension$.py 
    工具目录:$FileDir$

3.        可以把py文件打包成可执行的exe文件

名称:PyInstall 
工具设置:
    程序:C:\Users\你的用户名\AppData\Local\Programs\Python\你的python版本\Scripts\pyinstaller.exe
    实参: -F -w  $FileNameWithoutExtension$.py
    工作目录:$FileDir$

4.        将ico图片放在qrc文件中,再将qrc文件转换成py文件,用于小工具的图标

名称:pyrcc 
工具设置:
    程序:C:\Users\你的名字\AppData\Local\Programs\Python\你的Python3版本\Scripts\pyrcc5.exe
    实参:$FileName$ -o $FileNameWithoutExtension$.py 
    工作目录:$FileDir$

写完后点击应用即可

快捷使用方法

然后你可以点击左三角的

工具->外部工具中快捷使用

 设计界面

 然后我们点击Qt Designer开始设计界面

 然后开始创建一个窗口

 

进入后按照自己的喜好创建窗口

 高级的使用方法不进行介绍

我用到的有

label:就是框框中的文字

 line edit:用于获取输入的链接

 Push Button:用于设置触发按钮,比如开始爬取或者关闭窗口

 Text Browser:用于输出程序的结果(可不加,给用户看的)

 

 点击控件后右边的框框会显示是哪一个控件

建议重新命名一边名称,不然会很难记

 设计完成后就可以点击保存了,默认保存到你python项目的根目录

把设计的ui界面的ui文件转为py文件

由于我们设置了快捷方式

我们可以非常便捷右键ui文件然后执行PyUIC工具 

 之后你就可以在项目的文件目录下找到同名称的py文件

亦或者你可以执行命令

pyuic5 -o 原ui文件名称 输出的py文件名称

编译出来的文件大概长这样

 文件的代码就是

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'win.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(679, 485)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Button_run = QtWidgets.QPushButton(self.centralwidget)
        self.Button_run.setGeometry(QtCore.QRect(50, 240, 121, 41))
        self.Button_run.setObjectName("Button_run")
        self.Button_close = QtWidgets.QPushButton(self.centralwidget)
        self.Button_close.setGeometry(QtCore.QRect(220, 240, 121, 41))
        self.Button_close.setObjectName("Button_close")
        self.label_link = QtWidgets.QLabel(self.centralwidget)
        self.label_link.setGeometry(QtCore.QRect(60, 110, 71, 21))
        self.label_link.setObjectName("label_link")
        self.line_link = QtWidgets.QLineEdit(self.centralwidget)
        self.line_link.setGeometry(QtCore.QRect(130, 110, 211, 21))
        self.line_link.setObjectName("line_link")
        self.text_result = QtWidgets.QTextEdit(self.centralwidget)
        self.text_result.setGeometry(QtCore.QRect(370, 110, 291, 321))
        self.text_result.setObjectName("text_result")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 679, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "爬虫"))
        self.Button_run.setText(_translate("MainWindow", "开始爬取"))
        self.Button_close.setText(_translate("MainWindow", "关闭"))
        self.label_link.setText(_translate("MainWindow", "目录链接"))

main文件中的代码

创建一个文件命名为main.py(用来存放我们的主程序)

import sys
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import QApplication, QMainWindow
# 导入designer工具生成的login模块
from win import Ui_MainWindow
import time

而win是我刚刚窗口文件编译出来文件Ui_mainWindow是我的类名

(不要一股脑的抄,依葫芦画瓢就行) 

class MyMainForm(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)


if __name__ == "__main__":
    # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
    app = QApplication(sys.argv)
    # 初始化
    myWin = MyMainForm()
    # 将窗口控件显示在屏幕上
    myWin.show()
    # 程序运行,sys.exit方法确保程序完整退出。
    sys.exit(app.exec_())

合在一起,然后运行,就可以看到出现了一个窗口

但是我们的按钮没有任何作用

接下来我们就要用函数绑定按下按钮的事件

刚刚的函数中的

    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)

可以变为这个 (意思就是按下Button_close的按钮触发close函数,这个函数不用自己定义,按下Button_run按钮执行F_run函数,这个要我们自己定义了)

    def __init__(self, parent=None):
        super(MyMainForm, self).__init__(parent)
        self.setupUi(self)
        self.Button_close.clicked.connect(self.close)
        self.Button_run.clicked.connect(self.F_run)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/904757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axios跨域请求处理

问题背景: vue 项目用 axios 进行请求的时候,总是报“Access to XMLHttpRequest at ‘http://localhost:8889/api/login’ from origin ‘http://localhost:8080……’”的错误 实际上就是前后端分离的情况下,发生了跨域的问题 跨域定义&…

AWS SDK 3.x for .NET Framework 4.0 可行性测试

前言 为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Win…

PyTorch模型性能分析与优化

动动发财的小手,点个赞吧! 训练深度学习模型,尤其是大型模型,可能是一项昂贵的支出。我们可以使用的管理这些成本的主要方法之一是性能优化。性能优化是一个迭代过程,我们不断寻找提高应用程序性能的机会,然…

基于Java+SpringBoot+vue前后端分离在线动漫信息系统设计实现

基于JavaSpringBootvue前后端分离在线动漫信息系统设计实现(程序源码毕业论文) 大家好,今天给大家介绍基于JavaSpringBootvue前后端分离在线动漫信息系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完…

基于单片机串口控制直流电机调速

一、系统方案 (2)本设计采用STC89C5单片机作为主控器,串口控制直流电机调速,串口助手发送1-8,改变电机速度,数码管显示对应速度。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 TMOD0x21;//定…

Linux学习之ssh和scp

ls /etc/ssh可以看到这个目录下有一些文件,而/etc/ssh/ssh_config是客户端配置文件,/etc/ssh/sshd_config是服务端配置文件。 cat -n /etc/ssh/sshd_config | grep "Port "可以看一下sshd监听端口的配置信息,发现这个配置端口是22…

代码随想录算法训练营之JAVA|第三十三天|738. 单调递增的数字

今天是第33天刷leetcode,立个flag,打卡60天,如果做不到,完成一件评论区点赞最高的挑战。 算法挑战链接 738. 单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/ 第一想法 题目理解:找到一个…

2023国赛数学建模B题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

C++进阶 类型转换

本文简介:介绍C中类型转换的方式 类型转换 C语言中的类型转换为什么C需要四种类型转换C强制类型转换static_castreinterpret_castconst_castdynamic_cast RTTI(了解)总结 C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型…

数据同步后数据总条数对不上的问题解决

文章目录 [toc] 1.问题2.解决办法2.1)设置合理的线程池参数2.2)设置url连接参数2.3) 优化msql的系统参数2.4)使用CountDownLatch减法计数器和数据插入的公共方法新开一个事务2.5)sql批量注入器执行成功后,当前线程slee…

蛊卦-拨乱反正

目录 前言 卦辞 爻辞 总结 前言 题外话,今天占卜时,看错了,以为占到了蛊卦(后续会对自己的占卦经历进行补充,不断完善这个易经学习的专栏),那顺便就学习一下蛊卦,蛊惑人心&#…

线程和进程同步互斥你真的掌握了吗?(同步互斥机制保姆级讲解与应用)

目录 同步互斥的概念 互斥锁 初始化互斥锁 销毁互斥锁 申请上锁 解锁 案例1:没有互斥锁 多任务的运行情况 案例2:有互斥锁 多任务的运行情况 死锁 读写锁 初始化读写锁 销毁读写锁 申请读锁 申请写锁 释放读写锁 案例:两个任务…

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)效果…

从0到1:通用后台管理系统 echarts图使用及其参数

这一章主要讲在系统概览模块中,所使用的echarts图及其参数 echarts是一个基于 JavaScript 的开源可视化图表库, 官网直通车 是在各种后台管理系统的开发中都常见的一种库,也是前端开发管理系统所必学的一种库 那么在项目中主要是使用了饼…

【前端】React快速入门+Redux状态管理

本文旨在记录react的基础内容,帮助有需要的同学快速上手,需要进一步了解描述更加稳妥和全面的信息,请查阅官方文档 官方文档点击这里进行跳转 React快速入门 先导 react框架 vue,react,angular这几种主流前端框架使用频率较高…本质还是js库。 React…

1.Jetson Orin Nano Developer Kit系统刷机

本教程有3种方法刷机,根据需要自己选择适合自己的方案。 一:使用>32G的SD卡安装开发套件; 二:在Ubuntu18.04下通过SDK Manager软件在线安装系统. 三:在Ubuntu18.04下通过脚本方式安装系统. 注意:Ubuntu的账号不能为一些常见的包名如:p…

【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8

前言 本文基于野火 FreeRTOS 教程,内容是关于 FreeRTOS 官方代码的移植的注意事项,并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 一、FreeRTOS V9.0.0 源码的获取 两个下载链接: 官 网 代码托管 二、源码文件夹内容简介 Source…

Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码…

为什么需要单元测试?

为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言…

Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

前文讲解,完成了springboot、spring security、Oauth2.0的继承,实现了对系统资源的安全授权、允许获得授权的用户访问,也就是实现了单一系统的全部技术开发内容。 Springboot是微服务框架,单一系统只能完成指定系统的功能&#xf…