爬虫登录学校的教务系统

起因

事情是这样的,在看到舍友在做课表爬虫的项目,于是乎想着自己也写一个吧,我便立马打开了 pycharm,开始了教务系统的爬虫。
其实这个博客应该分为上下部分,这次更新上部分吧,主要是也只写了这么一部分
老规矩,正事之前美女镇楼!GoGoGo!

C0613BA9155D39BD3CDCA069D2CABAFE


思路

1D648E86E887FF73D541C16724FE66D4

项目介绍

这个项目主要是实现登录教务系统,爬取课表并非本次主要内容。

这里主要是使用了 easyocr 的第三方库,使用库识别本地图片进行模拟真人登录

实际代码展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import requests
import random
import easyocr
from lxml import etree

# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47'
}

# 接受课表页面数据进行解析
def parsing(text):
html = etree.HTML(text)
# print(text)
for i in html.xpath('//*[@class="datalist"]/tr'):
for j in i.xpath('./td/text()'):
print(j)


if __name__ == '__main__':
table = ''
while True:
# 创建一个会话
s = requests.Session()
# 会话请求一张验证码
image = s.get(f'http://jw.glutnn.cn/academic/getCaptcha.do?{random.random()}', headers=headers)
# 保存验证码到本地
with open('getCaptcha.png', 'wb') as f:
f.write(image.content)
# 使用OCR识别验证码
reader = easyocr.Reader(['ch_sim', 'en'])
result = reader.readtext('getCaptcha.png')
# 接受验证码变量
captcha = ''
# 读取验证码
for i in result:
word = i[1]
captcha = word
# 登录时需要提交的数据,为账号密码,以及动态地填充验证码
data = {
'j_username': '**********',
'j_password': '**********',
'j_captcha': f'{captcha}'
}
# 在获取验证码后的会话进行验证OCR的结果
login = s.post(f'http://jw.glutnn.cn/academic/checkCaptcha.do?captchaCode={captcha}', headers=headers)
if login.text == 'false':
# 结果为假不进行操作
pass
else:
# 验证通过时执行登录操作
loging = s.post('http://jw.glutnn.cn/academic/j_acegi_security_check', data=data)
# 进入个人课表页面,没访问这个页面无法进入本周课表页面
cu = s.get(f'http://jw.glutnn.cn/academic/student/currcourse/currcourse.jsdo?randomString=202109171926436Qv6aK&groupId=&moduleId=2000', headers=headers)
# 访问本周课表页面
kb = s.get('http://jw.glutnn.cn/academic/manager/coursearrange/studentWeeklyTimetable.do?yearid=41&termid=3',headers=headers,data=data)
parsing(kb.text)
break