关于用 Python 帮我整理易班班级活跃指数这件事

起因

易班在 21 年九月份左右推出了新版,最大的特点就是 UI 发生了很大的变化,然而一番体验下来,体验难以言喻。最近易班的双指数开始稳定更新,于是乎又需要每月公布学院活跃指数和班级活跃指数,学院的还好,班级的可就麻烦了。我校二十二个学院上千个班级,虽然易班后台提供了导出功能,但却因为数据量太大直接 504 超时了。找了客服客服也是一直让我换浏览器、清缓存、清 Cookie,照做后还要我录视频,无奈之下我也录了视频,最后直接让我给他们账号密码,我就直接中断咨询了。

image-20220529210935860 image-20220529210956643 image-20220529211022613 image-20220529211041255 image-20220529211113441

自己解决

由于明确是数据量太大引起的,而易班后台支持筛选学院后再进行导出,测试后发现是可行的,因为数据量减少了。于是乎就想着用 python 帮我筛选 22 次,下载 22 个 excel,然后再帮我合并。

首先要解决的是登录问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 登录
s = requests.Session()
url = "隐藏下url防止出事"
formData = {
'account': "",
# 此处填写密码
'password': ""
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/55.0.2883.87 Safari/537.36'
}
login_result = s.post(url, data=formData, headers=headers)

很意外地顺利,直接登录成功。

然后是下载文件

1
2
3
4
5
6
7
# 下载所有学院的数据
for c in colleges:
figure_result = s.get("隐藏下url防止出事")
with open('files/' + c['name'] + '.xlsx', 'wb') as f:
f.write(figure_result.content)
f.close()
print(c['name'] + '已下载')

也很意外地成功了

最后是合并所有 excel 表格

1
2
3
4
5
6
7
8
# 合并数据
all_data = []
for i in glob.glob(source_dir + "*.*"):
all_data.append(pd.read_excel(i))
numbers = len(all_data)
names = "(%d年%d月)班级活跃指数" % (year, month)
writer = pd.ExcelWriter(result_dir + names + ".xlsx")
pd.concat(all_data).to_excel(writer, 'Sheet1', index=False)

于是乎,今后只要每个月运行一次这个脚本就可以收工了,美哉。