最近学校开学了,在听研究生宣讲会的时候老师一直强调要留意下学院的通知,因此想想是否能够利用自己所学的技术实现推送通知到我们宿舍的微信群里面,大概思路分为3步,首先是数据采集,然后就是对接微信实现推送,最后就是部署在服务器上运行,第一步很简单,第二部用wxpy这个实现,先看第一部分,目标网站如图所示
该站点没有反爬,很容易实现,接下来就是微信推送实现了,我们需要搜索下群聊名称,再实现发送,官方文档是有Bot().groups().search这个方法,但是我运行扫码后发现无法搜索我们寝室群聊,后面再翻阅文档,要搜到的前提群必须是在聊天对话中或者该群在通讯录中,瞬间就明白了,因此我在微信上先把我们的微信寝室群加入到我的通讯录中,再接着搜索就可以显示出来了,部分代码如下
bot = Bot()
group = bot.groups(update=True).search('224寝室')[0]
然后即可通过send方法发送消息了,实现分钟运行,使用schedule即可实现,经过整理和后代码在本地测试后可以正常实现功能,然后打包部署到服务器上,突然发现在本地运行每次都会有二维码照片弹出,而服务器这个是没有任何可视化图形窗口的,后面查看官方文档发现设置参数可以实现
bot = Bot(cache_path=True,console_qr=-2)
group = bot.groups(update=True).search('224寝室')[0]
第一个参数cache_path是设置了缓存,就是第一次扫码后后面就不用再次扫码了,第二个参数console_qr是将二维码以字符形式输出到控制台,那这个就完美契合服务器的特征了。全部代码如下所示
#coding:utf-8
import requests
from lxml import etree
import datetime
from wxpy import *
import schedule
import time
bot = Bot(cache_path=True,console_qr=-2)
#tail -n 500 nohup.out
all_title = ['浙江工业大学“十四五”省一流学科(A类) 推荐名单公示', '浙江工业大学关于开展本科生研究生课程互选工作的通知', '2022年秋季学期研究生公共课补考安排', '2022年秋季学期研究生课程教学安排及网上选课操作指南', '关于做好国家留学基金委2023年创新型人才国际合作培养项目申报及年度考核工作的通知', '学科交叉培养博士研究生专项计划导师团队遴选答辩通知', '2022年本硕博一体化人才培养遴选专栏', '关于开展第八批百家示范性专业学位研究生实践基地建设项目申报的通知', '关于做好2022年9月毕业研究生学位论文评审、答辩及学位授予等工作的通知']
def job():
def send_news(text):
group = bot.groups(update=True).search('224寝室')[0]
group.send(u'{}'.format(text))
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 6X Build/PKQ1.180904.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 UWS/3.22.1.210 Mobile Safari/537.36 AliApp(DingTalk/6.5.35) com.alibaba.android.rimet/25574834 Channel/700159 language/zh-CN abi/64 UT4Aplus/0.2.25 colorScheme/light',
}
url = 'http://www.gs.zjut.edu.cn/jsp/index.jsp'
r = requests.get(url,headers=headers)
html = etree.HTML(r.text)
dates = list(html.xpath('//div[@id="ibox2"]/div[3]/ul/li/span/text()'))
titles = list(html.xpath('//div[@id="ibox2"]/div[3]/ul/li/a/text()'))
links = ['http://www.gs.zjut.edu.cn/jsp/'+ii for ii in list(html.xpath('//div[@id="ibox2"]/div[3]/ul/li/a/@href'))]
for ii,jj, kk in zip(dates,titles,links):
if jj not in all_title:
messages = '今日通知:标题:{} ' \
'链接:{} '.format(jj,kk)
print(messages)
send_news(messages)
all_title.append(jj)
schedule.every(1).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
接着将代码部署到服务器上,上传后直接运行python3 xxx.py 后发现关闭finalshel(远程服务器连接工具)l就运行不了了,接下来直接使用nohup python3 xxx.py &命令挂在后台运行,发现这样挂在后台运行没有码出来,因此我们再使用命令
tail -n 500 nohup.out
获取里面的所有输出,如图所示
接下来我们扫码即可
root@VM-8-3-ubuntu:/home/ubuntu# ps -ef|grep "python"
root 1156 1 0 Jul16 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 1235 1 0 Jul16 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root 22337 21568 0 10:30 pts/0 00:00:00 python3 zgd_bug.py
root 24252 21568 0 10:33 pts/0 00:00:00 grep --color=auto python
查看进程,代码正在运行,现在我们可以关掉finalshell,这个程序也会一直再服务器上运行了
如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!


点击此处登录后即可评论