go语言爬取新版正方教务系统数据

go语言爬取新版正方教务系统数据

学完go语言的基础之后已经过了一个多月了,开始想试着利用些时间写写博客,就打算将半个月前练着写的一个go爬虫小项目翻出来写写。由于之前对go爬虫的一些基础知识不熟悉,这个东西足足拖了半个多月才完成( ▼-▼ )

之前曾参考过一些其他博主写过的文章,在此附上链接:
模拟登陆新版正方教务管理系统(获取学籍信息、课表和成绩)

步骤

  1. 模拟登录并获取cookies
  2. 通过携带cookies去访问网页爬取数据

模拟登录

在开始敲码之前,需了解一下新版正方系统的登录流程,这就需要自己登录一遍并通过浏览器抓包分析。
以谷歌浏览器为例,通过抓包会发现:
在这里插入图片描述
在提交给主页的数据中有csrftoken,yhm,mm
在这里插入图片描述
而且待解决的还有302跳转(踩过的坑,后面会讲)和cookies(获取公钥和登录时需用到)
而csrftoken 可通过登录页面发现:
在这里插入图片描述
在通过获取登录界面取得csrftoken的值的同时,我们也顺便获取cookies
yhm为用户名
mm为密码,且很明显是经过加密的
在此目的就很明确了,我们要做的事就只有爬取登陆页面并获取csrftoken值和获取cookies
将我们的密码加密
而密码加密代码也可在抓取得js文件中发现:
在这里插入图片描述
通过上述代码,我们又可得出一些信息:
密码是通过RSA算法进行加密的,且加密所用到的方法都可在抓包时出现的js文件找到。
首先我们需要获取公钥,即图中的modulus和exponent变量
公钥:
在这里插入图片描述
如图所示是一个json类型的数据
关于密码的加密本人曾试着将相关的js文件拷贝下来,当成一个加密脚本来使用,结果不成功,最后直接模仿js文件的加密流程用go来复现。
相关的加密js文件:
在这里插入图片描述
分析完毕,让我们开始快乐的代码环节o( ̄▽ ̄)ブ

  1. 获取csrftoken和cookies
	//设置请求
	request, err := http.NewRequest("GET", url, nil)
	checkError(err)
	request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0") //设置用户代理,伪装浏览器访问
	resp, err := client.Do(request)
	defer resp.Body.Close()
	checkError(err)

	//获取登录页以用正则表达式提取token
	data, err := ioutil.ReadAll(resp.Body)
	checkError(err)
	//showResponseImformation("getCsrftoken.html", data, resp)

	zz ,err := regexp.Compile(`<input type="hidden" id="csrftoken" name="csrftoken" value="(.+)"/>`)
	checkError(err)
	findArray := zz.FindStringSubmatch(string(data))
	t.csrftoken = findArray
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值