python成绩查询系统_教你用python爬虫监控教务系统,查成绩快人一步!

importdatetimeimporttimefrom email.header importHeaderimportrequestsimportreimportsmtplibfrom email.mime.text importMIMETextfrom bs4 importBeautifulSoupdeflistener():#在这里我通过模拟登陆的方式登陆

#一般来说这里填写的是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=newlistif diflist=='':

send("unkowned Error","unkowned Error")else:#有新成绩了,发送邮件通知我

send('you have new course sorce!!', diflist)

max=lengthprint('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

defsend(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')exceptsmtplib.SMTPException as e:print('error', e) #打印错误

deftoList(soup):

flag=True

list=[]

strs= ''

#对tr标签下的td进行遍历并取值

for tr in soup.find_all('tr'):ifflag:

flag=False;continuei= 1

for td intr.stripped_strings:if (i == 1 or i == 2):

i+= 1

continuestrs+= "_" +td

i+= 1list.append(strs)

strs= ''

returnlistdefcompareTwoList(oldList,newList):

diflist=''

for sub innewList:#判断是否唯一

if(oldList.count(sub)==0):

diflist=subbreak

returndiflistif __name__ == '__main__':

listener()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值