制作背景

在我进入浙江师范大学的第一年,消息比较闭塞,很多消息都是同学告诉我的,比如有什么比赛或者项目,后来,学长告诉我,有很多消息,辅导员和研秘是不会通知的,需要经常关注研工部的消息,但是我坚持了几天之后发现,这样实在是太麻烦了,而且也记不住,我就在想可不可以制作一个程序,如果有我们关注的消息时,给我们发一封邮件。

代码分享

代码分享如下:

#1.2版本公告:程序自动保存上次输入的关键词和账号
#1.1版本公告:用户可以自定义关键词
#浙江师范大学研工部消息自动通知器1.0功能介绍:有关注的消息时,程序会自动发邮件通知

import requests
import smtplib
import schedule
import time,os
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header

def account_save(keyword,qqmail):
#----保存用户邮箱和关键词信息----#
    with open(account_path,'w') as f:
        f.writelines([keyword+'\n',qqmail])
        f.close()

def account_load():
#----读取邮箱和关键词信息----#
    with open(account_path,'r') as f:
        f_content=f.readlines()
        return f_content[0][:-1],f_content[1]

def YanGongBu_spider(keyword):
#----爬取研工部通知栏前三项----#
    headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
    url='http://yjsb.zjnu.edu.cn/'
    res=requests.get(url,headers=headers)
    soup=BeautifulSoup(res.text,'html.parser')
    titles=soup.find_all('span',class_="meta-title")
    for title in titles[10:13]:
        if keyword in title.text:
            send_email(title.text,qqmail)

def send_email(title,qqmail):
#----使用710464440代发邮件----#
    account=qqmail
    password='这里填写邮箱密码'
    reveiver='710464440@qq.com'
    mailhost='smtp.qq.com'
    qqmail=smtplib.SMTP()
    qqmail.connect(mailhost,25)
    qqmail.login(account,password)
    content=title
    massage=MIMEText(content,"plain","utf-8")
    subject='研工部通知'
    massage['Subject']=Header(subject,'utf-8')
    try:
        qqmail.sendmail(account,reveiver,massage.as_string())
        print('邮件发送成功')
    except:
        print('邮件发送失败')
    qqmail.quit()

if __name__=='__main__':
    base_dir = os.path.dirname(__file__)  #获取当前文件夹的绝对路径
    account_path=base_dir+"/account.txt"
    print(account_path)
    if not os.path.exists(account_path):
        keyword=input('请输入你想关注的内容的关键词(例如:疫情):')
        qqmail=input("请输入你的qq邮箱地址(例如:715555555@qq.com):")
        account_save(keyword,qqmail)
    else:
        keyword,qqmail=account_load()
    YanGongBu_spider(keyword)
    input('按任意键退出程序')


#这段代码用于挂远程服务器
#schedule.every().day.at('17:30').do(YanGongBu_spider)
#while True:
    #schedule.run_pending()
    #time.sleep(1)

不足与改进

这段代码不足的是需要使用windows的任务计划程序,每天定时运行程序,如果那个时间电脑没开,程序则不会运行,而且如果在玩游戏,可能会被黑窗口弹一下,很难受,所以后面加了几行代码,可以挂在远程的服务器上,服务器24小时运行,完美解决问题。


小利利很快乐