python爬取高校课程信息进行选课实战
之前用过java实现选课功能现在在学习python所以想要用python也实现一下。因为本人是广大学生所以用广大教务系统演示。本文仅供学习使用请勿用于其他用途。首先打开数字广大然后打开浏览器开发者工具输入账号密码登录广大主页查看请求头信息Content-Type为application/x-www-form-urlencoded,如下图所示查看登录请求的url以及所需要提交的参数请求参数在上一个请求的网页中获得也就是数字广大的html源码上可以获得查看登录参数与网页源码对应关系#根据上面图片的特征通过html源码截取登录参数defget_login_param(self,html,key,specialFalse):flagNoneifspecialisFalse:flagkey valueelse:flagkey accesskeyl valuestarthtml.find(flag)ifstart!-1:startlen(flag)temp_stringhtml[start:]endtemp_string.find()ifend!-1:resulttemp_string[:end]returnresultreturnNone项目中用到requests库,用requests库中的session可以很自动处理cookie所以在整个过程中需要保持用同一个session#获取session的方法defget_session(self,filecookies.hylee):# 获取当前会话通过session可自动管理cookieifself.sessionisNone:self.sessionrequests.Session()self.session.cookiesHC.LWPCookieJar(filenamefile)headers{# Content-Type: application/x-www-form-urlencoded, # post请求默认类型可以不加user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0}self.session.headers.update(headers)returnself.session执行登录操作# 登录广大主页deflogin(self,username,password):sessionself.get_session()login_urlhttps://cas.gzhu.edu.cn/cas_server/loginresponsesession.get(login_url)login_pageresponse.text# login_page response.read().decode(utf-8) # 获取登录页面的源码captchaself.get_login_param(login_page,captcha)warnself.get_login_param(login_page,warn)ltself.get_login_param(login_page,lt)executionself.get_login_param(login_page,execution)_eventIdself.get_login_param(login_page,_eventId)submitself.get_login_param(login_page,submit,True)login_params{username:username,password:password,captcha:captcha,warn:warn,lt:lt,execution:execution,_eventId:_eventId,submit:submit}rsession.post(login_url,datalogin_params)# print(r.text)ifr.text.find(主页)!-1:print(登录广大主页成功)returnTrueelse:print(登录广大主页失败)returnFalse为了在选课的时候不用频繁的登录和获取课程在本项目中会把cookie和获取到的课程保存到本地之后需要的话可以直接加载进来而不需要重新获取#从文件中加载cookie信息并添加到session中defload_cookies(self,file_pathcookies.hylee):self.sessionrequests.session()self.session.cookiesHC.LWPCookieJar(filenamefile_path)try:self.session.cookies.load(ignore_discardTrue)except:print(cookie文件不存在)登录成功以后会跳转到广大主页直接点击教务系统的话会在新窗口打开这样chrome浏览器就不能抓到数据包所以要修改网页源码将target属性去掉使其在原来的标签页打开具体步骤看下面的截图去掉target属性以后点击教务系统并抓取数据包第一个url即为教务系统的url获取教务系统url地址后直接通过session访问教务系统登录rself.session.get(http://jwxt.gzhu.edu.cn/sso/lyiotlogin)# 登录教务系统ifr.text.find(广州大学教学综合信息服务平台)!-1:print(登录教务系统成功)self.session.cookies.save(ignore_discardTrue,ignore_expiresTrue)self.get_cause_types()else:print(登录教务系统失败)登录教务系统以后点击自主选课查看自主选课html网页源代码可以知道不同课程有不同的特征值而且每个年级都不一样根据上面的网页源码获取课程类型的特征信息并保存到文件中下次可以直接从本地文件中获取数据# 获取课程类型体育、主修、选修# queryCourse(this,01,90BF46F4F75374F8E053206411AC28F7)# 获取 01 90BF46F4F75374F8E053206411AC28F7两个重要字符串defget_modules(self,html,file_pathmodules.hylee):result[]keyqueryCourse(starthtml.find(key)ifstart!-1:startlen(key)endhtml.find(),start)while(start!-1)and(end!-1):shtml[start:end].split(,)# 根据逗号分割字符串result.append([s[1].replace(,),s[2].replace(,)])# 去除单引号ifend-1:breakstarthtml.find(key,end)ifstart-1:breakstartlen(key)endhtml.find(),start)iflen(result)!0:withopen(file_path,w,encodingutf-8)asfile:# 将数据写到文件中file.write(json.dumps(result))count1foriteminresult:print(课程类型str(count),item)count1returnresult# 将结果返回可以通过本地文件或者访问教务系统获得课程类型特征信息# 选课初始化参数和模块definit_modules_and_params(self,module_from_fileFalse,module_file_pathmodules.hylee):select_cause_urlhttp://jwxt.gzhu.edu.cn/jwglxt/xsxk/zzxkyzb_cxZzxkYzbIndex.html?gnmkdmN253512layoutdefault# 点击自主选课请求的urlself.htmlself.session.get(select_cause_url).text# 获取自主选课html页面ifmodule_from_fileisTrue:# 本地加载课程类型self.load_modules(module_file_path)else:self.modulesself.get_modules(self.html)# 获取课程的类型 体育 选修 主修self.public_paramsself.get_public_params(self.html)# 自主选课页面有的参数,一般每次请求都要加上点击查询按钮以后可以查看相应的数据包查看请求url以及需要提交的参数等信息因为选课需要很多的参数也需要抓很多包所以剩下的大家可以自行探索思路在文章中已经写的比较具体了具体实现代码请转到我的github项目查看有能力的朋友还可以通过本项目生成的cookie文件和其他课程文件信息用web压力测试工具进行选课扫描下面二维码可以查看我的个人博客原创文章禁止转载欢迎转发微信公众号:小海电脑

