写在前面
笔者偶尔参加了高途课堂的辅导老师面试,当时也没做什么准备,被HR问懵逼了,对公司也没做什么了解,自己的职业规划也不清楚,过去的经历一问也三不知,临走还把自己简历要了回去,以前我绝对是不敢厚着脸皮做这种事情的,只能说入职半年有进步。我更像是去闹着玩的,实际上我就是闲的了,我一开始就知道自己不适合做这种有销售性质的工作,太久不参加面试想练练手,给我投递橄榄枝的这位HR就成了我的“工具人”,如果HR本R读到这篇文章,且让我给您道个歉,顺便说一句,对于您问我“工作环境是什么”这件事我颇有微词。这篇文章就让我尝试了解一下高途课堂吧,抓一下他们的课程和教师信息。
直接上代码
我觉得没有必要写面向对象,找到接口发起请求然后清洗数据就是了,一般来说,这种学不到新知识的代码是不记录的,我唯一学到的新知识点是修改workbook中sheet名称,2333.
#网页请求
import requests
#操作Excel
import openpyxl
#获取请求头
from fake_useragent import UserAgent
#进度条相关
from tqdm import tqdm
#生成随机请求头
headers = {
'User-Agent':UserAgent().random
}
#通过该api获取所有年级
url = 'https://api.gaotu100.com/course/v7/pc/filter'
#通过该api获取对应年级下的课程
class_url = 'https://api.gaotu100.com/course/v7/list'
#初始化工作表
wb = openpyxl.Workbook()
#默认sheet
ws_class = wb.active
#修改sheet名
ws_class.title = '课程信息'
#创建新的sheet
ws_teacher = wb.create_sheet('教师信息')
#为教师信息添加索引
ws_teacher.append(['姓名','类别','标签','介绍','照片'])
#为课程信息添加索引
index = ['年级','课程描述','课程类别','授课时间','教师','课时','课程价格','课程季节','售后服务']
ws_class.append(index)
#访问课程信息的参数,pagesize为获取的最大条目数量,往大了写
params = {
'type':1,
'subject':0,
'pagesize':'100',
}
#创建一个空列表存储已保存信息的教师名称,防止重复
#这种方式我觉得很low,但是openpyxl似乎没有去重模块
#调用pandas的话则比现在更加麻烦
teacher_names = []
#访问接口获取全部年级
res = requests.get(url=url,headers=headers)
#将response转换为json字典
data = res.json()
#清洗出年级信息,这是一个纯数字的列表
grade_lists = [i['grade_index'] for i in data['full_grade_list']]
#调用进度条,开始逐年级获取数据
for i in tqdm(range(len(grade_lists)),desc='正在下载:',ncols = 80):
#补充参数
params['grade'] = grade_lists[i]
#访问课程api
res = requests.get(url=class_url,headers = headers,params = params)
#获取课程列表
class_lists = res.json()['courses']
#分析每一门课
for item in class_lists:
#教师信息
teachers = item['lecturer_teacher_list']
#获取该课程下的所有教师信息
for teacher in teachers:
#教师名字
name = teacher['name']
#如果不在已保存列表才进行保存
if name not in teacher_names:
#类别
teacher_role = teacher['teacher_role']
#标签
teacher_tag = '无' if len(teacher['tag_list']) == 0 else ','.join(teacher['tag_list'])
#介绍
teacher_desc = teacher['teacher_desc']
#照片
teacher_picture = teacher['teacher_picture']
#为工作表添加一行数据
ws_teacher.append([name,teacher_role,teacher_tag,teacher_desc,teacher_picture])
#添加到已保存列表
teacher_names.append(name)
else:
#否则无视该信息
pass
#年级
grade_name = item['grade_name']
#授课时间(请无视该变量名。。)
introduction = item['introduction']
#课时
lecture_desc = item['lecture_desc']
#课程价格
price = '免费' if item['price'] == 0 else item['price']
#授课老师
teacher_name = ','.join(item['teacher_name_list'])
#售后服务
tip_list = ','.join(item['tip_list'])
#开课季节
season = item['season']
#课程描述
title = item['title']
#课程类别
subject_full_name = item['subject_full_name']
#课程信息添加一行数据
ws_class.append([grade_name,title,subject_full_name,introduction,teacher_name,lecture_desc,price,season,tip_list])
#保存工作表
wb.save('gaotu.xlsx')
写在后面
抓取完成后大致分析了一下,他们每节课一个半小时,差不多120块,贵一点的辅导班要2000靠上(难怪现在养孩子花销大,教育内卷真的太严重了)。其他的,我想了半天也想不到做这个还有什么意义,或许我可以仿照他们的官网做个网站出来?可是我的Django学的实在是太烂。至于把他们的课程抓取下来去卖盗版。。emm,这种事情还是不要做了。