您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python怎么采集大學教務系統成績單”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python怎么采集大學教務系統成績單”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
我們首先確定我們的目標網址,對我們需要獲取的數據。
我們要把每一行的數據獲取下來,我們接下來用到開發者工具。我們看成績是在什么位置。是不是在網頁源代碼中。接下來,我們發送請求,獲取網頁源代碼。
每個學校教務系統不一樣,但是,原理都是一樣的,我們通過抓包分析,看到,我們學校把成績放到了一個數據包里面,一個學期一個數據包。
那么,接下來就簡單了,我們只需要請求數據,當然,我們肯定要加上cookies,畢竟里面包含了我們的登錄信息。
我們看看前面代碼是怎么寫的。
semesters = ["44", "45", "46", "66", "126", ] for Semester in semesters: url = f'http://jwxt.aqnu.edu.cn/student/for-std/grade/sheet/info/73127?semester={Semester}' headers = { 'Cookie': 'cookies', } res = requests.get(url, headers=headers) print(url, res)
我們這里直接多頁遍歷,我們學校只做了cookies檢查,對請求頭沒有要求。
這段代碼首先定義了一個包含多個元素的列表 semesters
,其中每個元素表示一個學期的信息。然后,使用 for
循環遍歷列表中的每個元素,并使用 requests.get()
函數向指定的 URL 發送 GET 請求。在請求中,我們設置了一些請求頭信息,以確保我們能夠正確地解析 URL 并獲取正確的響應。最后,我們打印了 URL、響應和響應中的內容。
id2semesters = res.json()['id2semesters'] semester = id2semesters[f'{Semester}']['nameZh'] semesterId2studentGrades = res.json()['semesterId2studentGrades'][f'{Semester}'] for semesterId2studentGrade in semesterId2studentGrades: course = semesterId2studentGrade['course'] # 課程 course_nameZh = course['nameZh'] # 課程名稱 credits = course['credits'] # 課程學分 try: courseProperty = semesterId2studentGrade['courseProperty'] courseProperty_name = courseProperty['name'] except TypeError: courseProperty_name = "NOLL" gp = semesterId2studentGrade['gp'] # 績點 gaGrade = semesterId2studentGrade['gaGrade'] # 成績 gradeDetails = semesterId2studentGrade['gradeDetail'] # 明細原文 gradeDetail = re.findall('data-typeid=.*?>(.*?)</span>', gradeDetails)
這段代碼首先從 JSON 響應中獲取了學期和學生的績點信息,并將其存儲在變量 semester
和 semesterId2studentGrades
中。然后,使用 for
循環遍歷 semesterId2studentGrades
中的每個元素,并使用 course
屬性獲取該學期的課程信息。接著,使用 course_nameZh
屬性獲取課程名稱,使用 credits
屬性獲取課程學分,使用 courseProperty_name
屬性獲取課程屬性名稱,如果不存在則返回 "NOLL"。最后,使用 gp
屬性獲取績點,使用 gaGrade
屬性獲取成績,使用 gradeDetail
屬性獲取明細原文,使用 gradeDetail
屬性獲取明細原文中的數據類型標識符。
這里就是json取值,沒有什么難度,只要寫好這些,就可以獲取到我們想的內容,我們看看效果。
保存數據就簡單了,我們已經練習了很多次。
f = open('個人成績單.csv', mode='a', encoding='utf-8_sig', newline='') csv_writer = csv.DictWriter(f, fieldnames=['學期','課程名稱', '課程學分', '課程類型', '成績', '學分績點', '成績明細'])
這段代碼首先打開一個名為 personal_scores.csv
的文件,并指定使用 a
模式打開文件。然后,使用 csv.DictWriter()
函數創建一個 CSV 寫入器,并指定要寫入的列名。在這個例子中,我們指定了 fieldnames
參數,它包含了我們要寫入的列名。
接下來,我們使用 csv_writer.writeheader()
方法寫入列名。這個方法會將列名寫入文件的第一行。
最后,我們使用 csv_writer.writerow()
方法寫入數據。在這個例子中,我們寫入了一個包含學期、課程名稱、課程學分、課程類型、成績、學分績點和成績明細的列表。
接下來就是寫入字典,保存下來。
dit = { '學期': semester, '課程名稱': course_nameZh, '課程學分': credits, '課程類型': courseProperty_name, '成績': gaGrade, '學分績點': gp, '成績明細': gradeDetail, } csv_writer.writerow(dit)
這段代碼使用 csv_writer.writerow()
方法將 dit
字典寫入 CSV 文件中。fieldnames
參數指定了要寫入的列名。在這個例子中,我們指定了 ['學期','課程名稱', '課程學分', '課程類型', '成績', '學分績點', '成績明細']。
讀到這里,這篇“Python怎么采集大學教務系統成績單”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。