相关新闻

电工识图入门到精通:电气符号、电路分析与实战案例

电工识图入门到精通:电气符号、电路分析与实战案例

电工识图是电气工程领域的基础技能,无论是家庭装修布线、工厂设备维护还是自动化系统调试,都离不开对电路图纸的准确理解。很多初学者面对复杂的电气符号和线路连接感到无从下手,其实只要掌握正确的方法,电工识图完全可以系统化学习。 本文将从最基础的电气符号认知开始,…

2026/7/28 19:26:18阅读更多 →
从Web Audio API到Canvas渲染:手把手构建音乐可视化播放器

从Web Audio API到Canvas渲染:手把手构建音乐可视化播放器

音乐可视化项目在 GitHub 上并不少见,但能真正将音频数据、3D 渲染和交互体验结合,创造出沉浸式解压氛围的完整工具,却需要开发者对 Web 音频 API、图形学和前端工程有深入的理解。这类项目不仅是炫技,更是一种将抽象数据转化为直…

2026/7/28 19:26:18阅读更多 →
IM-GUI Bundle跨平台安装与核心功能开发指南

IM-GUI Bundle跨平台安装与核心功能开发指南

1. IM-GUI Bundle 安装与使用指南 作为一款轻量级即时图形用户界面库,IM-GUI(Immediate Mode GUI)因其高效、跨平台的特性在游戏开发、工业控制等领域广受欢迎。Bundle打包方式则进一步简化了其部署流程,特别适合快速集成到各类项…

2026/7/28 19:24:17阅读更多 →
AI辅助Python编程入门:从零搭建环境到实战项目开发

AI辅助Python编程入门:从零搭建环境到实战项目开发

很多朋友想学 Python,但面对海量教程和复杂环境配置,往往还没开始就放弃了。传统的学习路径需要自己安装环境、配置 IDE、手动调试,一个简单的语法错误可能就要卡半天。现在,借助 AI 编程助手,学习 Python 的门槛被大幅降低。你可以像拥有一个随时在线的编程导师,它能帮你…

2026/7/28 20:40:45阅读更多 →
Transformer逆向视角训练:提升组合推理能力的语义场方法

Transformer逆向视角训练:提升组合推理能力的语义场方法

在深度学习领域,Transformer架构已经成为自然语言处理乃至计算机视觉任务的主流选择。然而,随着模型规模的不断扩大和应用场景的日益复杂,研究者们开始关注Transformer在组合推理任务中的局限性。最近的研究表明,传统Transformer模型在处理需要多步推理的组合性任务时,往往…

2026/7/28 20:40:45阅读更多 →
JPA EntityManager

JPA EntityManager

一、EntityManager 详解 1.1 定义与核心定位 EntityManager 是 JPA(Java Persistence API)的核心接口,首次在 EJB 3.0 规范(JSR 220,2006 年)中定义。它负责管理实体对象的生命周期,提供保存、更新、删除和查询实体等持久化操作。 本质理解:EntityManager 是应用程序…

2026/7/28 20:40:45阅读更多 →
科学育儿:婴儿抱被的正确使用与材质选择

科学育儿:婴儿抱被的正确使用与材质选择

1. 婴儿抱被的认知误区与真相揭秘 新手爸妈们第一次抱起那个柔软的小生命时,总会不自觉地用抱被将宝宝裹得严严实实。但你可能不知道,我们习以为常的"粽子式包裹法"正在被现代育儿理念重新定义。传统观念认为抱被就是要捆紧防着凉,…

2026/7/28 20:40:45阅读更多 →
超大规模数据表SQL服务:十亿行百万列数据处理方案

超大规模数据表SQL服务:十亿行百万列数据处理方案

这次我们来看一个专门处理超大规模数据表的 SQL 服务项目。这个项目的核心价值在于能够高效处理包含数十亿行或高达百万列的数据表,对于需要处理海量结构化数据的场景来说,这是一个值得关注的技术方案。从项目标题可以看出,这个 SQL 服务主要…

2026/7/28 20:40:45阅读更多 →
2026大模型API成本真相:企业为什么不能只看每百万Token单价

2026大模型API成本真相:企业为什么不能只看每百万Token单价

文章摘要 企业在选择OpenAI、Anthropic或Google模型时,最容易犯的错误是把“每百万Token价格”当作最终成本。真实生产成本还包括输出长度、思考Token、上下文重复、缓存写入、搜索、文件检索、代码执行、Agent循环、失败重试、并发、数据驻留、日志和人工审核。 …

2026/7/28 20:38:44阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →