通过Python3对网页数据异常QQ定时提醒

本文介绍了一种利用Selenium和BeautifulSoup抓取动态网页数据的方法,并通过分析数据后利用Python发送QQ消息进行异常提醒。整个过程包括环境搭建、网页数据抓取与处理、发送消息等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

       需要定期监控网页数据是否异常(但是网页数据是动态的,不能直接采用urllib模块来获取网页信息),想法是将数据抓取分析后,通过定时发送QQ消息来提醒数据情况。较为粗糙,不足之处,还请不吝赐教!

1.环境

  •    win10(64位)
  •    Anaconda(1.9.2)
  •    Python3.7

2.安装包

  • pywin32(安装方法参考:Python3 pywin32模块安装
  • re
  • selenium(一些文章说可直接pip install ,但不清楚什么原因,我的不可以,所以直接在Anaconda上安装)
  • time
  • sys
from selenium import webdriver
from bs4 import BeautifulSoup
import re
import win32gui
import win32con
import win32clipboard as w
import time
import sys

3.抓取网页,并处理

网页解析(参考:在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫

#网页解析
browser = webdriver.Chrome()
browser.get("***")#此处填写对应网址
time.sleep(1)#个人因为browser.get()获取网页时打开需要时间,否则会出现无法获取数据的情况
bs = BeautifulSoup(browser.page_source, "html.parser")
str_bs = str(bs)#将网页解析数据转成str


#数据处理,根据实际情况进行处理
content_pat = '***'#此处是正则表达式
content = re.compile(content_pat, re.S).findall(str_bs)
print(content)
n = 4
content_list = [content[i:i+n] for i in range(0, len(content), n)]#根据获取的数据进行切分,这里应当根据实际情况进行处理
        
cont = []       
for i in content_list:
    if(i[2] == '***'):
        cont.append(i[1]+'数据报错')
    elif(i[3] == '***'):
        cont.append(i[1]+'数据报错')
    else:
        cont.append('一切正常')

4.发送QQ消息

来源于:使用python发送qq消息

注:发送qq消息要求已经登陆qq,而且qq的窗口是独立的,现在新版的qq一般都是将所有的聊天窗口聚合在一起,因此要设置将qq窗口分离,或者将需要发送消息的那个窗口单独分离出来。

def getText():
    """获取剪贴板文本"""
    w.OpenClipboard()
    d = w.GetClipboardData(win32con.CF_UNICODETEXT)
    w.CloseClipboard()
    return d

def setText(aString):
    """设置剪贴板文本"""
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
    w.CloseClipboard()

def send_qq(to_who, msg):
    """发送qq消息
    to_who:qq消息接收人
    msg:需要发送的消息
    """
    # 将消息写到剪贴板
    setText(msg)
    # 获取qq窗口句柄
    qq = win32gui.FindWindow(None, to_who)
    # 投递剪贴板消息到QQ窗体
    win32gui.SendMessage(qq, 258, 22, 2080193)
    win32gui.SendMessage(qq, 770, 0, 0)
    # 模拟按下回车键
    win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    win32gui.SendMessage(qq, win32con.WM_KEYUP, win32con.VK_RETURN, 0)


# 测试
to_who='***'#此处发送给谁就填写谁的id
msg= str(cont)
send_qq(to_who, msg)

#关闭
sys.exit(0)

5.终端调用python脚本

由于我使用的Anaconda,因此在调用时出现问题,这里参考了一篇Windows如何用Anaconda运行python脚本?

写了一个bat文件:

CALL   C:\Users\***\Anaconda3\Scripts\activate.bat C:\Users\***\Anaconda3
cd C:\Users\**
python webmonitor.py
@exit

这样就把cmd调用webmonitor.py文件,改变成直接调用该.bat文件即可。 

6.设置定时执行

如果不会的可以参考:Windows定时运行python程序

7.执行结果

 8.参考

  1. Python3 pywin32模块安装
  2. 在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫
  3. 使用python发送qq消息
  4. Windows定时运行python程序
  5. Windows如何用Anaconda运行python脚本?
<think>好的,用户之前已经询问过企业微信群机器人是否能代替企业应用推送消息,现在他想知道如何通过Python检测到信号后,用企业微信群机器人推送提醒的详细步骤。我需要先回顾之前的对话,确保回答的一致性,并且补充详细的操作步骤。 首先,用户的需求明确:检测信号,然后通过企业微信的群机器人发送提醒。之前的回答已经介绍了群机器人和企业应用API的区别,以及创建机器人的基本步骤和Python代码示例。现在需要更详细的操作步骤,可能需要分步骤讲解,从创建机器人到编写Python代码,再到部署和优化。 用户可能的身份是开发人员或者有一定技术背景的业务人员,想要自动化监控某些信号并及时通知团队。使用场景可能涉及金融监控、系统警报、业务指标提醒等。深层需求可能包括自动化流程的搭建、减少人工干预、提高响应速度。 需要确保步骤清晰,涵盖创建机器人、编写检测逻辑、发送消息、处理异常、部署到服务器等环节。同时,考虑到用户可能对Python和企业微信接口不熟悉,需要详细说明每个步骤,提供代码示例和注意事项,比如安全存储Webhook URL,处理频率限制等。 另外,用户可能关心如何测试和调试,所以在步骤中加入调试技巧和常见错误码会有帮助。最后,可能需要给出扩展建议,比如发送更复杂的消息类型或集成到现有系统中,以满足用户未来可能的需求。</think>以下是基于 Python 实现「信号检测 + 企业微信群机器人推送」的 **详细操作步骤** ,包含完整代码和注意事项: --- ### 一、准备工作 #### 1. 创建企业微信群机器人 1. 在企业微信客户端中打开目标群聊 → 点击右上角「群机器人」 2. 选择「添加机器人」→ 自定义名称(如`交易监控机器人`) 3. 复制生成的 **Webhook地址**(格式:`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx`) #### 2. 环境配置 ```bash # 安装必需库 pip install requests python-dotenv schedule ``` ```python # 项目结构建议 your_project/ ├── .env # 存储敏感信息 ├── config.py # 配置文件 ├── signal_detector.py # 信号检测逻辑 ├── wechat_bot.py # 机器人消息模块 └── main.py # 主程序 ``` --- ### 二、核心代码实现 #### 1. 消息推送模块 (`wechat_bot.py`) ```python import os import requests import json from dotenv import load_dotenv load_dotenv() # 加载.env环境变量 class WechatBot: def __init__(self): self.webhook_url = os.getenv("WECHAT_WEBHOOK_URL") # 从环境变量读取 def _send_message(self, data): """基础发送方法""" try: resp = requests.post( self.webhook_url, data=json.dumps(data), headers={&#39;Content-Type&#39;: &#39;application/json&#39;}, timeout=5 ) return resp.json().get(&#39;errcode&#39;) == 0 except Exception as e: print(f"消息发送失败: {str(e)}") return False def send_text(self, content, mentioned_list=None): """发送文本消息""" data = { "msgtype": "text", "text": { "content": content, "mentioned_list": mentioned_list or [] } } return self._send_message(data) def send_markdown(self, content): """发送Markdown格式消息(支持表格/链接)""" data = { "msgtype": "markdown", "markdown": { "content": content } } return self._send_message(data) ``` #### 2. 信号检测模块 (`signal_detector.py`) ```python import time import random # 示例用随机数,实际替换为真实数据源 class SignalDetector: @staticmethod def check_ema_cross(): """示例:检测EMA均线金叉信号""" # 这里替换为实际数据获取逻辑(如连接交易所API) ema_short = random.uniform(25, 26) # 模拟短期EMA ema_long = random.uniform(24.5, 25.5) # 模拟长期EMA if ema_short > ema_long: return { "signal_type": "EMA金叉", "price": round((ema_short + ema_long)/2, 2), "timestamp": int(time.time()) } return None # 可扩展其他检测方法(如MACD、RSI等) ``` #### 3. 主程序 (`main.py`) ```python from signal_detector import SignalDetector from wechat_bot import WechatBot import schedule import time bot = WechatBot() detector = SignalDetector() def monitoring_task(): signal = detector.check_ema_cross() if signal: # 构造预警消息 msg = f"""🚨 **交易信号预警** 🚨 \n> 类型:{signal[&#39;signal_type&#39;]} \n> 价格:${signal[&#39;price&#39;]} \n> 时间:{time.strftime(&#39;%Y-%m-%d %H:%M:%S&#39;, time.localtime(signal[&#39;timestamp&#39;]))}""" # 发送Markdown格式(更美观) bot.send_markdown(msg) # 同时@特定人员(可选) bot.send_text(f"发现{signal[&#39;signal_type&#39;]}信号!", mentioned_list=["@all"]) if __name__ == "__main__": # 设置定时检测(示例每30秒检测一次) schedule.every(30).seconds.do(monitoring_task) print("启动交易信号监控...") while True: schedule.run_pending() time.sleep(1) ``` --- ### 三、配置与部署 #### 1. 环境变量配置 (`.env`) ```ini # 企业微信机器人Webhook地址 WECHAT_WEBHOOK_URL = "你的Webhook_URL" ``` #### 2. 运行测试 ```bash # 启动程序 python main.py # 预期效果:当检测到信号时,企业微信群将收到类似消息 -------------------------- 🚨 交易信号预警 🚨 类型:EMA金叉 价格:$25.38 时间:2024-07-25 14:30:45 ``` --- ### 四、进阶优化建议 1. **消息模板增强**: ```python # 使用Markdown表格格式 def generate_alert_message(signal): return f"""**📊 专业级信号报告**\n | 指标 | 值 | |-------------|-------------| | 信号类型 | {signal[&#39;signal_type&#39;]} | | 当前价格 | ${signal[&#39;price&#39;]} | | 时间戳 | {signal[&#39;timestamp&#39;]} | \n[查看详情](https://your-analytics-platform.com)""" ``` 2. **异常处理增强**: ```python # 在_send_message方法中添加重试机制 def _send_message(self, data, retries=3): for i in range(retries): try: # ...原有代码... except requests.exceptions.RequestException as e: if i == retries - 1: raise time.sleep(2 ** i) # 指数退避重试 ``` 3. **频率限制规避**: ```python # 在企业微信限制(20条/分钟)内控制频率 schedule.every(10).seconds.do(monitoring_task) # 最低间隔3秒/次 ``` --- ### 五、生产环境部署 1. **服务器部署**: ```bash # 使用nohup后台运行 nohup python main.py > monitor.log 2>&1 & # 或用PM2管理(需安装Node.js) pm2 start "python main.py" --name wechat-monitor ``` 2. **日志监控**: ```python # 在代码中添加日志记录 import logging logging.basicConfig( filename=&#39;monitor.log&#39;, level=logging.INFO, format=&#39;%(asctime)s - %(levelname)s - %(message)s&#39; ) ``` 3. **安全加固**: ```bash # 设置服务器防火墙规则 ufw allow out 443 # 允许访问企业微信API ``` --- 通过以上步骤,您可以实现从信号检测到企业微信通知的完整自动化流程。根据实际需求调整检测逻辑和消息内容即可快速适配不同业务场景(如服务器监控、物流预警等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值