Selenium——爬取自己大学三年所有的成绩保存在数据库(排序完心理有底了满满的全是回忆)

Selenium——爬取自己大学三年所有的成绩保存在数据库(心理有底了😂)

时间过得真是快,不知道怎么自己就已经大三了,最近班里又开始收集每个同学的大三一年的成绩上报学校,突然感觉这疫情一过去了学校就已经大四了,马上就要面对社会找工作成长为一个大人了,哎…就想的趁这个机会把自己大学所有的成绩都爬取下来放入数据库,看看自己大学三年到底学的怎么样,分析一下,还有一年的时间,自己一定要加油哇!!!

本人是山西农业大学软件学院大三的一名学生

此次爬取使用的是Selenium(自从上次爬取卡钩,学习通使用了后,感觉自己爱上了这个库),在使用这个之前,自己也尝试直接对成绩网页进行爬取,因为我自己分析过后,该网页使用Ajax方式加载数据,以JSON方式返回,若成功爬取很好处理数据,但是自己以目前的技术水平尝试过后,发现返回的网页一直是登陆页面,索性直接使用Selenium模拟登录爬取…

直接上代码:

使用的库:

import time
import lxml
from lxml import etree
from selenium import webdriver
import re
from bs4 import BeautifulSoup
import pymysql

这个是我们学校的教务系统的登陆页面(自己感觉很好看滴简洁直观大方),f12分析一下元素,输入自己的学号密码验证码模拟登录:
在这里插入图片描述
模拟登录:

url = 'http://xsjwxt.sxau.edu.cn:7873/login'
driver = webdriver.Chrome()
driver.get(url)

#模拟登录进入成绩查询页面
input_username = driver.find_element_by_id('input_username')
input_password = driver.find_element_by_id('input_password')
input_checkcode = driver.find_element_by_id('input_checkcode')

input_username.send_keys('我的学号')
time.sleep(1)
input_password.send_keys('我的密码')
checkcode = input('验证码:')
input_checkcode.send_keys(checkcode)

loginButton = driver.find_element_by_id('loginButton')
loginButton.click()

time.sleep(1)

进入查看成绩的页面:

#进入所要查看的成绩页面
tree = etree.HTML(driver.page_source)
href = tree.xpath('//*[@id="125803405"]/a/@href')
for i in href:
    url = 'http://xsjwxt.sxau.edu.cn:7873' + i
driver.get(url)
time.sleep(1)

提取成绩(我使用了Xpath):

#提取成绩

#下拉成绩滚动条获取所有成绩
for i in range(200):
    js = 'var q = document.querySelector("#pager_scroll").scrollTop = 10000'
    driver.execute_script(js)
time.sleep(1)
tree = etree.HTML(driver.page_source)
mark = []
name = []
for i in range(1,64):
    td_name = tree.xpath('//*[@id="scoreintbody"]/tr[' + str(i) + ']/td[4]/text()')
    td_mark = tree.xpath('//*[@id="scoreintbody"]/tr[' + str(i) + ']/td[10]/text()')
    name.append(td_name)
    mark.append(td_mark)

链接数据库存入数据库:

#把数据存入数据库
#建立数据库连接
connection = pymysql.connect(host = 'localhost',
                             user = 'root',
                             password = '123456',
                             database = 'university_mark',
                             charset = 'utf8'
)
#增加数据
for i in range(len(name)):
    print(name[i])
    try:
        with connection.cursor() as cursor:
            sql = 'insert into my_university_mark (course_name,course_mark) values (%s,%s)'
            cursor.execute(sql,(name[i],mark[i]))
            #提交数据库事务
            connection.commit()
    except pymysql.DatabaseError:
        #数据库事务回滚
        connection.rollback()

connection.close()

这样就大功告成啦,给大家看看我的最高成绩和最低成绩(成绩的一部分基本都是专业课啦),自己都没有想到
在这里插入图片描述
在这里插入图片描述
这一排序很容易就看出来了,这最低的是马原还有自己不怎么喜欢的英语(今年终于把四级过了),这些课真的是现在想想但是课上在干嘛真的是历历在目哇,哈哈哈哈哈哈哈哈哈,最高的居然是自己选的网课99.450,卧槽,这离散看的我真爽,还记得当时学离散,几乎所有的公共课还有英语课都奉献了,然我没想到的是我邓总(我最喜欢的老师之一)的课我居然也有95的,哈哈哈哈哈哈哈哈哈,看着成绩真的是大学的回忆都浮现在眼前呀,看着高数我突然想起当年考高数我一个人坐在自习教室居然他喵的复习了7个多小时,还记得打把那个是和我下铺说自己快要死在自习室,他居然跟我说快回来宿舍吧,题肯定不难,我当时真想打他,哈哈哈哈哈哈哈哈,真的全是回忆哇!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章