栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

湖南现代物流职业技术学院校历&课表

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap

湖南现代物流职业技术学院校历&课表

因为我们学校在这学期改了课表系统,着实看不懂。。。。就想搞个校历和课表联合的加强版校历
设想下,可以不可以只要你店下校历上的今天的日期就会出现今天的课表,岂不是非常醒目

比如:

接下来我们来实现下
先来爬取下所有的课表
获取课表的链接:

http://jwglxt.hmlc.edu.cn/jwglxt/kbcx/xskbcx_cxXskbcxIndex.html?gnmkdm=N2151&layout=default&su=改为您的学号

通过抓包发现有课表数据的链接是:

http://jwglxt.hmlc.edu.cn/jwglxt/kbcx/xskbcx_cxXsgrkb.html?gnmkdm=N2151&su=改为您的学号


下面是课表爬取代码实现

# 爬取课表
def get_class_schedule():
    # 创建一个options的对象
    opt = Options()
    # 添加浏览器配置信息headless=无头
    opt.add_argument('--headless')
    # 配置disable-gpu可以让速度快一点
    opt.add_argument('--disable-gpu')

    url = 'http://jwglxt.hmlc.edu.cn/jwglxt/kbcx/xskbcx_cxXsgrkb.html?gnmkdm=N2151&su=改为您的学号'

    web = Chrome(options=opt)
    web.get("http://jwglxt.hmlc.edu.cn/jwglxt/xtgl/login_slogin.html")
    web.find_element_by_xpath('//*[@id="yhm"]').send_keys(input("请输入您的账号:"))
    web.find_element_by_xpath('//*[@id="mm"]').send_keys(input("请输入您的密码:"))
    print('请稍等...')
    sleep(0.5)
    web.find_element_by_xpath('//*[@id="dl"]').click()
    # 必须休息1秒
    sleep(1)

    # 获取cookies
    cookie_dic = {dic['name']: dic['value'] for dic in web.get_cookies()}

    header = {
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
        'Referer': 'http://jwglxt.hmlc.edu.cn/jwglxt/kbcx/xskbcx_cxXskbcxIndex.html?gnmkdm=N2151&layout=default&su=改为您的学号',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }

    data = {
        'xnm': '2021',
        'xqm': '3',
        'kzlx': 'ck',
        '_search': False,
        'nd': '1633358955002',
        'queryModel.showCount': '15',
        'queryModel.currentPage': '1',
        'queryModel.sortName': '',
        'queryModel.sortOrder': 'asc',
        'time': '0'
    }
    param = {
        'doType': 'query',
        'gnmkdm': 'N2151',
        'su': '您的学号',
    }

    resp = requests.post(url, headers=header, data=data, params=param, cookies=cookie_dic)
    for i in resp.json()['kbList']:
        week = i['xqjmc']  # 星期
        lesson = i['kcmc']  # 课名
        classroom = i['cdmc']  # 教室
        cycles = i['zcd'].replace('周', '').split('-')
        cycle = [w for w in range(int(cycles[0]), int(cycles[-1]) + 1)]  # 周次
        section = i['jc']  # 上数
        teacher = i['xm']  # 教师
        class_grade = i['jxbzc']  # 班级
        row_coordinate = week[-1] # 行坐标,cycle中的每个元素都是列坐标
        # 需要显示的备注
        message ='教室:'+classroom+'n'+'课名:'+lesson+'n'+'课节:'+section+'n'+'老师:'+teacher+'n'+'班级:'+class_grade
        #       行坐标,列坐标,备注信息
        yield (row_coordinate,cycle,message)

我们拥有了课表信息了,下面实现和校历对接。
校历是我直接复制的,不是通过代码实现的,所以如果需要使用本人的代码,需要下载此文件
因为我没有做绝对路径的处理,需要把代码和文件放在一个文件夹下

我用阿里云盘分享了「校历.XLSX」,你可以不限速下载
复制这段内容打开「阿里云盘」App 即可获取
链接:https://www.aliyundrive.com/s/TcFXhDR6pza

代码实现:

from openpyxl import load_workbook
from openpyxl.comments import Comment
#                           字体,填充,宽高
from openpyxl.styles import Font,PatternFill,Alignment
# 获取需要添加备注的坐标


def get_coordinates(row_coordinate, cycle):
    # 获取星期
    for i in wb['A4':'A10']:
        # 取行坐标
        if row_coordinate == i[0].value:
            if len(i[0].coordinate) == 3:
                row_c = i[0].coordinate[-2:]
                wb.row_dimensions[int(row_c)].height = 218.4
            else:
                row_c = i[0].coordinate[-1]
                wb.row_dimensions[int(row_c)].height = 218.4
    # 获取周次
    coordinates = []  # 拼接行列坐标
    for j in wb['3']:
        for c in cycle:    # 每周都有不同的列坐标, 获取所有的列坐标
            if c == j.value:
                coordinates.append(j.coordinate[0]+row_c)
    return coordinates


# 给校历添加备注信息
def set_school_calendar(coordinates, message):
    comment = Comment(message, author='日出林间')  # 设置备注
    comment.width = 180
    comment.height = 120
    alignment = Alignment(horizontal='left',vertical='top',wrap_text=True)  # 设置宽和高
    green_fill = PatternFill(fill_type='solid', fgColor="A9D08E")  # 设置背景颜色
    font = Font('宋体', size=14, strike=False, color='9c0006')  # 设置字体样式
    for coordinate in coordinates:
        if wb[coordinate].value !=None:
            wb[coordinate].comment = comment    # 设置备注
            wb[coordinate].alignment = alignment    # 设置左对齐
            wb[coordinate].fill = green_fill    # 设置背景颜色
            wb[coordinate].font = font  # 设置字体颜色

if __name__ == '__main__':
    for i in get_class_schedule():
        coordinates = get_coordinates(i[0],i[1])
        set_school_calendar(coordinates, i[-1])
    ws.save('校历.xlsx')
    print('完成,文件名是:校历')

新手发布文章,如有错误请求指教!!!
另外如果有其他学校需要并且喜欢这样的方式查看课表也可以帮忙呦~~
微信小程序和网页版本正在开发中…

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号