教你用python爬虫监控教务系统,查成绩快人一步!
教你用python爬虫监控教务系统,查成绩快人一步!
这几天考了大大小小几门课,教务系统又没有成绩通知功能,为了急切想知道自己挂了多少门,于是我写下这个脚本。
设计思路:
设计思路很简单,首先对已有的成绩进行处理,变为list集合,然后定时爬取教务系统查成绩的页面,对爬取的成绩也处理成list集合,如果newList的长度增加了,就找出增加的部分,并通过邮件通知我。
脚本运行效果:
服务器:
发送邮件通知:
代码如下:
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()
这个脚本不出意外的话要运行到我所有成绩出来为止,但我电脑肯定不会这么多天不关机呀,于是我就将这个脚本放到服务器上运行
http://mseo.chinaz.com/lvyous1.nx04.com/ http://seo.chinaz.com/lvyous2.nx04.com/ http://mseo.chinaz.com/lvyous3.nx04.com/ http://seo.chinaz.com/lvyous4.nx04.com/
http://mseo.chinaz.com/lvyous5.nx04.com/ http://seo.chinaz.com/lvyous6.nx04.com/ http://mseo.chinaz.com/lvyous7.nx04.com/ http://seo.chinaz.com/lvyous8.nx04.com/
教你用python爬虫监控教务系统,查成绩快人一步!的更多相关文章
- Python爬Boss,找工作,快人一步!!!
通过职位搜索"Python开发",看下搜索的结果: https://www.zhipin.com/job_detail/?query=python开发&city=10102 ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- 用python爬虫监控CSDN博客阅读量
作为一个博客新人,对自己博客的访问量也是很在意的,刚好在学python爬虫,所以正好利用一下,写一个python程序来监控博客文章访问量 效果 代码会自动爬取文章列表,并且获取标题和访问量,写入exc ...
- 零基础教你写python爬虫
大家都知道python经常被用来做爬虫,用来在互联网上抓取我们需要的信息. 使用Python做爬虫,需要用到一些包: requests urllib BeautifulSoup 等等,关于python ...
- 在Android上模拟登录广工正方教务系统查询成绩
这是在博客园里开博以来写的第一篇博客. 因为之前看过很多人都有发过关于模拟登录正方软件获取数据的文章,自己觉得挺好玩的便也去动手一做,开始还以为挺难的,但实际做起来还蛮简单的,当然其中还有些小插曲. ...
- 手把手教你用Python爬虫煎蛋妹纸海量图片
我们的目标是用爬虫来干一件略污事情 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛.而且现在网络上的妹子很黄很暴力,一下接受太多容易营养不量,但是本着有人身体就比较好的套路 ...
- python爬虫快递查询系统(源码)
import requestsimport json def get_express_type(postid): '''根据快递单号来智能判断快递类型''' url = 'http://www.kua ...
- Python 爬虫监控女神的QQ空间新的说说,实现邮箱发送
主要实现的功能就是:监控女神的 QQ空间,一旦女神发布新的说说,你的邮箱马上就会收到说说内容,是不是想了解一下 先看看代码运行效果图: PS:只有你有一台云服务器你就可以把程序24h运行起来 直接上代 ...
- Python 爬虫监控女神的QQ空间新的说说,实现秒赞,并发送说说内容到你的邮箱
这个文章主要是在前一篇文章上新增了说说秒赞的功能 前一篇文章可以了解一下 那么,这次主要功能就是 监控女神的 QQ空间,一旦女神发布新的说说,马上点赞,你的邮箱马上就会收到说说内容,是不是想了解一下 ...
随机推荐
- SIR模型预测新冠病毒肺炎发病数据
大家还好吗? 背景就不用多说了吧?本来我是初四上班的,现在延长到2月10日了.这是我工作以来时间最长的一个假期了.可惜哪也去不了.待在家里,没啥事,就用python模拟预测一下新冠病毒肺炎的数据吧.要 ...
- IDEA | Dot Executable: null..No dot executable found
背景 今天想在IDEA上打开.puml后缀的类图,发现IDEA并不能识别,但是正常的时序图却能正常打开,打开类图就报如下错误: 解决方案 经排查,idea的plantuml插件默认只支持时序图,类图还 ...
- Nginx简介和反向代理
一.什么是 nginx? nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师 Igor Sysoev 所开发,官方测试 ngi ...
- Hexo Next 接入 google AdSense 广告
前言 个人网站 www.yanlongwang.net 已经运营近一年,每日的浏览量不断上升,现在维持在两位数,打算承接一点广告赚睡后收入,用来维持网站的日常运营,希望能覆盖网站的服务器和域名开销. ...
- ORA-12547: TNS: 丢失连接
今天服务器挂掉了,公司的人弄了一下,,把服务器修好了,,但是我本地链接数据库一直报这个ORA-12547: TNS: 丢失连接,是服务器上的TNS监听没有启动,需要重启一下,
- C++输出中文字符
注:本文转载自互联网,感谢作者整理! 1. cout 场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 ...
- num10---适配器模式
1.类适配器 Adapter类,通过继承 被适配的类,实现目标类的接口,完成适配. 分析: java 单继承,所以适配器类 需要继承 被适配类,这就要求目标类必须是接口,有一定局限性. 被适配类的方法 ...
- Go语言实现:【剑指offer】删除链表中重复的结点
该题目来源于牛客网<剑指offer>专题. 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字. 示例 1: 输入: 1->2->3->3- ...
- Spring整合EasyExcel【基础设计】
前言 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI ...
- ubuntu下怎么配置/查看串口-minicom工具
一.安装minicom工具: 可直接使用命令sudo apt-get install minicom来完成安装 上面的截图因为检测到我已经安装过了. 二.通过minicom工具配置串口: 1.启动mi ...