文章目录

  • 前言
  • 一、用到的库
  • 二、使用python进行爬取
    • 1.爬取全校学院的名称
    • 2.爬取老师课表
  • 总结

前言

虽然教师的个人课表可以登陆es.bnuz.edu.cn教务系统进行查询,但每次只能查看指定的老师,没有别的查询模式,有时不是很方便。所以使用python爬取全校每门课的各种信息到excel中可以自己查找想查的内容。


一、用到的库

需要requests库和json库

import requests
import json

二、使用python进行爬取

1.爬取全校学院的名称

进入eol.bnuz.edu.cn中【信息查询】-【教师个人课表查询】后将鼠标放在2020-2021第二学期按钮上发现左下角出现一个网址:

打开后按F12打开开发者工具选择Network后选择XHR,刷新网页,发现下方获取到四个链接:

点开第二个发现里面包括了学校的所有学院:

知道了这个网址可以返回学院名称可以先用python爬取学校所有的学院为一会爬取每个老师的课作准备。

def get_html(url):response = requests.get(url)response.encoding = 'utf-8'return response.text
#爬取学校所有课程
url = "http://es.bnuz.edu.cn/eam/WebService.asmx/classSelectedInfo?xn=2020-2021&xq=2"
text = json.loads(get_html(url))
print(text[0]['XYMC'])
for i in text:print("'" + i['XYMC'] + "'" + ", ", end='')

网站的返回数据为一个列表中多个字典,所以使用json.loads()将返回的字符串转换成列表。
最终的结果便是这里的所有教学单位:

2.爬取老师课表

在http://es.bnuz.edu.cn/eam/teacherSchedule.html网站上打开开发者工具的network点击一个学院发现返回一个数据:



发现参数bm和kkxy都为学院,这时就用上第一步爬取的学院了。打开这个网站发现里面是一个学院的所有老师的工号和姓名:


我们就可以构造一个url用来爬取每一个学院的老师信息:

"http://es.bnuz.edu.cn/eam/WebService.asmx/getTask_teacher?bm=" + i + "&kkxy=" + i + "&type=0&xn=2020-2021&xq=2"
#i为之前爬取的学院名称。

现在回到最开始的网站。
在最开始的网站上随便查找一个老师用network监测返回结果发现:


存在多个参数:其中xn为学年、xq为学期、zgh为老师的工号。这个链接打开后为教师上的课程:

所以我们可以构造出一个url:

"http://es.bnuz.edu.cn/eam/WebService.asmx/getTask_info_teacher?xn=2020-2021&xq=2&zgh=" + teacher_id

最后的teacher_id为老师工号。

这里有许多参数,其中几个重要的为

起始周”QSZ"
结束周”JSZ"
单双周”DSZ"
星期几”XQJ"
起始时间段“QSSJD"
上课长度”SKCD"
#中文缩写命名属实优秀(=·ω·=)

有了这些就可以爬取所有的课表了:

# 爬取每一个院的老师名称和ID号
course = [ '信息技术学院', '保卫处', '北京校区', '北师大人文和社会科学高等研究院', '不动产学院', '财务处', '法律与行政学院', '凤凰书院', '工程技术学院', '公共课程中心', '管理学院', '国际交流与合作处', '国际商学部', '国内合作办公室', '教务处', '教育学院', '军事理论教研部', '科研处', '乐育书院', '人事处', '设计学院', '数学教研部', '宋庆龄公益慈善教育中心', '特许经营学院', '通识中心', '图书馆', '团委', '外国语学院', '未来教育学院', '文学院', '物流学院', '校办', '学生处', '研究生处', '艺术与传播学院', '应用数学学院', '运动休闲学院', '招生与就业处', '政治理论教研部', '中加合作办学项目', '珠海校区', '资产处', '公共体育教研部']
for i in course:teachers = "http://es.bnuz.edu.cn/eam/WebService.asmx/getTask_teacher?bm=" + i + "&kkxy=" + i + "&type=0&xn=2020-2021&xq=2"text = json.loads(get_html(teachers))# 爬取每个老师对应的课表for teacher in text:teacher_id = teacher['ZGH']teacher_name = teacher['XM']teacher_courses = "http://es.bnuz.edu.cn/eam/WebService.asmx/getTask_info_teacher?xn=2020-2021&xq=2&zgh=" + teacher_idget_courses = json.loads(get_html(teacher_courses))for j in get_courses:if j['NAME'] != None:j['NAME'] = '[' + j['NAME'] + ']'else:          j['NAME'] = ''if j['JXBMC'] == '空':j['JXBMC'] = "无教学班名称"if j['DSZ'] != None:j['DSZ'] = '(' + j['DSZ'] + '周' + ')'else:j['DSZ'] = ''if j['JSMC'] == None:j['JSMC'] = '空'print(teacher_name + "," + j['KCMC'] + j['NAME'] + "," + "星期" + str(int(j['XQJ'])) + "," + "第" + str(int(j['QSSJD'])) + "-" + str(int(j['QSSJD']+j['SKCD']-1)) + "节" + "," + "第" + str(int(j['QSZ'])) + "-" + str(int(j['JSZ'])) + "周" + j['DSZ'] + "," + j['JSMC'] + "," + j['JXBMC'])

