热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Python模拟登录教务系统抓取成绩并分析存储

本文详细介绍如何使用Python编程语言模拟登录学校教务系统,抓取学生的成绩信息,并进行数据分析和可视化处理,最终将数据存储到MySQL数据库中。

本文旨在指导读者如何利用Python编程技术,实现对学校教务系统的成绩数据抓取、分析及存储。具体来说,我们将通过模拟登录的方式,从教务系统中抓取成绩信息,包括学期、课程名称、总成绩、课程性质和学分等关键数据,接着使用Matplotlib库绘制成绩分布图,并将这些数据导入MySQL数据库中进行持久化存储。


一、准备工作


在开始之前,确保你已经安装了必要的Python库,如Selenium、BeautifulSoup、Matplotlib和PyMySQL。此外,了解基本的HTML、CSS和Javascript知识对于调试和理解代码逻辑非常有帮助。


二、模拟登录教务系统


1. 首先,定义教务系统的登录页面URL和成绩查询页面URL。


# 定义URL
url_login = '你学校的教务系统登录页面URL'
url_score_query = '成绩查询页面URL'

2. 使用Selenium打开Chrome浏览器,设置不加载图片以加快页面加载速度,并最大化窗口。


# 设置Chrome选项
optiOns= webdriver.ChromeOptions()
options.add_argument('blink-settings=imagesEnabled=false')
driver = webdriver.Chrome(optiOns=options)
driver.maximize_window()
print("正在访问登录页面...")
driver.get(url_login)

3. 模拟输入用户名和密码,点击登录按钮完成登录操作。


# 输入用户名和密码
driver.find_element_by_id('username').send_keys('你的学号')
driver.find_element_by_id('password').send_keys('你的密码')
# 点击登录按钮
login_btn = driver.find_element_by_id('login_btn')
login_btn.click()

三、抓取成绩信息


1. 登录成功后,切换到成绩查询页面。


# 跳转到成绩查询页面
driver.get(url_score_query)

2. 由于成绩查询页面可能加载较慢,设置适当的等待时间以确保页面完全加载。


# 等待页面加载
time.sleep(10)

3. 选择每页显示50条记录,以便一次性抓取所有成绩数据。


# 选择每页显示50条记录
driver.find_element_by_class_name('bh-pull-right.jqx-widget').click()
time.sleep(0.5)
driver.find_element_by_xpath('//span[text()="50"]').click()
time.sleep(1)

4. 使用BeautifulSoup解析页面源码,提取成绩数据。


# 解析页面源码
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
trs = soup.find_all('tr')
# 存储成绩数据
scores = []
subjects = []
for tr in trs:
row = [td.text.strip() for td in tr.find_all('td')]
if len(row) > 1:
scores.append(row[5]) # 假设成绩在第6列
subjects.append(row[1]) # 假设科目名称在第2列

四、绘制成绩分布图


使用Matplotlib绘制成绩分布图,直观展示成绩情况。


# 绘制成绩分布图
plt.plot(range(len(scores)), scores)
plt.xlabel('科目编号')
plt.ylabel('成绩')
plt.title('成绩分布图')
plt.show()

五、将数据存储到MySQL数据库


最后,将抓取的成绩数据存储到MySQL数据库中,以便后续查询和分析。


# 连接MySQL数据库
cOnn= pymysql.connect(host='localhost', user='root', password='你的密码', database='score_db')
cursor = conn.cursor()
print("数据库连接成功!")
# 插入数据
insert_sql = "INSERT INTO scores (semester, subject, score, nature, credit) VALUES (%s, %s, %s, %s, %s)"
for i in range(len(scores)):
data = (trs[i+1].find_all('td')[0].text, trs[i+1].find_all('td')[1].text, scores[i], trs[i+1].find_all('td')[8].text, trs[i+1].find_all('td')[10].text)
cursor.execute(insert_sql, data)
conn.commit()
print("数据插入成功!")
# 关闭数据库连接
cursor.close()
conn.close()
print("数据库连接已关闭!")

推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文介绍如何使用 Python 获取文件和图片的创建、修改及拍摄日期。通过多种方法,如 PIL 库的 _getexif() 函数和 os 模块的 getmtime() 和 stat() 方法,详细讲解了这些技术的应用场景和注意事项。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文详细解析了如何使用Python语言在STM32硬件平台上实现高效的编程和快速的应用开发。通过具体的代码示例,展示了Python简洁而强大的特性。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • Python实现照片磨皮效果
    本文介绍如何使用Python和OpenCV库来实现照片的磨皮效果,使图片更加平滑并提升整体美感。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
author-avatar
7777-丿M
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有