这是一篇介绍如何通过Python实现模拟登陆学校教务系统并爬取成绩相关信息(学期,课程名,总成绩,课程性质,学分)然后绘制成绩分布折线图最后导入MySQL数据库中的文章
为了利用充分利用selenium的功能和成功爬取数据,需要有前置的html、css、简单爬虫的相关知识
说明:我学校的成绩查询页面是通过加载js框架进而动态实时加载显示表格及数据的,如果仅仅是用一般的爬虫方法直接爬取页面信息,是不能成功的,因为那样是直接获取网页源码,其中并没有成绩数据。当然,采用某些爬虫方法肯定也能实现爬取js动态网页,但是我为了简单起见,直接用了selenium模拟登陆系统然后爬取信息。
一、导入主要模块
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import matplotlib.pyplot as plt
import time
import pymysql
二、利用selenium模拟登陆教务系统
1.首先给出系统登陆页面url和成绩查询页面url(方便登陆成功后直接跳转,省去了鼠标点击相关链接的操作)
# 给出所需的url
url_login_page = ("你学校的教务系统登录页面url")
url_cjcx=("成绩查询页面url")
2.打开系统登录页面
# 启动Chorme驱动,开始模拟(不能用静默模式启动)
option = webdriver.ChromeOptions()
# 不加载图片,提高访问速度
option.add_argument('blink-settings=imagesEnabled=false')
driver = webdriver.Chrome(chrome_options=option)
driver.maximize_window()
print("正在访问......")
driver.get(url_login_page)
3.模拟输入账号密码并点击登陆按钮
这里需要你自己用F12去查看自己学校系统登陆页面的网页元素然后找到账号密码输入框、登录按钮的元素名称(这里我通过find_element_by_id找到了所需的输入框及按钮)

# 自动输入账号密码
driver.find_element_by_id("username").send_keys("你的学号")
driver.find_element_by_id("password").send_keys("你的密码")
# 找到并点击登录按钮,实现登录
login_button = driver.find_element_by_id("login_submit")
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL).click(login_button).key_up(Keys.CONTROL).perform()
三、爬取成绩信息
1.在新页面打开成绩查询页面

本文详细介绍了如何使用Python的selenium库模拟登录学校的教务系统,抓取成绩信息,包括学期、课程名、总成绩等,并将数据标准化。接着,利用matplotlib绘制成绩分布折线图,最后将数据存储到MySQL数据库中。整个过程涵盖了网页自动化、数据爬取、数据处理和数据库操作等技术。

7274

被折叠的 条评论
为什么被折叠?



