福建工程学院更名通知程序 python Congratulations

 福建工程学院简介

程序介绍

该程序原理 : 爬取福建工程学院官网的通知,查看最新通知是否有"福建理工大学” "更名" ,如果有则官方发出通知,程序发送邮件。    

可以将此程序运行到服务器上程序会每小时爬取官网一次,建议各位不要把时间间隔更改太小,学校服务器吃不消

完整代码

下面有完整代码,不想复制粘贴,可以访问下方  github

GitHub - linjie111/FJUT_rename

run at main.py

Congratulations

 

 spider.py

import time
from urllib.request import Request
from urllib.request import urlopen
import urllib.parse
import datetime
from bs4 import BeautifulSoup


def get_new_notice(website: str):
    # 直接使用 urlopen('网址') 返回 404 错误,对方网站设置有反爬虫机制
    requst = Request(website)
    requst.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')  # 添加请求头,模仿人使用浏览器访问页面
    response = urlopen(requst)
    # 一、获取该网址的源代码
    html = response.read()

    # 二、解析源代码
    bs = BeautifulSoup(html, 'html.parser')  # 爬取该网址的 HTML 源代码
    # print(bs)

    now = time.localtime()

    now_time = time.strftime("%Y-%m-%d", now)

    date_list = []

    # 三、使用 find 方法找到页面上的通知
    # 这里我用最简单的方式,把第一页的所有数据找到,最新的通知一般不会超过第一页,我的功能只是一个提醒,只要有数据提醒就行,并无大碍
    # find 返回的是单个  find_all 返回的是多个 - list
    date_list1 = bs.find('li', {'class': 'list_item i1'})
    date_list.append(date_list1)
    name_list2 = bs.find('li', {'class': 'list_item i2'})
    date_list.append(name_list2)
    name_list3 = bs.find('li', {'class': 'list_item i3'})
    date_list.append(name_list3)
    name_list4 = bs.find('li', {'class': 'list_item i4'})
    date_list.append(name_list4)
    name_list5 = bs.find('li', {'class': 'list_item i5'})
    date_list.append(name_list5)
    name_list6 = bs.find('li', {'class': 'list_item i6'})  #
    date_list.append(name_list6)
    name_list7 = bs.find('li', {'class': 'list_item i7'})  #
    date_list.append(name_list7)
    name_list8 = bs.find('li', {'class': 'list_item i8'})  #
    date_list.append(name_list8)
    name_list9 = bs.find('li', {'class': 'list_item i3'})  #
    date_list.append(name_list9)

    # print(date_list)
    for i in date_list:

        span_list = i.find_all("span")

        span_time = span_list[2].get_text()
        cc = span_time
        #  print(name_list1)  # 爬取的的结果存放在列表中,使用时需要加下标,否则会报错
        #   print(span_time)
        #  print(now_time)
        if span_time == now_time:
            # AttributeError: ResultSet object has no attribute 'find_all'.
            #  print(cc)

            span_date = span_list[1].get_text()

            #  print(span_date)

            return span_date

            # print("不是今天")
            # return span_date

email163.py

import smtplib
from email.mime.text import MIMEText
from email.header import Header


def send_email(text):
    # 这里使用的是163.com
      mail_host = "smtp.163.com"  # 设置服务器       邮箱服务器
    mail_user = "15243***065@163.com"  # 用户名   邮箱账号
    mail_pass = "2997854888"  # 口令              邮箱密码
 
    sender = '15243***065@163.com'  # 发送邮箱  和上方用户名一致
    receivers = ['2997854888@qq.com']  # 接收者的邮箱
    message = MIMEText(text, 'plain', 'utf-8')
    message['From'] = Header('FJUT')
    message['To'] = Header("2997854888")  # 填写接收人账号 @ 前 字符串  比如邮箱为 297854888@qq.com  则填写 2997854888

    subject = 'Congratulations'
    message['Subject'] = Header(subject, 'utf-8')

    try:
        smtpObj = smtplib.SMTP()
        print(1)
        smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
        print(2)
        smtpObj.login(mail_user, mail_pass)
        print(3)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")

main.py

import time

from email163 import send_email
from spider import get_new_notice

import schedule

data_update = get_new_notice("https://www.fjut.edu.cn/561/list.htm")

str1 = "福建理工大学"
str2 = "更名"
str3 = "大学"


def run():
    if str1 in data_update or (str2 in data_update and str3 in data_update):
        #  或 可以发邮件者 发短信  进行通知可以定时每一个小时访问一次
       # print("特\"大\"喜讯!教育部正式批复,我校更名为福建理工大学")
        send_email("特\"大\"喜讯!教育部正式批复,我校更名为福建理工大学")
        print(time.localtime())
    else:
        print("No new notifications ")


schedule.every(1).hours.do(run)  # 每隔一小时执行一次
# 先执行一次
run()

while True:
    # run_pending:运行所有可以运行的任务
    schedule.run_pending()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值