python爬取高校课程信息进行选课实战
之前用过java实现选课功能,现在在学习python,所以想要用python也实现一下。因为本人是广大学生,所以用广大教务系统演示。
本文仅供学习使用,请勿用于其他用途。
首先打开 数字广大
然后打开浏览器开发者工具输入账号密码登录广大主页,查看请求头信息,Content-Type为application/x-www-form-urlencoded,如下图所示
查看登录请求的url以及所需要提交的参数
请求参数在上一个请求的网页中获得,也就是数字广大的html源码上可以获得
查看登录参数与网页源码对应关系
#根据上面图片的特征通过html源码截取登录参数def get_login_param(self, html, key, special=False):flag = Noneif special is False:flag = '"' + key + '" value="'else:flag = '"' + key + '" accesskey="l" value="'start = html.find(flag)if start != -1:start += len(flag)temp_string = html[start:]end = temp_string.find('"')if end != -1:result = temp_string[:end]return resultreturn None
项目中用到requests库,用requests库中的session可以很自动处理cookie,所以在整个过程中需要保持用同一个session
#获取session的方法def get_session(self, file="cookies.hylee"): # 获取当前会话,通过session可自动管理cookieif self.session is None:self.session = requests.Session()self.session.cookies = HC.LWPCookieJar(filename=file)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)return self.session
执行登录操作
# 登录广大主页def login(self, username, password):session = self.get_session()login_url = 'https://cas.gzhu.edu.cn/cas_server/login'response = session.get(login_url)login_page = response.text# login_page = response.read().decode("utf-8") # 获取登录页面的源码captcha = self.get_login_param(login_page, 'captcha')warn = self.get_login_param(login_page, 'warn')lt = self.get_login_param(login_page, 'lt')execution = self.get_login_param(login_page, 'execution')_eventId = self.get_login_param(login_page, '_eventId')submit = self.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}r = session.post(login_url, data=login_params)# print(r.text)if r.text.find("主页") != -1:print("登录广大主页成功")return Trueelse:print("登录广大主页失败")return False
为了在选课的时候不用频繁的登录和获取课程,在本项目中会把cookie和获取到的课程保存到本地,之后需要的话可以直接加载进来而不需要重新获取
#从文件中加载cookie信息,并添加到session中def load_cookies(self, file_path="cookies.hylee"):self.session = requests.session()self.session.cookies = HC.LWPCookieJar(filename=file_path)try:self.session.cookies.load(ignore_discard=True)except:print("cookie文件不存在")
登录成功以后会跳转到广大主页,直接点击教务系统的话会在新窗口打开,这样chrome浏览器就不能抓到数据包,所以要修改网页源码,将target属性去掉,使其在原来的标签页打开,具体步骤看下面的截图
去掉target属性以后点击教务系统,并抓取数据包,第一个url即为教务系统的url
获取教务系统url地址后直接通过session访问教务系统登录
r = self.session.get("http://jwxt.gzhu.edu.cn/sso/lyiotlogin") # 登录教务系统if r.text.find("广州大学教学综合信息服务平台") != -1:print("登录教务系统成功")self.session.cookies.save(ignore_discard=True, ignore_expires=True)self.get_cause_types()else:print("登录教务系统失败")
登录教务系统以后点击自主选课
查看自主选课html网页源代码,可以知道不同课程有不同的特征值,而且每个年级都不一样
根据上面的网页源码获取课程类型的特征信息,并保存到文件中,下次可以直接从本地文件中获取数据
# 获取课程类型(体育、主修、选修)# queryCourse(this,'01','90BF46F4F75374F8E053206411AC28F7')# 获取 01 90BF46F4F75374F8E053206411AC28F7两个重要字符串def get_modules(self, html, file_path="modules.hylee"):result = []key = "queryCourse("start = html.find(key)if start != -1:start += len(key)end = html.find(")", start)while (start != -1) and (end != -1):s = html[start:end].split(",") # 根据逗号分割字符串result.append([s[1].replace("'", ""), s[2].replace("'", "")]) # 去除单引号if end == -1:breakstart = html.find(key, end)if start == -1:breakstart += len(key)end = html.find(")", start)if len(result) != 0:with open(file_path, 'w', encoding="utf-8") as file: # 将数据写到文件中file.write(json.dumps(result))count = 1for item in result:print("课程类型" + str(count), item)count += 1return result # 将结果返回
可以通过本地文件或者访问教务系统获得课程类型特征信息
# 选课初始化参数和模块def init_modules_and_params(self, module_from_file=False, module_file_path="modules.hylee"):select_cause_url = "http://jwxt.gzhu.edu.cn/jwglxt/xsxk/zzxkyzb_cxZzxkYzbIndex.html?gnmkdm=N253512&layout=default" # 点击自主选课请求的urlself.html = self.session.get(select_cause_url).text # 获取自主选课html页面if module_from_file is True: # 本地加载课程类型self.load_modules(module_file_path)else:self.modules = self.get_modules(self.html) # 获取课程的类型 体育 选修 主修self.public_params = self.get_public_params(self.html) # 自主选课页面有的参数,一般每次请求都要加上
点击查询按钮以后可以查看相应的数据包查看请求url以及需要提交的参数等信息
因为选课需要很多的参数也需要抓很多包,所以剩下的大家可以自行探索,思路在文章中已经写的比较具体了,具体实现代码请转到我的github项目查看,有能力的朋友还可以通过本项目生成的cookie文件和其他课程文件信息用web压力测试工具进行选课,扫描下面二维码可以查看我的个人博客,原创文章,禁止转载,欢迎转发
python爬取高校课程信息进行选课实战相关推荐
- python爬取MOOC课程信息
MOOC课程信息爬取 时间 :2019-10-12 一.任务与目标 网站地址 http://www.imooc.com/course/list/ 2. 采用scrapy爬虫框架 爬取信息包括:课程名称 ...
- 网络爬虫---爬取MOOC课程信息并做一个可视化
文章目录 爬取MOOC课程信息并做一个可视化 一.目标 二.知识要求 三.思路分析 1.观察网页源代码,看里面是否有关于具体课程的信息 2.抓包分析与自动翻页 3.用PhantonJS构造模拟浏览器 ...
- 用selenium制作爬虫爬取教务课程信息
https://apriljia.com/2018/09/26/%E7%94%A8selenium%E5%88%B6%E4%BD%9C%E7%88%AC%E8%99%AB%E7%88%AC%E5%8F ...
- python爬取自如房间信息(一)
使用python和selenium+Chrome Headless爬取自如房间信息,并将结果存储在MongoDB中.其中最麻烦的应该是每间房的价格,因为自如是用一张图片和offset来显示价格,所以不 ...
- 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇
项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...
- php爬取房源,用python爬取二手房交易信息并进行分析
用python爬取二手房交易信息并分析第一步:编写爬虫 爬取某平台上海市十个区共900条二手房的交易信息#爬取上海十个区的二手房价信息 import requests from bs4 import ...
- 2021最新python爬取12306列车信息自动抢票并自动识别验证码
项目描述 项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否 ...
- python爬取12306列车信息自动抢票并自动识别验证码(一)列车数据获取篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master].注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一 ...
- python爬取12306列车信息自动抢票并自动识别验证码(二)selenium登录验证篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时 ...
- python爬取天猫商品信息
python爬取天猫商品信息 主要信息有:商品名,价格,月销量,评论数,人气值,店铺评分 以智能手机为例! 首先,发掘网址规律: 第二页的网址如上 第三页的网址如上 注意网址中的数字(靠近中间位置): ...
最新文章
- 与大佬零距离交流,在行业报告留名,智源社区招募兼职编辑!
- C语言打印文件数据,用C语言输出文件内所有数据
- 未来,仅凭几个前端工程师,就能 hold 住一家企业吗?
- 心动网络:PolarDB助力心动网络打造爆款手游
- 普通话转粤语_语音转文字评测:几款语音转文字app,你了解多少?
- 五千的手机和两三千的手机使用起来有什么不一样?有必要买贵的吗?
- TensorFlow 2.0开发者测试版来啦,正式版推出指日可待
- centos7.2安装五笔输入法的方法(king已测)
- list集合排序_Java面试第七部分 Java的集合
- (转)详解HTML网页源码的charset格式
- OpenCV + VS + Python
- 蓝天模具风扇调速软件_联力UNI FAN SL120风扇体验:模组化拼装的风扇
- 3D制图软件中怎么设计凸轮?3D设计凸轮教程
- No.1大数据入门 | 环境搭建:VM、CentOS7安装及网络配置
- 浙江工商大学计算机研究生院,浙江工商大学研究生院
- 三只松鼠营收持续下滑:市值两天缩水28亿元,能否熬过漫漫转型路
- 炫龙银魂t1配置_炫龙银魂T1,不一样的外观一样的强悍
- 完美解决Mac无法写入NTFS硬盘——Mounty for NTFS
- python zxing 识别条码_Python zxing 库解析(条形码二维码识别)
- cad快速选择命令快捷键_CAD快捷键命令:倒角的使用技巧
热门文章
- [转]windows 7 professional 64 bit SP1 change system language(sucess)
- 再谈Spring(一):Bean的作用域
- Redis入门总结(二):主从复制,事务和发布订阅
- 计算机画图 教学反思,画图教学反思
- webrtc VAD 算法
- 手机和工业计算机运算能力对比,手机cpu和电脑cpu差距有多大_手机cpu跟电脑cpu差多少...
- 2021年最新微博移动版网页链接自动跳转pc版网页链接软件【私信版】
- 高分一号/二号/六号定标系数
- IDEA常用插件、设置、注释
- 0002计算机组成原理与体系结构02