其实上海市和安徽省的有点相似,所以可以参考安徽省的脚本进行爬取
这个平台的账号密码应该是团委那边才有的,所以班级团支书可以问问团委们,我这个账号密码是上海一个高校的团委给的。
登录进入就可以看到信息了,这里就不展示了。
因为这个页面展示的只有已经完成的名单,所以我们把这些数据抓取下来和本班同学的名单对应起来,这样才知道谁做了,谁没做。
在根目录下创建一个文件夹,放置本班的花名册,注意一定要是全部人的!是目前这个班级的所有人,包括转专业的!!
这样我们就可以获取这个班级所有的名单了
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
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']
就能获取到最新一期的青年大学习了。
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']
这样就能获取名单了
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上面加上这个邮件提醒,也欢迎有能力的同学自行处理。
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,实时更新。
上海市青年大学习完整代码