教你用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空间,一旦女神发布新的说说,马上点赞,你的邮箱马上就会收到说说内容,是不是想了解一下 ...
随机推荐
- Spring Cloud Alibaba 之 Sentinel 限流规则和控制台实例
这一节我们通过一个简单的实例,学习Sentinel的基本应用. 一.Sentinel 限流核心概念 在学习Sentinel的具体应用之前,我们先来了解一下Sentinel中两个核心的概念,资源和规则. ...
- Miniio安装登陆密码报错问题,注意检查区分带小写!
------------恢复内容开始------------ #创建minio专用文件目录mkdir -p /app/minio/datamkdir -p /app/minio/configchmod ...
- JS-07-函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ffplay的使用
https://www.cnblogs.com/renhui/p/8458802.html
- Arrays.asList()用法梳理
Arrays.asList()用法梳理 asList概述 Arrays是java容器相关操作的工具类,asList方法将Array转换为list,是Array和List之间的桥梁. asList本质 ...
- php--->查询超大文件(12G)
今天遇到一个要在一个12G日志中查询数据的需求,手中暂时没有查询这种超大文件的工具,于是自己写了一个程度来读这个超大文件 其整体思路就是一行一行地去读取超大文件中的数据,然后将拿出的一行数据做相应的查 ...
- js 字符串方法 和 数组方法总览
字符串方法 search() 方法搜索特定值的字符串,并返回匹配的位置. 相比于indexOf(),search()可以设置更强大的搜索值(正则表 ...
- ubuntu 14.04 安装gvim 后报出warning
(gvim:3572): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class w ...
- 如何为wordpress 的文章添加分页
原文参考:http://www.wpdaxue.com/add-next-page-button-wordpress-post-editor.html 1.在编辑文章时切到text 模式,然后加上&l ...
- ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错
ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错. 安装pyenv后,在pyenv环境内安装 anaconda,然后再安装tensorflow不再报错,比较奇怪, ...