起因
易班在 21 年九月份左右推出了新版,最大的特点就是 UI 发生了很大的变化,然而一番体验下来,体验难以言喻。最近易班的双指数开始稳定更新,于是乎又需要每月公布学院活跃指数和班级活跃指数,学院的还好,班级的可就麻烦了。我校二十二个学院上千个班级,虽然易班后台提供了导出功能,但却因为数据量太大直接 504 超时了。找了客服客服也是一直让我换浏览器、清缓存、清 Cookie,照做后还要我录视频,无奈之下我也录了视频,最后直接让我给他们账号密码,我就直接中断咨询了。
自己解决
由于明确是数据量太大引起的,而易班后台支持筛选学院后再进行导出,测试后发现是可行的,因为数据量减少了。于是乎就想着用 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)
|
于是乎,今后只要每个月运行一次这个脚本就可以收工了,美哉。
