使用Python脚本批量查询四六级成绩
计算机技术 Python 7952

今天(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 文件,文件内容即为查询结果。