CQUT校园通知网消息爬虫+Server酱微信推送
上了大三之后发现很多学校的通知都不会发送到班群里面,导致自己会错过很多重要信息,故想写一个爬虫来获取从当前时间之后的新的通知标题,并推送到微信上。
PS:推送到微信上这个想法来源是,很多时候都需要将消息以一种载体传送给我们,以前经常用的是邮件,但是随着聊天工具的普及,微信在国人的生活中占据了越来越重要的地位,所以用来做消息提示正好;而为什么会想到Server酱,原因是在HW期间,为了和同事一起检测设备是否存活,使用Python编写了判断设备存活的脚本,并将实时将挂掉的设备使用Server酱实时推送到微信上,这样就不用定期去人工检查设备,大大解放了双手(计算机本就是用来解放双手的
整个过程很简单:
获取网页源码->解析源码并获取通知列表->与旧列表对比,将新的通知整理->通过Server酱接口推送到微信上
CQUT的通知网网址为:
https://tz.cqut.edu.cn/

获取源码,使用requests库即可
import requests
def GetRep(url):
try:
rep=requests.get(url,timeout=5)
rep.encoding='utf-8'
return rep.text
except Exception as e:
print(e)
return "NULL"
尝试了一下,加不加请求头都可以,为了简便就不加
另外因为出现了requests获取网站相应text中文乱码的问题,所以使用语句
rep.encoding='utf-8'
将rep使用 utf-8 进行编码,其解决思路来源:https://blog.csdn.net/chaowanghn/article/details/54889835
进行目标源码的解析,很容易可以看到我们想要获取到的标题所在的位置:

所以使用xpath解析的代码部分为:
def GetNotice(rep):
html = etree.HTML(rep)
result = html.xpath('//span[@class="head"]/text()')
return result
返回的result是当前捕获通知的列表,接着是与旧的列表进行比较,,同时将新的通知信息整理到message里面,在微信公众号推送消息中的换行不知道咋弄,所以直接使用 ### 三个#号来进行消息的分割,这一步也很简单:
def CheckNotice(oldlist,noticelist):
message=""
for notice in noticelist:
if notice not in oldlist:
message+=notice+"###"
return message
最后是将信息通过Server酱的API接口发送到微信上,关于Server酱,你需要了解的是:
http://www.jeepxie.net/article/727449.html

其使用语法为:
# encoding:utf-8
import requests
api = "https://sc.ftqq.com/{YOUR-KEY}.send"
title = u"紧急通知"
content = """
#服务器又炸啦!
##请尽快修复服务器
"""
data = {
"text":title,
"desp":content
}
req = requests(api,data = data)
上面是在python2.x下的规则,当在python3.x的环境下时,需要将最后一句修改为:
req = requests.post(api, data=data)
在我们这个项目中这部分的代码为:
import requests
api = "https://sc.ftqq.com/{YOUR-KEY}.send"
def SendNotice(message):
try:
title="CQUT新通知"
data = {
"text": title,
"desp": message
}
# print("4")
req = requests.post(api, data=data)
# print("5")
except Exception as e:
print(e)
pass
return
注意这一行
api = "https://sc.ftqq.com/{YOUR-KEY}.send"
这里的{YOUR-KEY}是需要你自己用GitHub账号登入网站后获得的,网站就是这个网站
其KEY所在位置在:

当然官方使用文档更详细,嘿嘿
最后就是整个项目的源代码,查资料加写代码花了一小段时间趴,主要是复习一下爬虫和Server酱的用法,{YOUR-KEY}需要自己替换,以下:
import requests
from lxml import etree
import time
api = "https://sc.ftqq.com/{YOUR-KEY}.send"
def GetRep(url):
try:
rep=requests.get(url,timeout=5)
rep.encoding='utf-8'
return rep.text
except Exception as e:
print(e)
return "NULL"
def GetNotice(rep):
html = etree.HTML(rep)
result = html.xpath('//span[@class="head"]/text()')
return result
def SendNotice(message):
try:
title="CQUT新通知"
data = {
"text": title,
"desp": message
}
# print("4")
req = requests.post(api, data=data)
# print("5")
except Exception as e:
print(e)
pass
return
def CheckNotice(oldlist,noticelist):
message=""
for notice in noticelist:
if notice not in oldlist:
message+=notice+"###"
return message
def main():
url='https://tz.cqut.edu.cn/'
rep = GetRep(url)
oldlist = GetNotice(rep)
while True:
print("now start get_notice , time is: ")
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
rep1 = GetRep(url)
# print("1")
noticelist = GetNotice(rep1)
if oldlist!=noticelist:
# print("2")
message=CheckNotice(oldlist,noticelist)
SendNotice(message)
oldlist=noticelist
# print("3")
time.sleep(600)
if __name__=='__main__':
main()
丢到服务器上跑,十分钟检测一次是否有新的通知,有的话将列表更新,并发送消息到微信,明天看看微信推送情况再进行贴图更新或者代码修改。
:D
二更
成功运行,可以进一步考虑将python程序长久运行在服务器后台

:D
CQUT校园通知网消息爬虫+Server酱微信推送的更多相关文章
- Server酱微信推送中的问题
1.写在URL的文字就是不在微信端显示 当时为了明显提示写了个这个:<--11111-->后来发现1111不能显示,去掉两边的<---->就可以了, 2.输出到微信端的文字不换 ...
- 免注册公众号的三种微信推送消息服务的C#代码实现
有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...
- 让微信推送Jenkins构建消息
Jenkins作为开发必备之神器,各家大小公司都在使用.Jenkins自身内置了基于邮件推送构建结果的功能.但是随着移动互联网的发展,邮件这玩意已经越来越少使用了,是否有一种办法能把jenkins构建 ...
- [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。
背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...
- 使用WxPusher给自己的个人微信发送提醒消息(WxPusher微信推送服务)
1.背景 我们很多时候,我们在服务器上运行软件,发生一些业务异常,需要给我们发送一个及时的提醒,或者是使用一些耗时软件,比如抢车票,抢课,刷优惠券当任务运行成功以后,也需要及时的发送消息给自己 ,告诉 ...
- java-给微信推送消息 利用企业微信
目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:COR ...
- Android Server Push - MQTT推送实现tokudu
转自:http://www.juapk.com/thread-2834-1-1.html 项目说明:采用MQTT协议实现Android推送消息传输协议:IBM的MQTT协议 JAR包地址:下载服务器安 ...
- SQL Server 2000向SQL Server 2008 R2推送数据
[文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...
- python 微信推送模板消息
#!/usr/bin/env python #-*- coding: utf-8 -*- import httplib import json import MySQLdb #从数据库中获取acces ...
随机推荐
- Dem地形数据转换为cass支持的dat格式教程
一.获取dem数据各类精度的dem高程数据下载这里不赘述,可以查阅这篇文章:高程数据下载 这里我们以12.5m精度的dem为例进行转换: 二.将dem数据转换为文本我们这里先将地形数据加载入globa ...
- 【Mycat】Mycat核心开发者带你轻松掌握Mycat路由转发!!
写在前面 熟悉Mycat的小伙伴都知道,Mycat一个很重要的功能就是路由转发,那么,这篇文章就带着大家一起来看看Mycat是如何进行路由转发的,好了,不多说了,我们直接进入主题. 环境准备 软件版本 ...
- 生活tips_织毛衣
生梨润肺化痰好,苹果止泻营养高. 黄瓜减肥有成效,抑制癌症猕猴桃. 番茄补血助容颜,莲藕除烦解酒妙. 橘子理气好化痰,韭菜补肾暖膝腰. 萝卜消食除胀气,芹菜能治血压高. 白菜利尿排毒素,菜花常吃癌症少 ...
- [开源]CSharpFlink(NET 5.0开发)分布式实时计算框架,PC机10万数据点秒级计算测试说明
github地址:https://github.com/wxzz/CSharpFlinkgitee地址:https://gitee.com/wxzz/CSharpFlink 1 计算 ...
- SpringBean生命周期-Version-v5.1.0.RELEASE
首先入口选定在org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons ...
- 不要再说不会Spring了!Spring第一天,学会进大厂!
工作及面试的过程中,作为Java开发,Spring环绕在我们的身边,很多人都是一知半解,本次将用14天时间,针对容器中注解.组件.源码进行解读,AOP概念进行全方面360°无死角介绍,SpringMV ...
- [Kafka][1][初识Kafka]
目录 第1章 初识Kafka 1.1 发布与订阅消息系统 1.1.1 如何开始 1.1.2 独立的队列系统 1.2 Kafka登场 1.2.1 消息和批次(Message and batch) 1.2 ...
- VulnHub靶场学习_HA:Forensics
HA:Forensics Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-forensics,570/ 背景: HA: Forensics is an ...
- Markdown的应知应会
Markdown介绍 什么是Markdown Markdown是一种纯文本.轻量级的标记语言,常用作文本编辑器使用.和记事本.notepad++相比,Markdown可以进行排版:和Word相比,Ma ...
- 如何用Prometheus监控十万container的Kubernetes集群
概述 不久前,我们在文章<如何扩展单个Prometheus实现近万Kubernetes集群监控?>中详细介绍了TKE团队大规模Kubernetes联邦监控系统Kvass的演进过程,其中介绍 ...