【上海市】青年大学习自动提醒 代码脚本

目录

  • 写在前面
  • 1. 抓取网页
  • 2. 花名册
  • 3. 获取最新一期的青年大学习
  • 4. 爬取信息
  • 5. 主程序

写在前面

其实上海市和安徽省的有点相似,所以可以参考安徽省的脚本进行爬取

1. 抓取网页

这个平台的账号密码应该是团委那边才有的,所以班级团支书可以问问团委们,我这个账号密码是上海一个高校的团委给的。
【上海市】青年大学习自动提醒 代码脚本_第1张图片
登录进入就可以看到信息了,这里就不展示了。

因为这个页面展示的只有已经完成的名单,所以我们把这些数据抓取下来和本班同学的名单对应起来,这样才知道谁做了,谁没做。

2. 花名册

在根目录下创建一个文件夹,放置本班的花名册,注意一定要是全部人的!是目前这个班级的所有人,包括转专业的!!
【上海市】青年大学习自动提醒 代码脚本_第2张图片

这样我们就可以获取这个班级所有的名单了

  • 获取班级花名册的存放路径
def GetAllClassPath(path): 
    path_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            path_list.append(os.path.join(root, file))
    return path_list
  • 获取这个路径下的所有表格的信息
def GetClassInfo(class_path):
    wb = xlrd.open_workbook(class_path)  # 打开excel
    sh = wb.sheet_by_name('Sheet1')  # 按工作簿定位工作表
    s = str.split(class_path, "\\")
    class_name = s[-1]
    listTemp = {
     }
    for i in range(1, sh.nrows):
        listTemp[int(sh.row_values(i)[1])] = sh.row_values(i)[2]
    return class_name, listTemp
  • 获取学院的id
def GetNid(accessToken):  # 获取这个学院的id
    params = (
        ('accessToken', accessToken),
    )
    resp = requests.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/info',
                        headers=headers, params=params)
    info_json = resp.json()
    return info_json['result']['id']

3. 获取最新一期的青年大学习

  • 把参数传入其中即可!

就能获取到最新一期的青年大学习了。

def GetCourse(accessToken):  # 获取是哪一期的青年大学习
    params = (
        ('pageSize', '99'), # 页面数大小
        ('pageNum', '1'),  # 页面
        ('desc', 'startTime'),
        ('type', '\u7f51\u4e0a\u4e3b\u9898\u56e2\u8bfe'),  # 网上主题团课的unicode编码格式
        ('accessToken', accessToken), # 身份验证信息
    )
    resp = requests.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/course/list',
                        headers=headers, params=params)
    info_json = resp.json()
    return info_json['result']['list'][0]['id']

4. 爬取信息

这样就能获取名单了

def Spider(subOrg, all_name):
    finish_number = []
    session = requests.Session()
    resp = session.post('https://qcsh.h5yunban.com/youth-learning/cgi-bin/login', headers=headers, data=data)
    accessToken = resp.json()['result']['accessToken'] # 获取accessToken身份信息
    nid = GetNid(accessToken) # 获取id
    course = GetCourse(accessToken) # 获取是哪一期的青年大小学
    # subOrg = subOrg.encode('unicode-escape').decode()
    params = (
        ('pageSize', '80'),
        ('pageNum', '1'),
        ('desc', 'createTime'),
        ('nid', nid),  # 学校id
        ('subOrg', subOrg),  # 班级id
        ('course', course),  # 哪一期的青年大学习
        ('accessToken', accessToken),
    )
    info_rsp = session.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/course/records',
                           headers=headers, params=params) # 是否完成名单都在这个页面
    info_json = info_rsp.json()
    for k in info_json['result']['list']:
        finish_number.append(eval(k['cardNo']))
    if len(finish_number) == len(list(all_name.keys())):
        print("{}人全部完成了".format(len(finish_number)))
    else:
        for k in finish_number:
            try:
                if k not in list(all_name.keys()):
                    print("未完成名单:", all_name[k]) # 这里就能打印出名单了
            except Exception as e:
                print("学号为{}的人,不在名单中".format(k)) # 做了一个处理

没做提醒,懒了,需要的可私聊我,我可以在github上面加上这个邮件提醒,也欢迎有能力的同学自行处理。

5. 主程序

def StartSpider(all_class_path):
    paths = GetAllClassPath(all_class_path)  # 拿到路径
    for path in paths:
        sub_org, all_name = GetClassInfo(path)
        tmp = str.split(sub_org, '.')
        Spider(tmp[0], all_name)

具体完整代码在github上面,网站多变,建议在github上面点一个star,实时更新。

上海市青年大学习完整代码

你可能感兴趣的:(Python爬虫,python,开发语言,后端)