使用Python批量獲取學生期末考試成績


以下是我們學校對於期末考試成績臨時查詢的一個網站

 

 我突發奇想,可不可以通過爬蟲的方式批量獲取成績信息

於是說干就干

首先觀察網頁的請求

 

 

 

 

通過查看,我們可以很明顯看到網站查詢是通過對https://wxzx.cqyti.com/wxProject/ScoreQuery.do進行post請求而來的,令人驚訝的是網頁上要填寫的姓名和輔導員根本沒有post上去

這大大降低了我們爬取數據的難度!!!

我們可以看到,只post了三個數據 分別是

 

所以我們只需要通過循環生成xh所對應的學號 在帶上固定的“year”和“term”即可

首先載入所需要的庫

import requests
import re

定義請求的url和偽裝請求頭

#定義請求的url
url = 'https://wxzx.cqyti.com/wxProject/ScoreQuery.do'
#定義請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0'
}

接下來就是獲取數據了

首先我們需要打開一個文本文件用於寫入最終的結果

我們定義一個sum來提示我們已經錄入了多少

#post的數據
file = open("E:/成績.txt", "w")
sum = 0 #用於提示總共記錄了多少學生
for i in range(2019211600,2019211711):
    head = '學號為%d的同學的成績\n'%(i) #准備好同學的學號用於寫入

    print (head)                        #用於提醒正在記錄的同學的學號
    data = {'xh' : str(i) , 'year' :'2019-2020' , 'term':'1' } #定義data 將生成的學號放入

    #    發起post請求
    res = requests.post(url=url ,headers=headers,data =data)
    data_get = res.json()

接下來我們來分析一下所保存的data文件

 

 

我們可以很清楚的看到我們所需要的信息就在data_get中的"xskscj”內的 "scorename"與"value"中因此我們可以直接從data_get中切片選取

#寫入文本
    k = 0 #初始化k的值,用於接下來遍歷字典

    file.write(head) #將學號寫入文本
    for ii in data_get['xskscj']: #通過循環遍歷字典將成績和學號寫入文本

        kecheng = data_get['xskscj'][k]['scorename']
        fenshu = data_get['xskscj'][k]['value']
        k=k+1
        jieguo = kecheng + ':' + str(fenshu)+''
        print(jieguo)

        file.write(jieguo)
    file.write('\n')
    print('錄入成功')
    sum= sum + 1 # 用於計算錄入的同學總數
    print('共計錄'+ str(sum) + '名同學')

最后記得關閉文本文件

file.close() #關閉文本文件

最后經過簡單的調試就ok啦

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM