首页 > 编程语言 >5分钟教你从爬虫到数据处理到图形化一个界面实现山西理科分数查学校-Python

5分钟教你从爬虫到数据处理到图形化一个界面实现山西理科分数查学校-Python

时间:2023-07-19 14:35:27浏览次数:39  
标签:layout area Python self 爬虫 scroll 数据 图形化

5分钟教你从爬虫到数据处理到图形化一个界面实现山西理科分数查学校-Python

引言

在高考结束后,学生们面临的一大挑战是如何根据自己的分数找到合适的大学。这是一个挑战性的任务,因为它涉及大量的数据和复杂的决策过程。大量的信息需要被过滤和解析,以便学生们能对可能的大学选择有一个清晰的认识。这个过程可以通过计算机程序来大大简化,给学生带来便利。本实验报告将详细描述如何使用Python,一种强大而灵活的编程语言,来实现一个服务,该服务可以根据学生的分数,从网站上爬取数据,然后分析这些数据,最后提供一个用户友好的界面,使学生能够方便地查询分数对应的可能学校。

Python是一种强大的编程语言,因其丰富的第三方库和易用性,被广大数据科学家和程序员所喜欢。Python丰富的第三方库,如requests、BeautifulSoup、pandas和Tkinter,使得我们能顺利完成从数据获取到用户界面设计的整个过程。本报告将以“山西省2023年普通高校招生第一批本科A类院校投档最低分”网站为例,详细介绍整个实现过程。

数据获取

  • 注:山西招生考试网使用js禁用了网页端的复制以及右键菜单,无法直接复制表格,所以我们先保存html源码再做分析。

在本项目中,我们的数据来自山西省的招生网站。首先,我们需要通过Python的requests库向目标网站发送GET请求,获得网页的HTML内容。requests库是Python中最常用的HTTP请求库,它的API设计的简单易用,可以轻松完成各种复杂的HTTP请求。

在发送GET请求时,我们需要提供目标网站的URL。在收到请求后,服务器将返回包含网页内容的HTML文本。这个过程可能会遇到网络延迟、服务器错误等问题,我们需要使用try/except语句来处理这些可能的错误,确保程序的稳定运行。

数据解析

获取到网页数据后,下一步是解析这些数据,提取出我们需要的信息。解析HTML并不是一件容易的事,因为HTML的结构通常很复杂,有许多嵌套的标签。幸运的是,我们有BeautifulSoup库,它可以帮助我们轻松地解析HTML。

在本项目中,我们需要提取表格中的数据。表格数据通常包含在<tr><td>标签中。我们首先使用BeautifulSoup的find_all方法找到所有的<tr>元素,然后对每个<tr>元素,我们提取其所有<td>子元素的文本。这些文本是我们需要的数据,我们将它们组合成一个列表,然后将这个列表添加到一个大的列表中,这个大列表将包含所有的数据。

数据处理

得到原始数据后,我们需要进行一些处理,以便后续的分析。数据处理是数据科学的一个重要部分,它包括清洗数据、整理数据和过滤数据等。

在本项目中,我们使用pandas库来处理数据。pandas是Python中最常用的数据处理库,它提供了许多强大的功能,如数据过滤、排序和聚合等。我们首先使用pandas的read_csv函数读取CSV文件,然后使用布尔索引方法过滤出我们需要的数据。具体来说,我们需要找出所有最低分低于输入分数的学校。这可以通过创建一个布尔索引实现,该索引对应于最低分低于输入分数的行。我们还需要对数据进行排序,以便用户能够更容易地查看数据。

GUI编程

有了处理好的数据,我们接下来需要创建一个图形用户界面(GUI),让用户能够方便地输入分数并查看对应的学校。Python的Tkinter库提供了一种简单而强大的方式来创建GUI。

我们首先创建一个窗口,然后在窗口中添加一些控件,如文本框、按钮和列表框。用户可以在文本框中输入分数,然后点击按钮进行查询。查询结果将显示在列表框中。

为了使GUI更加友好,我们还需要处理一些细节,如输入验证、错误提示和结果显示格式等。这些细节虽小,但却对用户体验有着重要的影响。

打包应用

最后,我们使用PyInstaller库将Python脚本打包成一个独立的可执行文件。这样,用户就可以在没有Python环境的电脑上运行这个程序。PyInstaller是一个强大的打包工具,它可以将Python脚本及其依赖的库打包成一个单一的可执行文件,使得分发和使用变得非常方便。

结论

这个过程涵盖了数据获取、解析、处理和GUI编程等多个步骤,展示了Python在处理实际问题中的强大能力。

通过这个实验,我们可以看到Python在数据获取、处理和GUI编程方面的强大能力。Python的丰富的第三方库使得这些任务变得简单而直接。这个实验也展示了Python在实际问题中的应用,如何从网页获取数据,然后处理这些数据,并创建一个用户友好的接口供用户查询数据。

总的来说,Python是一种强大的工具,不仅可以用于科学计算和数据分析,也可以用于创建实用的应用程序。本实验只是展示了Python的一小部分能力,Python的真正潜力远不止于此。

附:pyqt源码:

