版权声明:本文为博主原创文章,转载 请注明出处 https://blog.csdn.net/sc2079/article/details/82563854

-写在前面


  暑假期间学校的学生教务系统大改,好多以前的微信公共号的爬虫都不能用了。想快速查成绩怎么办呢?哎,自己动手丰衣足食,不妨自己写个爬虫!
  上次写个中国大学MOOC课程信息爬取与数据存储博客,使用的是selenium+Chrome。而这次,不妨采用requests发送post、get请求获取数据。

-环境配置安装


  运行环境:Python3.6、Spyder
  依赖的模块:bs4,requests.re,JSON,pymysql等

-开始工作


1. 模拟登录

  关于浏览器的选择,这里我推荐Firefox(可以看到post数据,并能模拟重发数据)。当然,如果你有fiddle等抓包工具的话,其他浏览器也OK。
  打开登录界面:

  输入账号密码,按F12打开开发者工具,再点击登录。

  此时在网页上可以看到自己的一些信息,比如自己的姓名,登录日期,学业信息等。此时我们观察开发者工具的网络窗口。

  其中,第一个就是我们的post登录请求,观察请求头(原始头)和请求参数。

  复制编辑请求头。

headers2={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',   'Cookie': 'JSESSIONID=bcdAIJyUvw0e24cRYH8ww;selectionBar=1443374',  }

  这里我去掉了一些对于请求无影响的字段。
  查看请求参数。

  复制编辑请求参数

data={'j_captcha1':'error','j_password':'××××××','j_username':'×××××××××'}

  经测试,登录成功。

url='http://×××××××××/j_spring_security_check'
r=requests.post(url,headers=headers,data=data)

2. 获取日期和用户名

  网页上的日期和用户名

  在开发者工具中找到这个信息。

  注意上面的请求网址变化了,且请求方法为Get。

  使用get请求获取网页信息再用bs4解析分别获得日期和用户名。

'''获取登录日期和用户姓名'''
url2='http://××××××/index.jsp'
r2=requests.get(url2,headers=headers)
soup=BS(r2.content,'html.parser')
time=soup.find_all(name='i',attrs={'class':'ace-icon fa fa-calendar'})[1].parent.get_text()
time=re.sub('[\n\r]','',time)   #登录日期
user=soup.find_all(name='span',attrs={'class':'user-info'})[0].get_text()
user=re.sub('[\n\t\r欢迎您\,]','',user)  #用户姓名

  这里需要说明的是获取用户名和日期时需要用re去掉无关字符。

3. 获取学业信息

  网页上的学业信息见前图。这里同样打开开发者工具,找到相关信息。

  注意这里请求网址又不一样,且为post请求,这就需要找到请求头和请求参数。

  请求参数只有一个为空值。

'''获取学业信息及本学期课程信息'''
headers3={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0','Accept': 'application/json, text/javascript, */*; q=0.01','Referer': 'http://*********/index.jsp','Cookie': 'JSESSIONID=bcdAIJyUvw0e24cRYH8ww;selectionBar=1443374',}
data3={'flag':''}
r3=requests.post(url3,headers=headers3,data=data3)
Academic_info=r3.json()   #读入返回的JSON数据
passed_course_num=Academic_info[0]['courseNum']    #已修读课程门数
failed_course_num=Academic_info[0]['coursePas']    #为及格课程门数
gpa=Academic_info[0]['gpa']              #GPA
courseName=Academic_info[0]['courseName']    #本学期课程名
teacherName=Academic_info[0]['teacherName']    #本学期课程教师
jasName=Academic_info[0]['jasName']         #本学期课程上课教室

  这里需要注意的是请求头需要增加’Accept’字段(表示请求的JSON数据),否则会报错。

4. 获取所有修读课程信息

  在主页面点击成绩查询中的及格成绩,便可以查看各学期各学科成绩。

  同样,在开发者工具中找到相关信息:

  打开第一个课程

便可以找到所需要的信息。回过头来看下请求头。

  参照编写代码。

'''获取全部成绩信息并保存JSON文件'''
url4='http://zhjw.scu.edu.cn/student/integratedQuery/scoreQuery/allPassingScores/callback'
r4=requests.get(url4,headers=headers3)
all_grade_info=r4.json()  #导入JSON
with open('mygrades.json','w',encoding='utf-8') as f:   #保存课程成绩json.dump(all_grade_info,f,ensure_ascii=False)

  至此,课程信息获取完毕。

-未完待续


  这里有些问题需要说明一哈:
  1. 我测试时有时发现请求失败,其原因是网页设置了超时时间,Cooikes失效。
  2. 针对上个问题,requests有会话保持的功能。但是我在使用时有问题。

conn = requests.session()

  本篇博客从网页上获取的JSON数据,下篇博客将为你提供查询学期成绩、查询某个学科成绩等功能。教务系统模拟登录与爬取二

教务系统模拟登录与成绩爬取一相关推荐

  1. 详解教务系统模拟登录与爬取二

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82564284 - 写在前面 上篇博客教务系统模拟登录与成绩 ...

  2. 超星系统登录,信息爬取

    超星系统登录,信息爬取 经历过上一年的疫情的大学生,一部分大学生可能对超星有一个深刻的认识,而我写这个项目的想法来自我的导师,做一个可以爬取超星课程学生成绩,可以随机组卷(前提是自己题库里有题),该项 ...

  3. html登录界面设计代码_Python登录豆瓣并爬取影评

    Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分 ...

  4. 新版正方教务系统模拟登录登录密码RSA加密破解

    新版正方教务系统模拟登录登录密码RSA加密破解 最新版本教务系统,登录密码有被RSA加密,模拟登录时,我们需要先正方教务的加密方式. 第一步:获取到加密公钥 通过抓包我们可以获取到公钥获取url,然后 ...

  5. python登录网站后爬取数据_需要登陆网站后才能获取数据的页面爬取

    本文转载自以下链接:https://www.makcyun.top/web_scraping_withpython8.html 目的是万一博主网站无法访问到的话自己需要学习的东西可就不存在了. 本文需 ...

  6. HttpClient模拟登录、HtmlUnit模拟登录,jsoup爬取登录后的内容(不带验证码)

    一.HttpClient模拟登录是通过post或get请求,登录后抓取的是静态页面,动态页面使用HtmlUnit public static void main(String[] args) thro ...

  7. 基于HttpClient的正方教务系统模拟登录(带验证码)

    PS:恩,由于最近在学web和简单的http协议,所以心血来潮想用java写个爬虫来爬取学校官网(正方教务系统)个人主页的基础信息(课程信息.成绩--),其实在之前学过java基础教程的时候就可以写的 ...

  8. python二级成绩查询入口官网_python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  9. python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

最新文章

  1. Google瓦片地图算法解析
  2. 电脑测速软件_iPerf3 搭建局域网内部测速环境
  3. 定制一个网络文件系统
  4. 调用本地电脑摄像头并进行按P进行捕获照片并保存,按下Q退出
  5. 深入一步研究DNS服务器
  6. 判断IE版本的HTML语句详解,如:!--[if IE 9] 仅IE9可识别 ![endif]--
  7. redis 一主二从三哨兵
  8. 获取和设置线程的名称
  9. OPENGL和DX的不同.
  10. Java并发理论知识框架总结
  11. 店铺流量突然下滑是怎么回事,我们应该从哪些角度来分析?
  12. 汽车4G车载TBOX智能信息终端
  13. 文件加密的c语言程序课程设计,C语言文件加密课程设计.pdf
  14. Linux环境安装mysql8
  15. 习题 3.6 请编程序将China译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。
  16. 你不知道的雍正八年版《连平州志》
  17. 微信小程序获取当前地址以及选择地址详解
  18. 塔罗牌怎么引流?如何利用塔罗牌引流?做塔罗牌如何引流?
  19. 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作
  20. 2019年湖南电网考试备考(计算机专业第一批次)

热门文章

  1. Mongodb本机部署副本集
  2. 微信rpc服务器不可用怎么办,Win7提示rpc服务器不可用怎么办 提示rpc服务器不可用解决办法...
  3. Unity 中实现截图画笔橡皮擦工具
  4. 【区块链】7 个步骤入门区块链
  5. Python+Appium从安装到第一个小练习(保姆级别教程)
  6. 程序设计与算法郭炜老师的课堂笔记2
  7. 郭炜-C语言程序设计-程序设计与算法(一)-第三周
  8. VMS和Windows NT的首席设计师大卫·卡特勒(David Cutler)
  9. Android 优秀文章收集整理集合
  10. 关于Android Launcher3相关优秀文章的记录