Python小工具——监听某网站的数据变化并进行邮件通知

目录

一、需求描述

二、解析

三、实例代码


一、需求描述

监听自考网2024年广东省6月份的毕业生学历注册进度,这是网址:https://www.chsi.com.cn/xlcx/count_zk.jsp,

如上图所示,我们想知道这个红色的空格啥时候被填满,就是已注册状态。

每天都打开看一眼可能会忘记,所以想写个脚本跑着去监听,发生改变就发个消息或者邮件提醒我。

二、解析

看了下网页请求链接,找到了数据请求的接口:

https://xjxl2.chsi.com.cn/public/zkprogress.mvc?type=2021&callback=jQuery21107199905304849694_1721886437073&_=1721891974000

从这个Get 请求看到返回的数据如下图:

那就可以通过请求接口,拿到数据之后去解析JSON中的内容,找到ssmc="广东",再获取"cnts"数组中有几个"Yes", 数了一下,广东2024年6月份是第七个"Yes", 那就让"Yes" 的个数为7或者大于等于7就给我们发通知。

用Python代码来实现:

def check_webpage_change(url):response = requests.get(url)# 找到左括号和右括号来提取有效的 JSON 部分start_index = response.text.find('{')end_index = response.text.rfind('}') + 1json_data = response.text[start_index:end_index]data = json.loads(json_data)  # 解析 JSON 数据# 现在您可以处理解析后的数据for item in data['object']:province = item['ssmc']if province == "广东":cnts = item['cnts']count = cnts.count("Yes")# 当yes 的个数为7表示已上传,发邮件通知if count >= 7:print("""*****************************\n***********已上传***************\n*****************************\n""")send_email("本科学历通知!!!", "=====广东省6月份已上传=====")exit()

由于拿到的数据包含在 "jQuery211028906734726660055_1721900048006({})" 中,所以需要多一步切割下数据,转成JSON数据在进行解析。

然后就是来实现发送消息,查了下微信和QQ提醒两种方式,

1、微信提醒:

  • 微信公众平台接口通常需要企业认证,个人较难使用。
  • 可以考虑使用第三方库如itchat(可能存在稳定性和合规性问题)。

2、 QQ 提醒:

  • 可以使用 QQ 邮箱发送邮件来实现提醒。

那就选择通过发送邮件的方式来实现。

Python代码实现:

#发送文件
import smtplib
from email.mime.text import MIMETextdef send_email(subject, content):# 网易邮箱的服务器配置smtp_server ='smtp.163.com'port = 25sender_email = 'sender_email@163.com'#这里密码要用开通SMTP服务提供的授权密码sender_password = 'password'recivce_email = 'recivce_email@qq.com'# 构建邮件内容message = MIMEText(content)message['Subject'] = subjectmessage['From'] = sender_emailmessage['To'] = recivce_emailtry:# 连接服务器并发送邮件server = smtplib.SMTP(smtp_server, port)server.starttls()  # 如果服务器需要 TLS 加密,使用此命令server.login(sender_email, sender_password)server.sendmail(sender_email, recivce_email, message.as_string())server.quit()print("邮件发送成功")except Exception as e:print("邮件发送失败", e)

需要注意的是,发送邮箱需要开启SMTP服务,然后使用授权密码来进行登录。

以下是网易邮箱(包括 163、126 等)开启客户端(SMTP)授权的一般步骤:

  1. 登录网易邮箱网页版,例如 163 邮箱可登录https://mail.163.com/
  2. 点击上方的“设置”选项。
  3. 在设置列表中,选择“POP3/SMTP/IMAP”。
  4. 在客户端协议界面,选择“SMTP”服务并点击“开启”(如果之前未绑定手机号,可能需要先在密保平台中完成手机号绑定)。
  5. 在新弹出的弹窗中,可以选择扫码发送短信,或者点击下方“手动发送短信”(如果发送 5 分钟后系统依旧提示未收到短信,请联系移动运营商核实短信发送情况)。
  6. 点击“我已发送”后,如果系统检测到用户成功发送短信,便会提示客户端授权码(自动生成一串 16 位字母组合的唯一随机授权密码)

