爬虫+Web | 同济大学 1 系统通知公告备份与提醒
缘起
同济大学 1 系统 是同济大学的教学信息管理平台,发布教务教学的通知公告。发布的通知较为重要,但是过了一段时间便会下架,不给人回看的可能。
在计科导的网站大作业编写的网站没有用户的登录注册等功能,如果因为作业时间仓促而明文存储密码,没什么意义。因此在寒假编写一个生产上较为安全的用户系统。
文章将按模块来展开,梳理网站实现的大部分细节。文章比较长,读者可以选感兴趣的部分阅读。
网站在:同济大学通知公告备份站。
Github 仓库在:Github
爬虫——数据获取统一身份认证
获取数据需要通过的第一道关卡是统一身份认证,因为如果不登录,是获取不了任何内容的,会返回 401 错误。上图是老的身份认证系统,现在不需要手动点击验证码、只需要点击登录按钮,相对还容易些,不然,如何通过验证码也是个问题。
在用户输入了用户名和密码后,发生了什么事情呢?
初步认识在 Network 面板中,注意到 1 系统会向 https://iam.tongji.edu.cn/idp/authcenter/ActionAuthChain?... 发送 URL编码后的 如下内容:
1234567j_userna ...
同济统一身份认证登录 1 系统
需求为 1 系统的通知公告内容存档。参见 Github 项目。然而,请求内容需要 Cookies,列表如下
1234{ "JSESSIONID": "xxx", "sessionid": "yyy",}
否则会提示 session 不存在。那么,如何获取这两个 Cookies 就是我们这篇文章的主线。
过程访问: https://1.tongji.edu.cn首先,访问 https://1.tongji.edu.cn,因为之前没有登录过,因此会被重定向到登录界面 https://iam.tongji.edu.cn。
然而,这其中更细节的过程是什么?
使用 curl 进行测试。
12345678# -i 的意思是展示请求头curl -i https://1.tongji.edu.cn/ssologin# 得到HTTP/1.1 200 OKDate: Sat, 18 Jan 2025 05:50:45 GMTContent-Type: text/htmlContent-Leng ...
同济的 IP 范围
需求想要让我的网站限制只有同济范围内才能访问,如何实现呢?
分析需要知道同济的 IP 段,有几种方法:
学校官网等资料
ping foo.tongji.edu.cn,一个一个排查
nslookup 等其他工具
在线工具
方案最终发现,ipinfo.io 有很好的查询方案。
首先,已经确定了同济的 IP 范围在 202.120.0.0/16,然而,真的同济能这么阔绰,有这么多 IP 拿在手中吗?
不是的。
经过排查,https://ipinfo.io/ips/202.120.0.0/16,发现同济的 IP 范围是:
202.120.163.0/24
202.120.164.0/24
202.120.166.0/24
202.120.188.0/24
202.120.189.0/24
202.120.190.0/24
202.120.191.0/24
这些是同济域名对应的 IP 段,可能不全。
但是要注意,使用学校的 VPN 之后,IP 块是 111.187.0.0/17,虽然也是上海教育网,但是和学校网站的 I ...
subconverter 后台服务运行
需求希望使用自定义规则。subconverter 的 release 版本的请求头有一些字段,导致其被一些机场网络服务商屏蔽(参见之前的文章),自己编译的版本每次需要手动打开运行,点击 Clash 进行节点更新,太麻烦。因此使用 Windows 服务的形式来让 exe 后台运行。
步骤下载nssm 是一个开源工具,用于将任何 exe 安装为 Windows 服务。下载地址https://nssm.cc/download,国内访问有点慢。
服务注册把 exe 注册为服务:
1nssm install YourServiceName "C:\path\to\your_program.exe"
注意:如果文件名包含空格,需要用双引号括起来。否则执行 net start 会报错:发生特定服务错误:3。请键入 NET HELPMSG 3547。如果已经这样做了,可以通过 nssm edit <service_name> 来修改路径。
启动1net start <service_name>
结束这样应该就可以让节点的定时更新起作用了。当然,还有可 ...
服务器常见问题
概述本文总结了在服务器使用上常见的问题。
MySQL 占用内存过高参见 https://stackoverflow.com/questions/10676753/reducing-memory-consumption-of-mysql-on-ubuntuaws-micro-instance。
具体做法
12[mysqld]performance_schema = 0
可以 cut off 近 20% 的内存占用,我的服务器一共约 900MB 的内存,也就是释放了约 200MB 的空间出来。
之所以发现这个问题,是因为 2025-01-01 早上起来发现服务器登录不上去,当天凌晨的 CPU 占用率 100%。用 top 命令发现内存只剩下 5% 左右,很容易溢出。
还有一个方案是
12345key_buffer = 8M max_connections = 30 # Limit connectionsquery_cache_size = 8M # try 4m if not enough query_cache_limit ...
定期总结(2024-12)|Letting Go
缘由好久没有动笔写过日记了,这学期的事务繁忙,居然每天抽不出二十分钟写写日记,想来荒唐,居然要用微信语音记录日常。。上午刚刚考完 oop,除了几个知识点没复习到之外,我认为发挥的还是不错的,比高程好。再加上上完了这学期的最后一节课——组合数学(不管是组合数学的最后一节还是所有课程的最后一节),正式宣告了考试周自习时光的开始,有些小激动。之前为了复习 oop 和完成组合数学的作业,熬了两个大夜,两三点钟才睡觉,第二天七八点钟就要起来。我觉得,我先前保持的健康作息,可能就是为了这种时间段预备的吧。
单向奔赴既然现在有时间了,就可以静下心来好好写点自己的近况。有意思的是,从大一下学期开始,每学期我都会喜欢上一个女生,找到她们的闪光点。然后,不管是线下要微信还是线上要微信,之后开始尬聊。第一段呢,是因为我干涉对方的生活太多,可能她心里默念的是:你计拔谁啊?整天时间我?所以我最后也不去找她了。意料之中,从八月小学期结束之后,她也没再来找过我,确实对我一点感觉都没有。
硬盘里的女神下了又删,去年夏天后就没聊过天。——《东京不太热》
这句歌词真是应景啊。
而这学期,大概是十月中旬吧(因为还没具体 ...
更新网站上课表的步骤
更新时间课表更新的时间有三个阶段:
上学期 16 周左右的第一轮选课前夕;
下学期开学后第四轮选课结束,教务处发布某些选修课调整关停的通知后;
下学期期中退课结束后。
更新流程与方法在个人电脑上
记得备份!记得备份,记得备份!
Excel 表格访问 1.tongji.edu.cn,切换到全校课表,把对应学期的全校课表导出为 Excel 表格;
导出为 .csv把 Excel 表格导出为 .csv 文件;
方法:文件->另存为->选择位置->在下拉菜单选择(.csv)->保存
这两个有什么区别吗?如果选择不含有 UTF-8 的(靠下面的),编码会变成 GB2312,在进行 pandas 处理的时候会有问题,提示无法读取对应编码(因为 pandas 默认读 UTF-8),然而如果在 python 程序中指定 coding 似乎也无法解决问题,所以这时,可以通过 VSCode 打开 .csv 文件,先选择 按编码打开,GB2312;再选择 按编码保存,UTF-8 with BOM,解决!至于说没有 BOM 的单纯 UTF-8 怎样,以后可以试试..
进行数据 ...
《如何拥抱一只刺猬2》书评兼对个人情感的纵深分析
说在前面这本书是上一本书的续集,主要讲解了几种不同的单身模式。就像我一个朋友说的,心理学的书籍可能就像星座或者人格一样,小狗来了都得中几条。可能是这样吧,不过,如果不对号入座的话,怎么认清自己,认清别人呢?辩证地看吧。
感受总体来说,这本书给我的感觉没有上一本那么惊艳,不是书写的不好,可能是我心境变了吧。之前还处在一个恋爱的心境当中,看什么都有一层恋爱滤镜,周围萦绕着不少粉色泡泡。现在这层滤镜消失了,再加上听了一些很讽刺现实的歌曲(这个有机会单独说),加上又到了期末季,可能心情又变得有些低落。最近 HRV 又比较低,但是并没有感冒的症状。我也说不清我到底怎么了,但反正,秋天是忧郁的季节吧。
下了形策的最后一节课,电脑没电了,走出复楼,看到嘉三路的悬铃木换上了火红的装束,十分好看!
不过确实是有一些萧条吧,这种冷冰冰的感觉。要是再下点凉雨,就仿佛走在北苑前面那一条松柏直冲云霄的小径上了。
不管看了多少人格,最终发现还是找不到自己的号码牌,仿佛看到了朋友的影子,但是对方又说并不是。到底是他当局者迷,还是说我对他不了解呢?只有天知道。我呢?我对自己又有怎样的了解呢?还是从排除法入手吧。
列 ...
《如何拥抱一只刺猬》书评兼对个人情感的纵深分析
为什么写这篇文章好久没用键盘打字了啊,想来有些生疏。这学期比上学期忙,在应付 OOP 之余还要学习艰难的组合数学。这是两个硬骨头,至于那些小碎骨:数据结构(AI 调教教程)、数字逻辑、概率论,懒得提及它们了。连日记都不得不暂时搁笔,改用微信语音,以期寒假有时间把语音转换为文字。虽然说好久没有通过打字的方式来写日记了,但是微信语音的方式也不错——效率更高。晚上十点半图书馆闭馆,从图书馆走回宿舍的这一段路,和自己发发语音,回想一下今天干了什么,也是一个更加自然的过程,只需要说就可以了,不必在意打字是否错误。不过打字也有打字的好,算是另外一种不同的表达形式吧——所以我来了。
上面是一些吐槽,写了写这学期匆忙的状态。下面来写一下我为啥要写这篇文章。
最近为情所困啊!好多话、好多情感想要表达出来。和自己说不过瘾,和朋友说吧,好像朋友一是不愿意听,毕竟人家的情感问题也没得到解决;二是人家的状态好像也不是特别好,我就别给他负能量了。唉,没有办法,所以只好和自己说啦,也是没有办法的办法了。只不过不是以和自己对话的形式,而是写成文章发出来,这样在心理上仿佛好像能被别人读到一样。
看到这本书看到这本书,还 ...
Clash 订阅转换无法获取结点
问题市面上有许多常用的订阅转换程序,可以让对于机场自带的分流规则不满意的用户实现自己的规则。这一结果的实现有赖于 subconverter 这一开源程序。然而,有些机场禁用了 subconverter,使得其无法获取到结点。那么该如何解决呢?
现象输入订阅链接以及自定义的规则后,在 Clash 中,提示下载失败;在浏览器中可以查询到更详细的信息。
在浏览器中输入获得的整合链接,得到提示:
The following link(以下简称:整合链接) doesn’t contain any valid node info: https://api.xxx.top/sub?target=clash&new_name=true&emoji=true&clash.doh=true&filename=XXX&udp=true&url=https%3A%2F%2Fapi.xxx.xyz%2Fosubscribe.php%3Fsid%3Dxxxxx%26token%3Dxxxxxxxxxx
翻译过来,就是对应的链接没有有效结点。
猜测 1:真的没有 ...