抓取高途课堂课程和教师信息


写在前面

笔者偶尔参加了高途课堂的辅导老师面试,当时也没做什么准备,被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,这种事情还是不要做了。