三、实例代码

下面是完整的代码:

import json
import time
#请求的
import requests
#发送文件
import smtplib
from email.mime.text import MIMETextdef start():print("************ 开始检测上传状态:************ \n")while True:milliseconds_since_epoch = int(time.time() * 1000)url="https://xjxl2.chsi.com.cn/public/zkprogress.mvc?type=2021&callback=jQuery21107199905304849694_1721886437073&_="+str(milliseconds_since_epoch)print("请求链接>"+url)check_webpage_change(url)time.sleep(6*60*60)  # 每隔 6个小时检查一次def check_webpage_change(url):response = requests.get(url)# 找到左括号和右括号来提取有效的 JSON 部分start_index = response.text.find('{')end_index = response.text.rfind('}') + 1json_data = response.text[start_index:end_index]data = json.loads(json_data)  # 解析 JSON 数据# 现在您可以处理解析后的数据for item in data['object']:province = item['ssmc']if province == "广东":cnts = item['cnts']count = cnts.count("Yes")# 当yes 的个数为7表示已上传,发邮件通知if count >= 7:print("""*****************************\n***********已上传***************\n*****************************\n""")send_email("本科学历通知!!!", "=====广东省6月份已上传=====")exit()def send_email(subject, content):# 网易邮箱的服务器配置smtp_server ='smtp.163.com'port = 25sender_email = 'sender_email.com'#这里密码要用开通SMTP服务提供的授权密码sender_password = '授权密码'recivce_email = 'recivce_email@qq.com'# 构建邮件内容message = MIMEText(content)message['Subject'] = subjectmessage['From'] = sender_emailmessage['To'] = recivce_emailtry:# 连接服务器并发送邮件server = smtplib.SMTP(smtp_server, port)server.starttls()  # 如果服务器需要 TLS 加密,使用此命令server.login(sender_email, sender_password)server.sendmail(sender_email, recivce_email, message.as_string())server.quit()print("邮件发送成功")except Exception as e:print("邮件发送失败", e)start()

生命不息,学习不止,若有不正确的地方,欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7月26日贪心练习-摆动序列专题

前言 大家好,今天学习用贪心思想解决摆动序列问题,共三题,分享自己的思路,请大家多多支持 算法思想 大家可以先看看这道我们后面会讲的题看看怎么个事,. - 力扣(LeetCode) 由此题题解说明算…

SwiftSage:参考人脑双系统,结合快思和慢想的智能体,解决复杂任务同时降低成本

SwiftSage:参考人脑双系统,结合快思和慢想的智能体,解决复杂任务同时降低成本 提出背景解法拆解子解法1:SWIFT模块子解法2:SAGE模块模块整合和决策树逻辑链 SwiftSage 工作流程效果 论文:SWIFTSAGE: A Gene…

GMSSL2.x编译鸿蒙静态库和动态库及使用

一、编译环境准备 1.1 开发工具 DevEco-Studio下载。 1.2 SDK下载 下载编译第三方库的SDK有两种方式,第一种方式从官方渠道根据电脑系统选择对应的SDK版本,第二种方式通过DevEco-Studio下载SDK。本文只介绍通过DevEco-Studio下载SDK的方式。 安装SD…

SSD基本架构与工作原理