最终输出结果为每个数据用逗号隔开,直接复制粘贴到excle以逗号作为分割就好了。(不怕麻烦也可以写一个csv读入的函数)
最终效果:


总结

大概流程为需要获取到老师的课表就得先获取老师的工号和老师的所在学院。

所以需要先爬取所有的学院–>再爬取每个学院下的老师工号–>最终爬取老师的课程信息。

python爬取北师大珠海分校全校课程表相关推荐

  1. Python爬取URP教务系统课程表并保存到excel

    Python爬取URP教务系统课程表并保存到excel 爬取URP教务系统课程表最终结果如图所示: 接下来开始操作: 首先打开教务系统->按F12->点击Network->刷新一下界 ...

  2. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  3. python爬取路况信息查询_如何一键获取高德交通态势数据

    发送原创文章至admin@caup.net,可申请注册邀请码 您需要 登录 才可以下载或查看,没有帐号?注册方式 x W56N8WNYzvv0Yeow.jpg (86.04 KB, 下载次数: 25) ...

  4. Python爬取天气数据及可视化分析

    Python爬取天气数据及可视化分析 文章目录 Python爬取天气数据及可视化分析 说在前面 1.数据获取 请求网站链接 提取有用信息 保存csv文件 2.可视化分析 当天温度变化曲线图 当天相对湿 ...

  5. 大神用Python 爬取了的心中女神的微信,是如何做到的?

    Python爬虫技术越来越火了,不仅可以爬微博.美女qq空间.还可以爬取微信工资号文章,还可以爬取微信,.如果可以用Python 爬取心中女神的微信,那就太棒了.昨晚偶然了解到Python里的itch ...

  6. Python爬取携程机票代码实例

    Python爬取携程机票代码实例 现在携程的页面是通过接口传递数据的,不能直接使用xpath进行解析,需要模拟调用接口的步骤 dcity是指出发地的城市编码 acity是指目的地的城市编码 其他参数是 ...

  7. python爬取电影评分_用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

  8. 用Python爬取好奇心日报

    用Python爬取好奇心日报 本项目最后更新于2018-7-24,可能会因为没有更新而失效.如已失效或需要修正,请联系我! 本项目已授权微信公众号"菜鸟学Python"发表文章 爬 ...

  9. python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例

    Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...

最新文章

  1. Scrapy爬虫(6)爬取银行理财产品并存入MongoDB(共12w+数据)
  2. 正排索引(forward index)与倒排索引(inverted index)
  3. c++中堆、栈内存分配
  4. HD_2037今年暑假不AC
  5. Thinkphp 使用过程中,模型中使用其它表却总是没起作用的解决办法
  6. Entity Framework 数据库先行、模型先行、代码先行
  7. 这让全场的chinaakd
  8. 【数学工具?拉普拉斯机制?随机响应?】差分隐私系统学习记录(二)
  9. python/socket编程之粘包
  10. python开发软件有哪些?Python编程软件
  11. Android开发之PreferenceActivity和PreferenceFragment
  12. iOS面试题(多线程篇)
  13. matlab教程simulink,MatlabSimulink教程课件.ppt
  14. [译]C++17,使用 string_view 来避免复制
  15. 爱了,阿里P9开源分享内部Java核心开发手册覆盖P5到P8
  16. 0927锚框(Anchor box)
  17. 双向可控硅晶片光耦 (TLP160J TLP260J TLP525G) 基本原理及应用实例
  18. 国际短信系统平台发送接口说明方法|网页短信平台开发搭建-移讯云短信系统
  19. HDU 1218(Blurred Vision)
  20. opencv 标定 3D项目 四

热门文章

  1. 关于sublime无法安装Package Controll
  2. 解密豌豆荚应用内搜索协议:普适 经济 兼容
  3. 动手搭建第一个小程序音视频Demo
  4. 从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。...
  5. 华为od机试题4 真题
  6. Redis故障检查:延迟测量
  7. 【BZOJ2733】【HNOI2012】永无乡(Splay启发式合并)
  8. 文件批量重命名编号怎么弄?
  9. AS3适用函数、AS3经常使用算法年夜齐
  10. linux12k8s --> 12kubeadm部署高可用k8s