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

目录

前言

三节博客内容概要

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中properties、yml、yaml的优先级

原理 配置优先级低的会先加载然后会被配置优先级高的覆盖 验证 创建SpringBoot项目(网址) 在resource目录下创建application.properties、application.yml、application.yaml文件 运行 结论 优先级顺序: properties>yml>yaml

安防监控视频云存储平台EasyNVR出现内核报错的情况该如何解决?

安防视频监控汇聚EasyNVR视频集中存储平台,是基于RTSP/Onvif协议的安防视频平台,可支持将接入的视频流进行全平台、全终端分发,分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。 近期有用户联系到我们,EasyNVR…

Shell语法揭秘:深入探讨常见Linux Shell之间的语法转换

深入探讨常见Linux Shell之间的语法转换 一、引言二、Linux常用Shell:Bash、Zsh、Ksh、Csh、Tcsh和Fish的简介2.1、Bash、Zsh、Ksh、Csh、Tcsh和Fish的特点和用途2.2、语法差异是常见Shell之间的主要区别 三、变量和环境设置的语法差异3.1、变量定义和使用的不同语法…

MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决

本文转载于:https://www.freebuf.com/articles/web/350592.html 作者:文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接:https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…

Linux内核学习(六)—— 中断(基于Linux 2.6内核)

一、中断 中断使得硬件得以发出通知给处理器。中断随时都可以产生,如键盘敲击就会触发中断,通知操作系统有按键按下。 不同设备对应的中断不同,而每个中断都通过一个唯一的数字标识。这些中断值通常被称为中断请求(IRQ&#xff…

Dockerfile制作镜像与搭建LAMP环境

1、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。 具体要求如下: (1)基于centos基础镜像; (2)指定作者信息; (3&#x…

VMware虚拟机Ubuntu无法连接网络的解决方法

一、解决办法 网络适配器设置 终端依次执行下面命令即可 sudo nmcli networking off sudo nmcli networking onsudo service network-manager start #或者 sudo service NetworkManager start成功出现这个图标,即代表网络连接成功。

AveMaria 传播手段的变化

AveMaria 是一种最早在 2018 年 12 月出现的窃密木马,攻击者越来越喜欢使用其进行攻击,运营方也一直在持续更新和升级。在过去六个月中,研究人员观察到 AveMaria 的传播手段发生了许多变化。 2022 年 12 月攻击行动 研究人员发现了名为 .Vh…

Linux中shell脚本——for、while循环及脚本练习

目录 一.for循环 1.1.基本格式 1.2.类C语言格式 二.while循环 2.1.基本格式 2.2.死循环语句 三.跳出循环 3.1.continue跳出循环 3.2.break跳出循环 四.常用循环 4.1.循环打印九九乘法表 4.2.循环ping测试某个网段网络连通性 4.3.while死循环实现猜数字游戏 4.4.数…

Python自动化小技巧18——自动化资产月报(word设置字体表格样式,查找替换文字)

案例背景 每月都要写各种月报,经营管理月报,资产月报.....这些报告文字目标都是高度相似的,只是需要替换为每个月的实际数据就行,如下: (打码是怕信息泄露.....) 可以看到,这个报告的都是高度模板化&…

Linux 线程安全

一、线程安全的概念 线程安全即就是在多线程运行的时候,不论线程的调度顺序怎样,最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 二、如何保证线程安全 1.线程同步 保证同一时刻只有一个线程访问临界资源。线程同步的方法有4种&#xf…

python中使用xml快速创建Caption和URL书签管理器应用程序

导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…

低代码开发 轻松解决企业数字化能力建设困局

谈及数字化,这是一个几乎所有领域都在使用的概念。当下,数字化正在经历从以企业为中心向产业为中心转移、从追求效能为主的价值诉求向追求业务创新和业务发展的价值诉求转变,不断增加的不确定性也为数字化的发展蒙上了一层阴影。 除了企业自…

基于Spring Boot的机场VIP客户管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的机场VIP客户管理系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java s…

数据结构作业——哈夫曼树

/*【基本要求】 (1) 从文件中读出一篇英文文章,包含字母和空格等字符。 (2) 统计各个字符出现的频度。 (3) 根据出现的频度,为每个出现的字符建立一个哈夫曼编码,并输出。…

深入源码分析kubernetes informer机制(二)Reflector

[阅读指南] 这是该系列第二篇 基于kubernetes 1.27 stage版本 为了方便阅读,后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 Reflector是什么整体结构工作流程list拉取数据缓存resync操作watch监听操作 总结 Reflector是什么 reflector在informer…

爬虫逆向实战(七)--猿人学第十六题

一、数据接口分析 主页地址:猿人学第十六题 1、抓包 通过抓包可以发现数据接口是api/match/16 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以看出m是加密参数 请求头是否加密? 无响应是否加密? 无cook…

云聊天项目测试

前言 以下将对云聊天项目编写测试用例以及主要功能的自动化测试。 1. 测试用例的编写 2. 自动化测试 以下进行部分自动化测试用例的执行,检验项目功能是否符合预期。 2.1 登录功能测试 测试代码: 输入非法用户名或密码逻辑相似,不重复描…

安防监控视频汇聚平台EasyCVR视频平台调用iframe地址无法播放的问题解决方案

安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

冷冻冷藏自动化立体库|HEGERLS四向穿梭车助力打造冷链智能仓储新力量

随着中国仓储物流整体规模和低温产品消费需求的稳步增长,冷链市场应用潜力不断释放。而在实际运行中,由于冷库容量不足、基础设施落后、管理机制欠缺等原因,经常出现“断链”现象,严重威胁到产品质量和消费者安全。 河北沃克金属…