用Python实现校园通知更新提醒功能


Posted in Python onNovember 23, 2019

前言

这个项目实已经在一个月前已经完成了,一直都想写一篇博客来总结这个过程中遇到的一些问题。但最近一个月来都比较忙,所以一直拖到了现在。

首先说说起因吧,我没事的时候,总喜欢依次点开学校主页、教务处、图书馆以及学院的网站,看看有没有什么新通知,虽然大多与我无关。恰逢最近正在学Python,经常听到别人说用Python写爬虫很简单,但自己尚未接触过爬虫。于是抱着试一试的心态看了几篇关于Python爬虫的博客,发现实现起来的确很简单。于是,便一边看着官方的文档说明,一边看着别人的博客,终于完成了自己的第一次爬虫。

简介

使用urllib.request库获取到目标url(各个网站的'更多通知'页)的源代码,然后利用Python的re库进行正则匹配,提取到通知相关信息后,与文件中存取的上一次爬取到的信息进行对比。

若检测到有新的通知,则利用twilio库向指定手机号码发送SMS,利用smtplib库向指定邮箱发送提醒信息。

此外,还具有发送日志以及异常日志的功能。

目前仅支持本校的通知提醒,后续会逐步提高项目的通用性。

源码:

Github地址:School_Notice

准备工作

安装twilio库:pip install twilio

注册twilio账号:Twilio

验证手机号:用来接收短信提醒的号码必须在twilio上进行验证

遇到的问题

邮件发送

若用名为msg的变量来保存邮件文本,则msg['From']以及msg['To']必须为实际的发件人地址,否则可能会出现异常:SMTPDataError(code, resp).如必须写作:msg['From'] = 'xxxxx@qq.com'.我是使用的QQ邮箱来发邮件,至于其他邮箱需不需要这样写还不清楚。

原本想用一个for循环来实现多人发送,后来发现smtplib库的sendmail方法支持多人发送,但参数应为一个list,故可用str.split(',')将字符串转为list。

我使用的是Windows下的Python,若计算机名为中文,则有可能会导致出现异常,可通过右击此电脑->属性,修改计算机名。

程序代码中使用的邮箱密码不是QQ密码,应在邮箱设置->账户->SMTP服务处,获取授权码。

其他问题

有时候会接收不到Twilio发送的短信,给10086打电话也没问出个所以然,可能是因为短信中有敏感词(如:学校名),修改短信内容后就可以了

对上述几个网站的源码使用re.findall后返回的列表中的每个元组中的元素的顺序均为时间、标题、链接,但对学生处网站的源码正则匹配后的元素顺序并不是按照上述顺序的。所以应单独进行调整,但直接修改一个元组中的元素,会出现异常:error:tuple' object does not support item assignment。

解决方法是:

if(subject_EN == 'snnu_xsc'):
 new_data = []
 for item in data:
  temp = (item[1], item[2], item[0])
  new_data.append(temp)
 data = new_data

Python3中的print函数是自动换行的,若不需要自动换行,则可写作:print(str,end='')

不同网站的编码格式可能不同,应按照各自的编码方式进行解码。若均采用utf-8的方式,则可能会出现各种编码问题,如:

UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xc9 in position 167

解决方法是:

if find1 == -1 & find2 == -1:
 Coding = 'utf-8'
else:
 # 教务处网页源码编码格式为为gbk
 # 学生处网页源码编码格式为gb2312
 Coding = 'gbk'
data = response.read().decode(Coding)

Python程序打包为exe(Pyinstaller)

安装及使用

使用pip install pywin32安装pywin32

使用pip install PyInstaller安装Pyinstaller

使用pyinstaller -F main.py即可将Python程序打包为exe程序

注意事项

打包之前应将用到的第三方库(此项目仅用到Twilio)复制到与要打包的py文件同一目录下。

可使用pyinstaller -F -i logo.ico main.py,为生成的exe程序添加图标

使用的ico文件像素不能过小,否则有可能出现:打包后的程序图标只有在资源管理器中设置为以小图标查看的情况下才显示的是自己的图标,其他情况仍未默认图标

使用截图

用Python实现校园通知更新提醒功能

用Python实现校园通知更新提醒功能

用Python实现校园通知更新提醒功能

以上这篇用Python实现校园通知更新提醒功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单理解Python中基于生成器的状态机
Apr 13 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python调用java的jar包方法
Dec 15 Python
python给微信好友定时推送消息的示例
Feb 20 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
Django自定义列表 models字段显示方式
Apr 03 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
你需要学会的8个Python列表技巧
Jun 24 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
深度学习小工程练习之垃圾分类详解
Apr 14 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 #Python
Python input函数使用实例解析
Nov 22 #Python
python循环输出三角形图案的例子
Nov 22 #Python
Python-Flask:动态创建表的示例详解
Nov 22 #Python
python flask中动态URL规则详解
Nov 22 #Python
Python之——生成动态路由轨迹图的实例
Nov 22 #Python
python:动态路由的Flask程序代码
Nov 22 #Python
You might like
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
php 生成短网址原理及代码
2014/01/23 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
Python制作简易注册登录系统
2016/12/15 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
浅析python redis的连接及相关操作
2019/11/07 Python
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
办公室主任主任岗位责任制
2014/02/11 职场文书
《穷人》教学反思
2014/04/08 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
青年志愿者活动方案
2014/08/17 职场文书
励志演讲稿600字
2014/08/21 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
永远是春天观后感
2015/06/12 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js