温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用Python查成绩的方法

发布时间:2020-07-16 14:14:20 来源:亿速云 阅读:835 作者:清晨 栏目:编程语言

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

怎么用Python查成绩

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

设计思路:

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

推荐学习《Python教程》。

脚本运行效果:

用Python查成绩的方法

发送邮件通知:

用Python查成绩的方法

代码如下:

import datetime import time from email.header import Header import requests import re import smtplib from email.mime.text import MIMEText from bs4 import BeautifulSoup def listener():     #在这里我通过模拟登陆的方式登陆     #一般来说这里填写的是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')))-1         print("course_length: ",length)         if (r.status_code == 200 and length != 0):             if (length > max):                 #查询新出的成绩列表                 newlist = toList(soup)                 #获取两个列表不同之处,不同的就是新成绩                 diflist = compareTwoList(oldList, newlist)                 oldList=newlist                 if diflist=='':                     send("unkowned Error","unkowned Error")                 else:                     #有新成绩了,发送邮件通知我                     send('you have new course sorce!!', diflist)                 max = length             print('last running time was:',datetime.datetime.now())             #定时作用,500s查一次             time.sleep(500)         else:             # 发送邮件断开连接了 print("had disconnected...")             send("your server is disconnected!!!","your server is disconnected!!!")             break def send(title,msg):     mail_host = 'smtp.qq.com'     # 你的qq邮箱名,没有.com     mail_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')     except smtplib.SMTPException as e:         print('error', e)  # 打印错误 def toList(soup):     flag = True     list = []     strs = ''     #对tr标签下的td进行遍历并取值     for tr in soup.find_all('tr'):         if flag:             flag = False;             continue         i = 1         for td in tr.stripped_strings:             if (i == 1 or i == 2):                 i += 1                 continue             strs += "_" + td             i += 1         list.append(strs)         strs = ''     return list def compareTwoList(oldList,newList):     diflist=''     for sub in newList:         #判断是否唯一         if(oldList.count(sub)==0):             diflist = sub             break     return diflist if __name__ == '__main__':     listener()

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI