这个代码项目的诞生来源于我自己的懒惰。我们学院有自己的年级网站(以下简称级网),因此很多重要通知会在网站发布。虽然作为网站维护者的我因为日常 学习生活事情繁琐,加上级网通知很多时候都是不定时不定量的发,我也因为自己懒于看级网通知导致经常错过和自己有关的通知。因此产生了想写一个爬虫来替我完成看级网有没有新的通知并提醒我的任务。
利用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
1.微信端
2.QQ邮件端
需要注意的是,调用的封装的数据库,和jQuery的保存地址 一、注册 (1)写文本框...
在新的MySQL 8.0.23中,引入了新的有趣功能:不可见列。 这是第一篇关于这个新功...
最近在学习jQuery时接触到了show()、hide()、toggle()函数,于是利用这几个函数...
git clone支持https和git(即ssh)两种方式下载源码: 当使用git方式下载时,如...
详解Spring Controller autowired Request变量 spring的DI大家比较熟悉了,对于...
1 概述 在接下来的时间里,将会入手ASP.NET MVC这一专题,尽量用最快的时间,最...
在Asp.net Core之前所有的Action返回值都是ActionResult,Json(),File()等方法返...
多年以后,面对台下五彩斑斓的Jetbrain和Vscode用户,这位曾经的资深的vim追随者...
大家好我是爱景甜的网工我是一个思科出身专注于华为的网工 好了话不多说进入正题...
一个常见的场景,获取:标签背景图片链接: 如字符串:var bgImg = "url (\" htt...