程序员

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

作者:admin 2021-04-27 我要评论

python爬虫实现对年级网站通知的自动化推送 前言 原理 函数库 安装方法 函数 源码 云服务器定时计划 效果 前言 这个代码项目的诞生来源于我自己的懒惰。我们学院...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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邮件效果

;原文链接:https://blog.csdn.net/qq_34532102/article/details/115434285

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 解密阿里云高效病原体基因检测工具

    解密阿里云高效病原体基因检测工具

  • 探秘!在阿里云做产品经理是怎样的体验

    探秘!在阿里云做产品经理是怎样的体验

  • 精彩回顾 | 阿里云 Serverless Develop

    精彩回顾 | 阿里云 Serverless Develop

  • 为什么SOFA RPC调用30s还不超时?

    为什么SOFA RPC调用30s还不超时?

腾讯云代理商
海外云服务器