用python爬取课表并导入至ios日历

本文介绍如何利用Python爬虫技术从学校教务网站抓取课表信息,并将其转换成ics格式,导入到iOS日历中。教程以selenium和requests模块为例,解析网页内容并构建ics文件格式,包括BEGIN:VCALENDAR、BEGIN:VEVENT等关键字段。最终生成的ics文件可以通过iCloud同步到所有Apple设备。
摘要由CSDN通过智能技术生成

由于学校没有课表接口,不能使用超级课程表之类的课表软件,并且手上有块apple watch,便想将课表信息导入到日历中,每天就可以优雅的看到课程信息了。在这里插入图片描述
ok,本教程需要一定的爬虫基础,因为各个学校的教务网站不同,所以页面情况也不同,需要根据实际情况做出微调,这里就以我学校的教务网站为例。

需要使用到的python模块
selenium
requests
pandas

1.首先使用selenium或者requests获取到课程表的页面,最好使用f12开发者工具获取到返回数据的真实链接,如:在这里插入图片描述
在headers中可以看到真实的返回链接,打开后为一个干净的页面在这里插入图片描述
使用requests或者selenium访问此链接,如果是requests就使用.text方法将网页内容保存,selenium则使用.page_source保存,然后使用pandas的read_html方法读取网页内容。在这里插入图片描述

在经过处理过后的数据里,需要有课程开始时间,日期,课程名。

重点!

以iOS为例(手上没有别的设备,所以不清楚别的机器是否能用,理论上可以),ics文件的格式为在这里插入图片描述
蓝色框为头内容,从macos中导出的ics文件中有这个头内容,实际不需要也可以,
但是这个BEGIN:VCALENDAR需要写入,表示为日程的开始,并且在文件的最后也需要一个END:VCALENDAR来结束。

以下为必要字段:

BEGIN:VEVENT #代表事件的开始
CREATED:20201011T104613Z #日程创建时间,不重要,格式正确就行,直接复制也可以
UID:DF2CC500-4F03-4887-A9A3-9757803931E3 #UID为日程的标识符,不可重复,无限制,使用random随机不重复即可
DTEND;TZID=Asia/Shanghai:20190424T090000 #为日程结束时间,解读为(2019年4月24日9点00分00秒)
TRANSP:OPAQUE #未知含义 照抄
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC #未知含义 照抄
SUMMARY: #为日程内容
LAST-MODIFIED:20201011T104619Z #不重要 照抄
DTSTAMP:20201012T104622Z #不重要 照抄
DTSTART;TZID=Asia/Shanghai:20201027T090000 #日程开始时间,与DTEND相呼应,格式相同
SEQUENCE:1 #未知含义,照抄
END:VEVENT #事件结束

到这里一个基本的日程已经创建好了,多个日程就一直重复写入,修改时间即可,UID不可重复,否则会覆盖上一个相同UID的事件
如果需要加上提醒,比如:
在这里插入图片描述

在END:VEVENT 前加上

BEGIN:VALARM #代表创建提醒开始
X-WR-ALARMUID:F03864BD-41F4-40EC-BF20-1E4E7930ED92 #未知含义 照抄
UID: #注意!虽然在同一个日程内,但是UID也不能相同
TRIGGER:-PT30M #这个就是需要提醒的时间 -代表提前,M为分钟,PT保留
ATTACH;VALUE=URI:Chord #照抄
ACTION:AUDIO #照抄
END:VALARM #最后结束提醒

所以最后的格式为
BEGIN:VCALENDAR
BEGIN:VEVENT
~~~~~~~
~~~~~~~
END:VEVENT
END:VCALENDAR

如需要提醒

BEGIN:VCALENDAR
BEGIN:VEVENT
~~~~~~~
~~~~~~~
BEGIN:VALARM
~~~~~~~
~~~~~~~
END:VALARM
END:VEVENT
END:VCALENDAR

写入txt文件,修改后缀为ics,如果是苹果全家桶的同学,在电脑上双击打开ics文件就会自动导入日历app,然后会通过iCloud同步到你所有的apple设备上。window同学自行尝试,手上没有设备暂时测试不了。

附上写的垃圾代码

import time
import pandas as pd
import requests
def timeplus(time):    #垃圾算法 让上课时间加上40分钟 返回下课时间
    time_1=time[:2]
    time_2=time[2:]
    if int(time_2)+40>=60:
        time_1=str(int(time_1)+1)
        if 
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值