四川大学全课表下载程序(python爬虫)

该博客介绍了如何使用Python的requests和openpyxl库爬取并处理四川大学的全课表数据。作者通过Chrome抓包分析接口,确定了学期代号、学院代号、页数和每页课程数等关键参数,并编写了查询和数据处理函数,将结果保存到Excel文件。文章提醒注意请求频率控制,提供了完整代码的GitHub链接。
摘要由CSDN通过智能技术生成

四川大学全课表下载程序(python爬虫)

技术栈(requests,openpyxl)

  1. 先用chrome抓包分析一下接口 url链接
    打开网页是这个样子
    在这里插入图片描述我们选一个学院抓包试试在这里插入图片描述
    看看请求内容在这里插入图片描述
    我们可以看到第一个zxjxjhh是学期的号码,
    第二个kkxs现在是什么还不知道,我们搜索一下

在这里插入图片描述
网页HTML里面有304刚好后面的value是计算机学院,我们知道这个kkxs是学院的代号
后面的pageNum和pageSize我们先猜一下是当前页数和一次看到的课程数(当前处在第一页)
我们把网页往下划,这时第二页显示出来了同时第二个请求也出来了在这里插入图片描述
打开第二个请求

在这里插入图片描述
我们可以看到除了pageNum变成了2其他的都没有变
到这里请求的内容我们大致搞清了:构造要请求的学期代号,从网页的源码里提取学院的代号(这里可以先把网页源码保存再用正则表达式提取),pageNum从1递增!(注意,这里有一个问题,那就是pageNum的上限在哪里,也就是结束一个学院请求的判断条件),固定的pageSize为30

现在开始查看返回的内容

在这里插入图片描述
可以看到返回的格式为json,在这里我们就可以看到有一个totalCount,去网页里算了一下总共的课程数就是120门课。records是每门课的集合列表。到现在一切都好办了:pageNum的最大值是totalCount/pageSize+1(想一想这里为什么会加1),请求直到pageNum<=maxPageNum
为止。分析全部完成接下来开始码了

先定义一个获取每个学院课程数据的函数query

def query(kkxs,terms):
    '''
    :param kkxs:学院编号
    :param terms: 学期号,默认2018-2019-2-1,terms格式为2018-2019-2-1
    :return:每个学院返回的课表数据
    '''
    time.sleep(5)       #防止请求频率过高
    datalist = []
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
    }
    url = "http://zhjwjs.scu.edu.cn/teacher/personalSenate/giveLessonInfo/thisSemesterClassSchedule/getCourseArragementPublic"
    postdata = {
   
        "zxjxjhh":terms,  #学期,默认是18-19第二学期
        "kch": "",  # 课程号
        "kcm": "",  # 课程名
        "js": "",  # 教师
        "kkxs": kkxs,  # 开课院系
        "skxq": "",  # 上课星期
        "skjc": "",  # 上课节次
        "xq": "",  # 校区
        "jxl": "",  # 教学楼
        "jas": "",  # 教室
        "pageNum": "1",  # 显示的页数
        "pageSize": "30",  # 每页的课程数
        "kclb": 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值