当RPA流程自动控制机器人遇到了GitHub Actions和Wxpusher,实现自动推送一体化服务
当我要天天看研招网是否更新时,我想到了RPA流程自动控制机器人(Robotic process automation)…
这里的RPA流程自动控制机器人是指什么?你可以简单理解为自动化控制
试想一下,为了获取考研最新动态,你不得不随时随刻盯着研招网,经历过的人都知道那种心理煎熬感…但是如果有这么一套自动化流程程序,每过5分钟,自动获取研招网动态,如果研招网更新,则立马以消息推送或电话的方式通知你,这样你就可以无忧无虑地~~(打开你的游戏啦)专心~~备考啦!
没错,这就是今天要给大家介绍的内容,当你天天要做一件简单、枯燥的事情的时候,不妨试试RPA流程自动控制。接下来我们将会以获取研招网最新动态为例,教你如何打造自己的RPA机器人。本教程需用到如下技术栈:
- GitHub Actions
- Python
流程分析
首先,你需要想办法获取到研招网最新动态,其次,获取到数据后你要对获取的消息进行处理判断,是不是你所需要的信息。这里使用的是python爬虫。
然后,处理好信息后,你需要能够将信息快速准确地送达给你。这里使用的是Wxpusher。
最重要的是如何实现持续监控呢?这里有必要介绍一下触发器的概念了。
触发器,功能顾名思义,就是用于触发,你可以设置触发条件,例如每过多长时间触发,完成特点事件后触发等。
那如何实现触发效果呢?这里是基于GitHub actions实现定时触发效果。
过程实现
第一步:python爬虫获取研招网最新动态
编写python爬虫脚本,爬取研招网站,获取HTML信息并分析是否是今日更新信息:
from push import * # 导入编写的推送模块
import time # 导入python自带时间模块
import urllib.request,urllib.error # 获取网页数据
# 编写主函数
def main():
baseurl = "https://yz.chsi.com.cn/kyzx/kydt/?start=0" # 网站url
askURL(baseurl)
# 爬取网站
def askURL(url):
head = { # 模拟浏览器头部信息,向服务器发送消息
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 86.0.4240.198Safari / 537.36"
} # 用户代理——表示告诉服务器,我们是什么类型的机器·浏览器(本质上是告诉浏览器,我们可以接受什么水平的文件内容)
request = urllib.request.Request(url, headers=head)
html = ''
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
print("---正在爬取页面HTML,请稍等---")
print(html) #测试:查看页面HTML
date = time.strftime('%Y-%m-%d',time.localtime(time.time())) # 获取今天日期
# print(date)
if date in html: # 如果今天有更新的就推送
push(1)
print("更新啦")
else:
push(0)
print("未更新")
except urllib.error.URLError as e:
if hasattr(e,"code"): #判断e对象是否包含对应的属性
e = str(e.code)
print("爬取失败,e.code" + e)
if hasattr(e,"reason"):
e = str(e.reason)
print("爬取失败,e.reason:" + e)
return html
if __name__ == "__main__":
#调用函数
main()
print("运行完毕")
第二步:WxPusher实现消息推送
编写WxPusher模块:
import requests
import json
def push(status):
if status:
datas = json.dumps({
"appToken":"AT_xxx",
"content":"研招网更新了!快去看看是不是你需要的内容!",
"contentType": 1,
"summary":"研招网更新了!",
"uids":["UID_xxxx"],
"url":"https://yz.chsi.com.cn/kyzx/kydt/?start=0"
})
else:
datas = json.dumps({
"appToken": "AT_xxx",
"content": "呜呜呜!研招网还没有更新,请耐心等待!!!",
"contentType": 1,
"summary": "研招网还没有更新",
"uids": ["UID_xxxx"],
"url": "https://yz.chsi.com.cn/kyzx/kydt/?start=0"
})
headers = {'Content-Type': 'application/json'}
r = requests.post("http://wxpusher.zjiecode.com/api/send/message", data=datas,headers=headers)
print(r.text)
print(r.status_code)
第三步:部署GitHub actions上实现自动执行工作流程(Workflow)
- 在GitHub上新建一个仓库,这里以workflow为例,将第一步和第二步编写的脚本放置一个文件夹中(这里以”自动化爬取研招网更新状态“为例)上传至GitHub根目录下。
- 点击Actions,建立你的工作流(workflow)
- 在workflow中编写如下自动化脚本
# 这是帮助您开始操作的基本工作流程
name: 自动获取研招网更新状态
# 控制何时运行工作流(每5分钟运行一次)
on:
schedule:
- cron: '*/5 * * * *'
# 工作流运行由一个或多个作业组成,这些作业可以顺序或并行运行
jobs:
# 这个工作流包含一个名为“job1”的作业。
job1:
# 作业将在其上运行的系统
runs-on: ubuntu-latest
# 步骤表示将作为作业的一部分执行的任务序列
steps:
# 克隆仓库
- name: "Checkout codes"
uses: actions/checkout@v2
# 初始化Python环境
- name: "Setup Python"
uses: actions/setup-python@master
with:
python -version: 3.8
# 下载对应库
- name: "install dependencies"
run: |
# 更新pip
pip install requests
# 运行脚本
- name: "run Python"
run: |
python ./自动化爬取研招网更新状态/web_spider.py
效果展示
一旦其检测到研招网更新啦,就会给你的微信推送
最后欢迎关注我的GitHub,点亮一颗小新星
https://github.com/Mr-KID-github/workflow
关于项目的所有文件都放在其中,后续还将介绍如何利用树莓派进行电话通知!!!即每次检测到研招网更新就会电话通知
相关参考
GitHub actions文档:https://docs.github.com/cn/actions
WxPusher微信推送服务:https://wxpusher.dingliqc.com/docs/#/
python urllib.request模块的使用详解:https://www.jb51.net/article/207790.htm
时间触发器参考文档:https://crontab.guru/every-5-minutes