用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线程中对join方法的运用的教程
Apr 09 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
Python 加密与解密小结
Dec 06 Python
pandas如何处理缺失值
Jul 31 Python
Python 变量的创建过程详解
Sep 02 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
Python提取PDF指定内容并生成新文件
Jun 09 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
PyQt5创建一个新窗口的实例
2019/06/20 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
个人简历自荐信
2013/12/05 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
作文评语大全
2014/04/23 职场文书
党支部综合考察材料
2014/05/19 职场文书
物流管理专业求职信
2014/05/29 职场文书
奶茶店创业计划书
2014/08/14 职场文书
领导工作表现评语
2015/01/04 职场文书
微观世界观后感
2015/06/10 职场文书
2019各种保证书范文
2019/06/24 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
golang中的空slice案例
2021/04/27 Golang
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis