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 ...
随机推荐
- JAVA中使用JSONArray和JSONObject
json 就是一个键对应一个值,简单的一对一关系. JSONObject json对象,就是一个键对应一个值(键值对),使用的是大括号{ },如:{key:value} JSONArray jso ...
- VMware虚拟机 - 解决主机每次重启后 VMWare 都无法上网的问题
背景 每次重启自己电脑,重新打开 Vmware 虚拟机,再 ping 百度时,又显示无法 ping 通 但明明已经把 Vmware 的虚拟网卡重置了 那到底要如何解决呢? 解决方案 进入服务界面 将 ...
- nginx&http 第二章 ngx启动多进程
Nginx服务器使用 master/worker 多进程模式. 主进程(Master process)启动后,会接收和处理外部信号: 主进程启动后通过fork() 函数产生一个或多个子进程(work ...
- 开发工具之Git(二)
目录 四.Git安装与配置 (一)安装 (二)配置 (三)创建仓库 五.Git基本命令 六.Git分支 上一篇讲了Git的基本原理,建议没看过的同学先看看,然后这次我们来讲Git的具体操作和指令. 四 ...
- solr 笔记
1.sorl其实是对存储的内容,根据相应的域和域的类型先分词,停顿,过滤(大小写转换)等等;然后建立多级索引.对搜索条件也是根据相应的域和域的类型进行分词,停顿,同义词,过滤(大小写转换)等等;然后建 ...
- 支付宝电脑网站支付 alipay.trade.page.pay
只涉及支付接口 其他接口没有使用 支付宝官方文档:https://docs.open.alipay.com/270/105899/ 支付接口文档 https://docs.open.alipay.co ...
- 已安装的nginx添加其他模块
总体操作就是添加新模块并重新编译源码,然后把编译后的nginx可执行文件覆盖原来的那个即可.1 查看已安装的参数nginx -V拷贝那些巴拉巴拉的参数,后面编译的时候使用 2 下载相同版本号的源码,解 ...
- 回收站都找不到的文件,EasyRecovery帮你找
"有人相爱,有人看海,有人深夜两点还在找文件."没错,有人正是不才本人. 细数下来,这已经是本人第五六七八次丢文件了,每次丢的原因很奇怪:删错了.保存完找不到了.或者没有原因就那样 ...
- 思维导图软件iMindMap怎么用模板制作思维导图
随着思维导图的不断发展,市场上相关的软件也越来越多.像XMind.MindManager等.每一款软件都有它独特的亮点.作为众多思维导图软件中的一款,iMindMap算是比较亮眼的了.现在很多人都在用 ...
- 一个定时任务管理器,基于Go语言和beego框架开发
链接 https://github.com/lisijie/webcron 安装说明 系统需要安装Go和MySQL. 获取源码 $ go get github.com/lisijie/webcron ...