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個多小時,還記得打把那個是和我下鋪說自己快要死在自習室,他居然跟我說快回來宿舍吧,題肯定不難,我當時真想打他,哈哈哈哈哈哈哈哈,真的全是回憶哇!

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