SSD的核心由一个或多核心的CPU控制器、DRAM缓存以及多个NAND闪存芯片组成。CPU控制器负责管理所有读写操作,并通过DRAM缓存存储映射表等元数据,以加速寻址过程。 NAND闪存则是数据存储的实际介质,其组织结构从大到小依次为通道(包…

海山数据库(He3DB)性能优化方案解析

前端优化是一个永恒的话题,每个前端开发者都希望自己的页面能够快速加载,给用户良好的体验。但往往事与愿违。因此,本文从编码优化、构建优化、部署优化三方面入手进行web页面性能优化。 1. 编码优化 1.1. Css优化 1.1.1. 合理使用css选择…

HarmonyOS NEXT零基础入门到实战-第四部分

自定义组件: 概念: 由框架直接提供的称为 系统组件, 由开发者定义的称为 自定义组件。 源代码: Component struct MyCom { build() { Column() { Text(我是一个自定义组件) } } } Component struct MyHeader { build() { Row(…

【React】package.json 文件详解

文章目录 一、package.json 文件的基本结构二、package.json 文件的关键字段1. name 和 version2. description3. main4. scripts5. dependencies 和 devDependencies6. repository7. keywords8. author 和 license9. bugs 和 homepage 三、package.json 文件的高级配置1. 配置…

十、SpringBoot 统⼀功能处理【拦截器、统一数据返回格式、统一异常处理】

十、SpringBoot 统⼀功能处理 1. 拦截器【HandlerInterceptor、WebMvcConfig】1.1 拦截器快速⼊⻔⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法…

压测实操--produce压测方案

作者:九月 环境信息: 操作系统centos7.9,kafka版本为hdp集群中的2.0版本。 Producer相关参数 使用Kafka自带的kafka-producer-perf-test.sh脚本进行压测,该脚本参数为: 在producer涉及到性能的关键因素可能会存在如…

DetectorRS

文章目录 AbstractMethodExperimentAblation StudyMain Results Conclusion未来展望 link code Abstract 本文介绍了一种新的对象检测器——DetectoRS,通过在骨干网络设计中引入递归特征金字塔和可切换的空洞卷积机制,实现了出色的性能提升。在宏观层面…

谷粒商城实战笔记-54-商品服务-API-三级分类-拖拽效果

文章目录 一,54-商品服务-API-三级分类-修改-拖拽效果1,el-tree控件加上允许拖拽的属性2,是否允许拖拽3,完整代码 一,54-商品服务-API-三级分类-修改-拖拽效果 本节的主要内容是给三级分类树形结构加上拖拽功能&#…

四、GD32 MCU 常见外设介绍 (4) EXTI 中断介绍

4.EXTI 中断介绍 EXTI(中断/事件控制器)包含多个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。 4.1.GD32 EXTI 外设原理简介…

如何使用C#自制一个Windows安装包

原文链接:https://www.cnblogs.com/zhaotianff/p/17387496.html 以前都在用InstallShield制作安装包,基本需求是能满足的,但也有一些缺点: 1、界面不能完全定制 2、不能直接调用代码里的功能 平常使用一些其它软件,…

【基础算法总结】优先级队列

优先级队列 1.最后一块石头的重量2.数据流中的第 K 大元素4.前K个高频单词4.数据流的中位数 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1…

FPGA开发——LED流水灯实现先从左往右流水,再从右往左流水

一、概述 我们在设计完一个方向的流水灯的设计时,总是会想实现让流水灯倒着流水回去的设计,这里我也是一样,实现这种设计的方法有很多种,其中就有直接使用case语句将所有可能包含进去编写,这种设计方法是最简单的&…

leetcode日记(51)不同路径Ⅱ

和上一道题(无障碍物的最短路径)很像,但事实上比上一题多了优化方法 根据上一题改的代码如下,添加了对障碍物的判定,如果有障碍物则将数组值设为0。 class Solution { public:int uniquePathsWithObstacles(vector&l…

Origin制作线性拟合回归图

选中数据,点下方散点图 调整散点颜色 在分析中打开线性拟合回归 添加文本 显示上轴

算法 —— 暴力枚举

目录 循环枚举 P2241 统计方形(数据加强版) P2089 烤鸡 P1618 三连击(升级版) 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…

keil调试SH79F7416

仿真器JET51A, 调试设置 选择器件 再次点击调试就一切正常啦

快速汇总公司产品涉及的项目(服务、站点)

文章目录 引言I 快速汇总公司产品涉及的项目II 常用工具jar包转成exe应用远程操作常用命令III 把应用做成windows服务在后台运行借助工具`instsrv.exe`和`srvany.exe`把应用做成windows服务的步骤SysWOW64 文件夹的作用引言 需求:汇总 平台涉及站点和服务信息 I 快速汇总公司…