python爬虫实现对年级网站通知的自动化推送

python爬虫实现对年级网站通知的自动化推送

前言

这个代码项目的诞生来源于我自己的懒惰。我们学院有自己的年级网站(以下简称级网),因此很多重要通知会在网站发布。虽然作为网站维护者的我因为日常 学习生活事情繁琐,加上级网通知很多时候都是不定时不定量的发,我也因为自己懒于看级网通知导致经常错过和自己有关的通知。因此产生了想写一个爬虫来替我完成看级网有没有新的通知并提醒我的任务。

原理

利用requests库对指定网站发起请求,并加载资源到本地。利用BeautifulSoup库对加载的资源进行检索、切片、贴合等操作。首先找到对应的文章标题标签,并获取链接和标签内容。再找到文章发布时间的标签并和标题绑定。判断发布时间和当前日期是否一致,一致则向微信和邮箱推送内容。不一致则不进行任何操作。

函数库
import time
import datetime
import urllib.request
import requests
import json
from bs4 import BeautifulSoup
import smtplib
from email import (header)
from email.mime import (text, multipart)
安装方法
pip install --upgrade pip
pip install beautifulsoup4
pip install requests
函数

1.模拟浏览器向网站发出请求并加载资源到本地

def getTitle (url):
    headers = ('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36")
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    urllib.request.install_opener(opener)
    html = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')
    bs = BeautifulSoup(html,'html.parser')
    Title_links = bs.select('特定标签')
    return Title_links

2.获取当前日期

def getNowDate():
    now_time = datetime.datetime.now()
    yes_time = now_time+datetime.timedelta(days=-3)
    current_time = yes_time.strftime('%Y-%m-%d')
    return current_time

3.对所筛选出的数据进行整合

for link in linklist_Title:
    contents.append(link.text.strip())
    links.append(link.get('href'))

for date in linklist_Date:
    dates.append(date.text.strip())
#获取指定日期的文章信息
for date,text, link, in zip(dates, contents, links):
    data = date+' '+text+':http://xxx.xxx.com'+link
    if date == Now_Date:
        send_data = send_data+data+'\n\n'

4.群发邮件

def sender_mail():
    smtp_Obj = smtplib.SMTP_SSL('smtp.qq.com',465) # 连接qq邮箱SMTP服务器,端口是465
    sender_addrs = 'xxx@foxmail.com'       # 发件人邮箱账号
    password = "uaxxxxxxxxxxxge"           # 发件人邮箱密码  即配置生成的授权码
    smtp_Obj.login(sender_addrs, password)
    receiver_addrs = ['yyy@foxmail.com','zzz@foxmail.com']  #群发的收件人
    for email_addrs in receiver_addrs:
        try:
            msg = multipart.MIMEMultipart()
            msg['From'] = "InetGeek"
            msg['To'] = email_addrs
            msg['subject'] = header.Header('今日级网更新通知', 'utf-8')
            msg.attach(text.MIMEText('今日:['+getNowDate()+']级网最新通知如下:\n\n'+send_data, 'plain', 'utf-8'))  #邮件内容
            smtp_Obj.sendmail(sender_addrs, email_addrs, msg.as_string())  # 发件人邮箱账号、收件人邮箱账号、发送邮件
            print('成功发送给%s' % ( email_addrs))
        except Exception as e:
            continue
    smtp_Obj.quit() #退出

5.用json格式向push+推送文章

token = '4bxxxxxxxxxxxxxxxxxxxxxxx5'
title= '今日级网更新通知'
content = send_data 
url = 'http://pushplus.hxtrip.com/send'
data = {
    "token":token,
    "title":title,
    "content":content
}
body=json.dumps(data).encode(encoding='UTF-8')
headers = {'Content-Type':'application/json'}
requests.post(url,data=body,headers=headers)
源码

gihub仓库:InetGeek

云服务器定时计划

定时执行shell指令

/usr/bin/python /www/server/panel/class/Notice_Spider.py

博客:Digran’s Blog

效果

1.微信端
微信效果
2.QQ邮件端
QQ邮件效果

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InetGeek

小编写不动了,给小编加鸡腿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值