小编给大家分享一下用Python查成绩的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

怎么用Python查成绩

用Python查成绩可以使用requests库,模拟登录教务系统,然后通过正则查询成绩信息即可。

设计思路:

设计思路很简单,首先对已有的成绩进行处理,变为list集合,然后定时爬取教务系统查成绩的页面,对爬取的成绩也处理成list集合,如果newList的长度增加了,就找出增加的部分,并通过邮件通知我。

推荐学习《Python教程》。

脚本运行效果:

发送邮件通知:

代码如下:

importdatetimeimporttimefromemail.headerimportHeaderimportrequestsimportreimportsmtplibfromemail.mime.textimportMIMETextfrombs4importBeautifulSoupdeflistener():#在这里我通过模拟登陆的方式登陆#一般来说这里填写的是username跟password#但我们学校后台将用户名和密码进行了加密#通过观察浏览器的请求数据跟页面源码猜出学校后台的加密方式data={#出于学校安全考虑,这里就不给出加密方式了'encoded':'xxxxxxxxxxxxxxxxxxx'}session=requests.Session()session.post('http://jwc.sgu.edu.cn/jsxsd/xk/LoginToXk',data=data)#请求2019-2020-1学期的所有成绩r_data={'kksj':'2019-2020-1','kcxz':'','kcmc':'','xsfs':'all'}r=session.post('http://jwc.sgu.edu.cn/jsxsd/kscj/cjcx_list',data=r_data)#对爬回来数据进行封装soup=BeautifulSoup(r.text,'html.parser')#返回已有的成绩列表oldList=toList(soup)max=len(oldList)#这里用死循环定时爬取成绩页面分析是否分布新成绩while(True):#post跟get方式不能乱用,不然数据会出错r=session.post('http://jwc.sgu.edu.cn/jsxsd/kscj/cjcx_list',data=r_data)soup=BeautifulSoup(r.text,'lxml')#print(soup.prettify())length=len(soup.find_all(string=re.compile('2019-2020-1')))-1print("course_length:",length)if(r.status_code==200andlength!=0):if(length>max):#查询新出的成绩列表newlist=toList(soup)#获取两个列表不同之处,不同的就是新成绩diflist=compareTwoList(oldList,newlist)oldList=newlistifdiflist=='':send("unkownedError","unkownedError")else:#有新成绩了,发送邮件通知我send('youhavenewcoursesorce!!',diflist)max=lengthprint('lastrunningtimewas:',datetime.datetime.now())#定时作用,500s查一次time.sleep(500)else:#发送邮件断开连接了print("haddisconnected...")send("yourserverisdisconnected!!!","yourserverisdisconnected!!!")breakdefsend(title,msg):mail_host='smtp.qq.com'#你的qq邮箱名,没有.commail_user='你的qq邮箱名,没有.com'#密码(部分邮箱为授权码)mail_pass='授权码'#邮件发送方邮箱地址sender='发送方邮箱地址'#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发receivers=['yoletpig@qq.com']#设置email信息#邮件内容设置message=MIMEText(msg,'plain','utf-8')#邮件主题message['Subject']=Header(title,'utf-8')#发送方信息message['From']=sender#接受方信息message['To']=receivers[0]#登录并发送邮件try:#smtpObj=smtplib.SMTP()##连接到服务器#smtpObj.connect(mail_host,25)smtpObj=smtplib.SMTP_SSL(mail_host)#登录到服务器smtpObj.login(mail_user,mail_pass)#发送smtpObj.sendmail(sender,receivers,message.as_string())#退出smtpObj.quit()print('success')exceptsmtplib.SMTPExceptionase:print('error',e)#打印错误deftoList(soup):flag=Truelist=[]strs=''#对tr标签下的td进行遍历并取值fortrinsoup.find_all('tr'):ifflag:flag=False;continuei=1fortdintr.stripped_strings:if(i==1ori==2):i+=1continuestrs+="_"+tdi+=1list.append(strs)strs=''returnlistdefcompareTwoList(oldList,newList):diflist=''forsubinnewList:#判断是否唯一if(oldList.count(sub)==0):diflist=subbreakreturndiflistif__name__=='__main__':listener()

看完了这篇文章,相信你对用Python查成绩的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!