• 使用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的同学的成绩
    '%(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('
    ')
        print('录入成功')
        sum= sum + 1 # 用于计算录入的同学总数
        print('共计录'+ str(sum) + '名同学')

    最后记得关闭文本文件

    file.close() #关闭文本文件

    最后经过简单的调试就ok啦

     

  • 相关阅读:
    JS对象—字符串总结(创建、属性、方法)
    vue过滤器(filter)
    mac快捷键大全
    mac版 sublime快捷键大全
    mysql数据库—表的查询排序操作大全
    emmet的html和css使用技巧大全
    Java多线程——ReentrantLock源码阅读
    你真的懂ThreadPoolExecutor线程池技术吗?看了源码你会有全新的认识
    Java多线程——AQS框架源码阅读
    Java多线程——ReentrantReadWriteLock源码阅读
  • 原文地址:https://www.cnblogs.com/mrkr/p/12131325.html
Copyright © 2020-2023  润新知