import sys
import pandas as pd
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QScrollArea

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 设置窗口图标
        self.setWindowIcon(QIcon('favicon.ico'))

        # 创建界面元素
        self.score_label = QLabel('请输入分数:')
        self.score_input = QLineEdit()
        self.result_label = QLabel('查询结果:')
        self.result_output = QLabel()
        self.search_button = QPushButton('查询')

        # 创建滚动区域
        self.scroll_area = QScrollArea()
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area_content = QWidget(self.scroll_area)
        self.scroll_area_layout = QVBoxLayout(self.scroll_area_content)
        self.scroll_area.setWidget(self.scroll_area_content)

        # 设置界面布局
        layout = QVBoxLayout()
        layout.addWidget(self.score_label)
        layout.addWidget(self.score_input)
        layout.addWidget(self.search_button)
        layout.addWidget(self.result_label)
        layout.addWidget(self.scroll_area)
        self.setLayout(layout)

        # 绑定按钮点击事件
        self.search_button.clicked.connect(self.search)

        # 设置窗口大小
        self.setFixedSize(300, 700)

    def search(self):
        # 读取CSV文件
        df = pd.read_csv('理工.csv')

        # 过滤数据
        score = float(self.score_input.text())
        filtered_df = df[df['最低分'] < score]

        # 显示结果
        # result = '\n'.join(filtered_df['院校名称'].tolist())
        result = '\n'.join(filtered_df.apply(lambda row: '{}: {}'.format(row['院校名称'], row['最低分']), axis=1).tolist())
        self.result_output.setText(result)
        self.scroll_area_content.setMinimumWidth(self.result_output.width())
        self.scroll_area_layout.addWidget(self.result_output)

if __name__ == '__main__':
    # 创建应用程序和主窗口
    app = QApplication(sys.argv)
    window = MainWindow()

    # 显示主窗口
    window.show()

    # 运行应用程序
    sys.exit(app.exec_())

运行界面:
image

源码以及数据下载地址:

标签:layout,area,Python,self,爬虫,scroll,数据,图形化
From: https://www.cnblogs.com/zzbcoder/p/17565463.html

相关文章

  • Sobel edge detector python pytorch
    实现Sobel边缘检测器的PythonPyTorch方法介绍在本文中,我将向你介绍如何使用Python和PyTorch实现Sobel边缘检测器。Sobel边缘检测器是一种经典的计算机视觉算法,用于检测图像中的边缘。通过学习本文,你将了解到整个流程以及每一步所需的代码。流程下面是实现Sobel边缘检测器的整......
  • Python Magic Methods & Operator Overloading All In One
    PythonMagicMethods&OperatorOverloadingAllInOne__init__&__add__MagicMethods__sub__for-__mul__for*__truediv__for/__floordiv__for//__mod__for%__pow__for**__and__for&__xor__for^__or__for|Theexpression......
  • 一个月学会Python的Quora指南和资料放送
    如何一个月学会使用Python文章翻译自Quora上的回帖,略有改动。原文链接:https://www.quora.com/What-are-the-best-tips-for-learning-Python-within-one-month第1周谷歌搜索“Pythonprogrammingfundamentals”(Python编程基础),选择一个较好的网站,并针对其中的教程部分进行阅读......
  • Python日志模块:实战应用与最佳实践
    本文详细解析了Python的logging模块,从基本介绍到实际应用和最佳实践。我们通过具体的代码示例解释了如何高效地使用这个模块进行日志记录,以及如何避免常见的陷阱,旨在帮助读者更好地掌握这个强大的工具。一、Python日志模块简介日志的概念及其在软件开发中的作用在开发过程中,......
  • 整个好活:micropython utf-8转gb2312
    classgb2312(object):def__init__(self):self.f=open('utf2gb2312.bin','r',encoding='utf-8')defb2i(self,byte):#bytes转intr=0foriinrange(len(byte)):r=(r<<......
  • Python 报错 Could not guess image MIME subtype
    Python报错CouldnotguessimageMIMEsubtype问题描述:使用MIMEImage打包图片时,报错CouldnotguessimageMIMEsubtypefromemail.mime.imageimportMIMEImageidentification=uuid.uuid4().hexwithopen(abspath,"rb")asf:content=f.read()img=MIMEIm......
  • python笔记:第十章开箱即用的模块
    1.模块import模块名1.1模块就是程序任何python程序都可以作为模块导入,并标明程序(模块)的位置importsyssys.path.append('路径')importhello//在同一文件夹下会在该文件夹里面自动生成一个__pycache__文件夹,包含处理后的文件。(可删除,无影响)在hello.py里面编写函......
  • python将excel内两列的日期合并
    原excel: 目标将year和month合并:year、month里放的1961等是数字,合并日期的时候需要把它们变成字符串再合并,采用.astype(str)#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Su@file:ceshi.py@time:2023/06/26@desc:"""importpandasaspd#打开excel......
  • 无需学习Python,一个公式搞定领导想看的大屏
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。不要让“做不了”成为数字化转型的障碍随着数字化的脚步加快,越来越多的企业开始注重数据的展示和报告。原有数据的整合,清洗,二次加工变得......
  • Vscode Python Workspace 设定流程
    这里记录一下,使用vscode编写一个Python项目时,个人觉得比较舒服的配置方法:预先准备首先保存项目文件夹为工作区,获得xxx.code-workspace文件,以后通过它打开工作区。禁用不需要的插件。Python虚拟环境使用虚拟python环境可以把项目的依赖项安装到项目文件夹下,不会“污......