使用python的requests库批量爬取四六级成绩!!!亲测可用

本文基于requests库向目标网站发送get请求并爬取四六级成绩。

环境搭建

解释器版本:3.9.13

所需第三方库:requestspandas

数据文件:Excel文件

Excel文件需按顺序包含以下图片中的字段
请添加图片描述

源代码

from time import sleep
import requests
import pandas as pd

info_name = input('请输入学生信息表的文件名(含后缀名):')  # 输入文件名
data = pd.read_excel(f'{info_name}')  # 读取文件

# 1 四级,2 六级
sel = [1, 2]  # 选择查询四级还是六级

# 添加几个字段,用于存储爬取到的信息
# 注意 从2(索引从0开始)开始,因为我的表中前面已经有2个字段,这里需要根据自己的信息表调整
data.insert(2, '准考证号', '')
data.insert(3, '四级成绩', '')
data.insert(4, '六级成绩', '')
data.insert(5, '听力部分', '')
data.insert(6, '阅读部分', '')
data.insert(7, '写作部分', '')

user_agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36 Edg/124.0.0.0'
cookie = 'HMF_CI=5b52030a4a6043c6a5c9718deb1c1df4eef33feff9cf7f6a6b224c6e032d2033a1111911a162c1fa476327bc3942674e863429706fa21ea02d768573d13a119432; community=Home; language=1; HMY_JC=c7854a57df0daad9e9b495ce4536f5381e084f0371abb16fb680c4e0514bee5c7b,; Hm_lvt_dc1d69ab90346d48ee02f18510292577=1739683854,1740545495; HMACCOUNT=B8621ECFA636714D; _abfpc=c2a5e3ac1773ec741ad3533baced8035c4618d9c_2.0; cna=23693ddbda211f4bf7a8f0ecd7cff753; Hm_lpvt_dc1d69ab90346d48ee02f18510292577=1740545513; HBB_HC=e64a5461ef9fc586f1ba30c426a9d79cc96b9dfeb2bdc6336df761e4e6db9280d7c4d664e036daa383c3b0cbe7610b83ad; HOY_TR=GCRDZUEWVOPNMQSX,A491285B0367CDEF,Pfueavsbnodghwjl,0'

headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, br, zstd',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Origin': 'https://cjcx.neea.edu.cn',
    'Referer': 'https://cjcx.neea.edu.cn/',
    'Cookie': cookie,
    'User-Agent': user_agent,
}

# 由于是批量,用一个列表存储所有考生的参数
params_list = []
for i in range(len(data)):
    params_list.append({
        'km': '', # 考试科目,默认为空
        'xm': data.iloc[i, 0], # 姓名
        'no': data.iloc[i, 1], # 准考证号
        'source': 'mb',
    })

# 四六级成绩查询网址
'''
https://cachecloud.neea.cn/api/latest/results/cet?km=1&xm=%E5%91%A8%E5%85%83%E5%BD%AC&no=fgdfbsfvs&source=pc
'''
url = 'https://cachecloud.neea.cn/api/latest/results/cet'

# 遍历每一个考生的数据
for i in range(len(data)):
    # requests.get(url,params,**args) **args可传入请求头headers
    print("开始爬取%s的成绩......" % params_list[i]['xm'])
    # 遍历四级或六级
    for o in sel: 
        params_list[i]['km'] = o
        km = ['四级' if params_list[i]['km'] == 1 else '六级'][0]
        response = requests.get(url, headers=headers, params=params_list[i], )

        # 判断是否请求成功
        if response.status_code == 200:
            # 由于response是json格式,可用response.json()接受
            json_data = response.json()
            if json_data['code'] == 0:
                # 开始存储成绩信息
                data.iloc[i, 2] = json_data['zkzh']  # 准考证号
                data.iloc[i, [3 if params_list[i]['km'] == 1 else 4]] = json_data['score']  # 四级或六级成绩
                data.iloc[i, 5] = json_data['sco_lc']  # 听力部分
                data.iloc[i, 6] = json_data['sco_rd']  # 阅读部分
                data.iloc[i, 7] = json_data['sco_wt']  # 写作部分
                info = f"{i+1}{params_list[i]['xm']}查询成功," + km + f"成绩为:{json_data['score']}"
                print(info)
            else:
                print(f"{i + 1}{params_list[i]['xm']}未参加" + km + "考试...或是信息有误") 
        else:
            print('请求失败!')

        sleep(0.5) 

    print("***")
    sleep(1) # 休息1秒,防止爬取过快IP被封

print("已全部查询完毕,正在导出到excel......")

insert = '四六级成绩'

grade_name = info_name[:-5] + insert + info_name[-5:]

# 导出至excel文件中
data.to_excel(grade_name)
print("导出完毕.")

注意事项

代码中第21行的cookie的值由于具有时效性,过一段时间可能就会失效。若代码运行报错,可以试试改为自己的浏览器所对应的cookie。对于如何查找cookie,可以看看你要的六级成绩批量查询,它来啦…_改代码提前查成绩六级-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Corone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值