使用Python脚本批量查询四六级成绩
今天(2025年8月16日)四六级成绩出了,试手写了个批量查询成绩的代码。
代码如下:
import json
import requests
import random
import time
import pandas as pd
from urllib.parse import quote
# 数据层
student_data = [
["测试姓名1", "身份证号"],
]
headers = {
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"cache-control": "no-cache",
"dnt": "1",
"origin": "https://cjcx.neea.edu.cn",
"pragma": "no-cache",
"priority": "u=1, i",
"referer": "https://cachecloud.neea.cn/",
"sec-ch-ua": "\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"sec-fetch-storage-access": "active",
"sec-gpc": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0"
}
# 查询代码
def query_score(name, id_number):
try:
encoded_name = quote(name)
# 四级
url = f"https://cachecloud.neea.cn/latest/results/cet?km=1&xm={encoded_name}&no={id_number}&source=pc"
# 六级
# url = f"https://cachecloud.neea.cn/latest/results/cet?km=1&xm={encoded_name}&no={id_number}&source=pc"
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
else:
print(f"Failed to query {name}. Status code: {response.status_code}")
return None
except requests.exceptions.RequestException as e:
print(f"An error occurred while querying {name}: {e}")
return None
def main():
all_student_scores = []
for student in student_data:
name = student[0]
id_number = student[1]
print(f"正在查询学生 {name} 的成绩...")
score_data = query_score(name, id_number)
if score_data:
score_data['xm'] = name
all_student_scores.append(score_data)
print(f"已获取 {name} 的成绩:{score_data.get('score', '未知')}")
# 随机延迟,防止检测
time.sleep(random.uniform(0.5, 2.0))
# 检查、导出
if all_student_scores:
df = pd.DataFrame(all_student_scores)
columns_to_keep = ['xm', 'sfz', 'zkzh', 'score', 'sco_lc', 'sco_rd', 'sco_wt', 'xx', 'ky_sco', 'ky_zkz','cjd', 'code', 'id']
chinese_headers = ['姓名', '身份证号', '准考证号', '总分', '听力分数', '阅读分数', '写作和翻译分数', '所属学校', '口语成绩(-- 表示未参加口语考试)', '口语准考证号(-- 表示未参加口语考试)','科目代码(1代表CET-4,2代表CET-6)', '返回代码(0代表正常查询,404代表没有参加本次考试/姓名或准考证号错误)', '成绩报告单编号']
df = df[columns_to_keep]
df.columns = chinese_headers
file_name = "student_cet_scores.xlsx"
try:
df.to_excel(file_name, index=False)
print(f"\n所有学生的成绩已成功保存到 {file_name}")
except Exception as e:
print(f"\n保存Excel文件时出错: {e}")
else:
print("\n未获取到任何学生的成绩数据,无法保存到Excel文件。")
if __name__ == "__main__":
main()
运行后会以此查询,并在同级目录下生成student_cet_scores.xlsx
文件,文件内容即为查询结果。