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 ...
随机推荐
- nginx优化【收藏篇】
1. 动态页返回码 2. 错误页面优化 3. 连接数优化 4.配置优化 5.日志优化 关于运维学习.分享.交流,笔者开通了微信公众号[大隆爱分享],感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的 ...
- 采用“传统”方式获取当前HttpContext
我们知道"依赖注入"已经成为了.NET Core的基本编程模式,表示当前请求上下文的HttpContext可以通过注入的IHttpContextAccessor服务来提取.有时候我 ...
- 聊一聊无锁队列rte_ring
之前用基于dpdk 实现小包快速转发的时候有用到无锁队列!今天就来看看吧!(后续完成了去dpdk化,直接在内核完成快速转发功能) dpdk的无锁队列ring是借鉴了linux内核kfifo无锁队列.r ...
- tcpack--3快速确认模式- ack状态发送&清除
ACK发送状态的转换图 ACK的发送状态清除 当成功发送ACK时,会删除延迟确认定时器,同时清零ACK的发送状态标志icsk->icsk_ack.pending ACK发送事件主要做了:更新快速 ...
- linux netfilter nat1
linux netfilter nat1 2020整理云笔记上传
- uboot——do_bootm
do_bootm |----------根据参数得到 image的起始地址 |----------比较header的 magic_num 是否为 zImage | |是 | | zImage路线 | ...
- Ceph S3 基于NGINX的集群复制方案
前言 ceph的s3数据的同步可以通过radosgw-agent进行同步,同region可以同步data和metadata,不同region只能同步metadata,这个地方可以参考下秦牧羊梳理的 c ...
- 查询OSD运行在哪些cpu上
前言 在看CPU相关的文章的时候,想起来之前有文章讨论是否要做CPU绑定,这个有说绑定的也有说不绑定的,然后就想到一个问题,有去观测这些OSD到底运行在哪些CPU上面么,有问题就好解决了,现在就是要查 ...
- ceph客户端服务端属性匹配关系
ceph的server是定期会发布版本,而它的客户端是放到linux 内核当中的,一些属性的支持是依赖于内核版本的,这样就存在一些问题,一些功能后端支持,而客户端旧了:还有可能是客户端用的很新的内核, ...
- Java(三)常用类
@ 目录 Java常用类 一.字符串相关的类 1.String类 2.StringBuffer类 3.StringBuilder类 二.JDK8以前的日期时间API 1.java.lang.Syste ...