热门标签 | 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("数据库连接已关闭!")

推荐阅读
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
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社区 版权所有