前言

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

原理

利用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

CSDN博客:InetGeek

Last modification:April 4th, 2021 at 10:50 pm
小编饿得写不动了,请给小编加鸡腿