爬取教务在线获取成绩

1.查看网页源代码获取信息

1.1首先进入教务在线网页,查看网页源代码,找到登陆账号,密码,以及验证码的位置,可以右键单击需要查找的目标查看元素,找到其在标签中的位置。
在这里插入图片描述
1.2找到验证码的相对路径,我们就可以模拟请求获取验证码并显示,src="…"这是相对地址
在这里插入图片描述1.3错误登陆系统,查看登陆时浏览器的账号,密码,验证码等参数如何上传,如下图通过post请求的方法将账号密码以及验证码通过表单数据上传
在这里插入图片描述

2.模拟浏览器登陆

2.1 知道了验证码图片的相对地址之后,将网页地址与相对地址进行拼接并将验证码图片获取到本地

#将浏览器中几个重要的参数要补全,难以抉择选择请求参数就 全部写上
url='http://jwzx.usc.edu.cn'
try: 
    kv={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0'}
    Data={'page':'1',
          'rows':'15',
          'sort':'ReleaseData',
          'order':'DESC'
          }
    img_Url = 'http://jwzx.usc.edu.cn' + '/Core/verify_code.ashx'
    Img1 = requests.session()
    Img = Img1.get(img_Url, headers=kv)

2.2 这时候获取到的并不是图片资源,而是二进制编码的数据,将二进制数据写入本地的文件,并通过opencv库对图片文件进行读取

file = "H:\\python\\yanzhengma.png"
    playFile = open(file, 'wb')
    playFile.write(Img.content)
    playFile.close()
    img = cv2.imread("H:\\python\\yanzhengma.png", 1)
    cv2.imshow("1", img)
    cv2.waitKey(0)

此时验证码能够显示
在这里插入图片描述2.3 post请求登陆系统,将账号、密码、输入的验证码一起提交 此处要点:提交验证码时必须将获取验证码时得到cookie一并上传,这样输入的验证码code才能与获取下来的验证码进行匹配

Code=input("验证码:")
data={
    'UserName':"your account",
    'Password':"your password",
    'Code':Code
}
kv1={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
     'Connection':'keep-alive',
     #'Cookie':Img.cookies,
     'X-Requested-with':'XMLHttpRequest',

}
try:
    res=Img1.post('http://jwzx.usc.edu.cn/Login/Login',headers=kv1,cookies=requests.utils.dict_from_cookiejar(Img.cookies),data=data)
    print(res.status_code)
    res.encoding=res.apparent_encoding
    print(res.text)
except:
    print("登陆失败")

3.成功登陆之后开始你的表演

3.1 打开成绩的目录,按下F12找到,刷新网页查看网络请求,找到相应的请求网址,如下图
在这里插入图片描述3.2 登陆之后,响应数据包中的cookie相当于密令,每一次获取数据操作都得带着它, 请求数据时需要使用这个cookie

Form_Data={
    'termCode':'2018-2019-2',
    'sort':'Id',
    'order':'ASC'
}
'''Data1={
        'batchId':'20190530095305274886878ad9552af',
'sort':'CourseName',
     'order':'ASC'}'''
try:
    res1=requests.post('http://jwzx.usc.edu.cn/Student/StuTermCourseScore/GetList',cookies=requests.utils.dict_from_cookiejar(res.cookies),headers=kv1,data=Form_Data)
    print("请求状态:",res1.status_code)
    print(res1.text)
except:
    print("获取成绩失败")

4.筛选数据

4.1 相应的数据可以通过F12查看数据的格式,一般都为json格式
JSON格式4.2 在这里不能直接提取数据,需要使用json库的函数将其转化为python的数据格式
转化4.3 根据python数据格式提取需要的数据
在这里插入图片描述

5.结果图

成绩太low就不展示了…wuwuwu
在这里插入图片描述
程序源代码下载地址请点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值