这个项目实已经在一个月前已经完成了,一直都想写一篇博客来总结这个过程中遇到的一些问题。但最近一个月来都比较忙,所以一直拖到了现在。
首先说说起因吧,我没事的时候,总喜欢依次点开学校主页、教务处、图书馆以及学院的网站,看看有没有什么新通知,虽然大多与我无关。恰逢最近正在学Python,经常听到别人说用Python写爬虫很简单,但自己尚未接触过爬虫。于是抱着试一试的心态看了几篇关于Python爬虫的博客,发现实现起来的确很简单。于是,便一边看着官方的文档说明,一边看着别人的博客,终于完成了自己的第一次爬虫。
使用urllib.request
库获取到目标url(各个网站的’更多通知’页)的源代码,然后利用Python的re
库进行正则匹配,提取到通知相关信息后,与文件中存取的上一次爬取到的信息进行对比。
若检测到有新的通知,则利用twilio
库向指定手机号码发送SMS,利用smtplib
库向指定邮箱发送提醒信息。
此外,还具有发送日志以及异常日志的功能。
目前仅支持本校的通知提醒,后续会逐步提高项目的通用性。
Github地址:School_Notice
pip install twilio
msg['From']
以及msg['To']
必须为实际的发件人地址,否则可能会出现异常:SMTPDataError(code, resp)
.如必须写作:msg['From'] = '[email protected]'
.我是使用的QQ邮箱来发邮件,至于其他邮箱需不需要这样写还不清楚。 str.split(',')
将字符串转为list。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
print(str,end='')
utf-8
的方式,则可能会出现各种编码问题,如: if find1 == -1 & find2 == -1:
Coding = 'utf-8'
else:
# 教务处网页源码编码格式为为gbk
# 学生处网页源码编码格式为gb2312
Coding = 'gbk'
data = response.read().decode(Coding)
pip install pywin32
安装pywin32pip install PyInstaller
安装Pyinstallerpyinstaller -F main.py
即可将Python程序打包为exe程序pyinstaller -F -i logo.ico main.py
,为生成的exe程序添加图标