上了大三之后发现很多学校的通知都不会发送到班群里面,导致自己会错过很多重要信息,故想写一个爬虫来获取从当前时间之后的新的通知标题,并推送到微信上。

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://sc.ftqq.com/3.version

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账号登入网站后获得的,网站就是这个网站

http://sc.ftqq.com/3.version

其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酱微信推送的更多相关文章

  1. Server酱微信推送中的问题

    1.写在URL的文字就是不在微信端显示 当时为了明显提示写了个这个:<--11111-->后来发现1111不能显示,去掉两边的<---->就可以了, 2.输出到微信端的文字不换 ...

  2. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  3. 让微信推送Jenkins构建消息

    Jenkins作为开发必备之神器,各家大小公司都在使用.Jenkins自身内置了基于邮件推送构建结果的功能.但是随着移动互联网的发展,邮件这玩意已经越来越少使用了,是否有一种办法能把jenkins构建 ...

  4. [wxpusher]分享一个服务器推送消息到微信上的小工具,可以用于微信推送提醒和告警。

    背景 作为一个程序员,业余搞点自己的东西很正常,一般程序员都会有一两台自己的服务器,谁叫今天xx云搞活动,明天yy云搞活动呢. 自家的服务器用来跑爬虫,跑博客,或者跑一些个人业务,但当服务有新状态,抢 ...

  5. 使用WxPusher给自己的个人微信发送提醒消息(WxPusher微信推送服务)

    1.背景 我们很多时候,我们在服务器上运行软件,发生一些业务异常,需要给我们发送一个及时的提醒,或者是使用一些耗时软件,比如抢车票,抢课,刷优惠券当任务运行成功以后,也需要及时的发送消息给自己 ,告诉 ...

  6. java-给微信推送消息 利用企业微信

    目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:COR ...

  7. Android Server Push - MQTT推送实现tokudu

    转自:http://www.juapk.com/thread-2834-1-1.html 项目说明:采用MQTT协议实现Android推送消息传输协议:IBM的MQTT协议 JAR包地址:下载服务器安 ...

  8. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

  9. python 微信推送模板消息

    #!/usr/bin/env python #-*- coding: utf-8 -*- import httplib import json import MySQLdb #从数据库中获取acces ...

随机推荐

  1. Uipath_考证学习之路

    写在前面 第一次考证的时候,就是为了考证而考证,从网上获取了试题,修改了一下,就通过了,对 REFramework的了解甚少,经过几周的学习,决定赶在 4.30号考证收费之前再重新考一次. 原文章发表 ...

  2. CSS不同颜色按钮实例

    CSS减少代码重复技巧非常多,以主要包含采用相对尺寸.半透明颜色的实例来说明CSS减少代码重复技巧的一些运用. 以下为通过CSS代码实现的一个"Yes!"按钮效果以及相应的代码: ...

  3. CSS动画animation

    transition: 过渡动画transition-property: 属性transition-duration: 间隔transition-timing-function: 曲线transiti ...

  4. AI时代,还不了解大数据?

    如果要问最近几年,IT行业哪个技术方向最火?一定属于ABC,即AI + Big Data + Cloud,也就是人工智能.大数据和云计算. 这几年,随着互联网大潮走向低谷,同时传统企业纷纷进行数字化转 ...

  5. 微信告警如何配置?用Cloud Alert快速实现微信告警

    在当下互联网蓬勃发展的时代里,微信已经成为了人们生活中不可分割的一部分.作为苦逼的运维人员,我们自然也得跟得上时代的步伐,将微信添加进告警的通知方式里.如果能够将告警消息第一时间发送到微信中,更清楚地 ...

  6. shell编程之awk

    awk是一种用于处理数据和生成报告的编程语言 awk可以在命令行中进行一些简单的操作,也可以被写成脚本来处理较大的应用问题 awk与grep.sed结合使用,将使shell编程更加容易 awk工作模式 ...

  7. 重闯Sqli-labs关卡第三天(6-10关)

    第六关(双注入GET双引号字符型注) 核心代码: 1 $id = '"'.$id.'"'; 2 $sql="SELECT * FROM users WHERE id=$i ...

  8. zabbix的搭建及操作(3)监控 MySQL 及 HTTP 状态监控

    书接上回 -- 详情点击 Server端以配置好 mariadb(MySQL) 及 http 服务 Zabbix实现监控 mysql 数据库 server服务器端配置 vim /usr/local/z ...

  9. 你也想当流量UP主?那就点开看看吧!

    2009年6月份,哔哩哔哩(B站)在一众期待中诞生,它汇聚了天南海北当时小众的二次元同好,它也存在诸多不足,大家亲切地叫它"小破站". 而如今,它成长为一棵枝繁叶茂的参天大树,成为 ...

  10. oracle整表数据被误删除之寻踪

    问题描述 开发同事在在14点左右发现任务表task_info数据不正确,3个小时之前的数据消失了,数据截至时间11:38:27 问题分析 查询过dba_source,只找到一个删除该表的存储过程,而且 ...