You need to enable JavaScript to run this app. 如何用Python实现网站特定文本抓取匹配并触发邮件通知?
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现网站特定文本抓取匹配并触发邮件通知?

所需依赖库
  • requests:用于发送HTTP请求获取网页内容,属于第三方库需要单独安装
  • beautifulsoup4(可选):用于解析HTML结构,过滤页面标签后仅提取文本内容做匹配,避免匹配到HTML代码里的无关字符串
  • 内置库smtplib、email:用于实现邮件通知功能,不需要额外安装
  • schedule(可选):用于实现定时循环监测需求,比手写时间循环更灵活
前置操作
  • 安装第三方依赖:执行命令 pip install requests beautifulsoup4 schedule
  • 若要使用邮件通知,需要提前在邮箱设置中开启SMTP服务,获取专属授权码(不要直接用邮箱登录密码)
参考代码片段
import requests
import time
import schedule
import smtplib
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header

# --------------- 配置区 新手仅修改这里的参数即可 ---------------
TARGET_URL = "https://你要监测的网站地址.com"  # 替换为目标网站链接
TARGET_STR = "你要匹配的特定字符串"  # 替换为要检测的字符串
CHECK_INTERVAL = 300  # 监测间隔,单位为秒,默认配置为5分钟
# 邮件通知配置
SMTP_SERVER = "smtp.qq.com"  # 邮箱SMTP服务器,QQ邮箱为smtp.qq.com,163邮箱为smtp.163.com
SMTP_PORT = 465
SENDER_EMAIL = "发件人邮箱@qq.com"
SENDER_AUTH_CODE = "你的邮箱SMTP授权码"  # 填写邮箱开启SMTP后获取的授权码
RECEIVER_EMAIL = "收件人邮箱@xxx.com"
# ---------------------------------------------------------

def send_email_alert():
    """触发匹配后发送预警邮件"""
    message = MIMEText(f"网站{TARGET_URL}监测到目标字符串「{TARGET_STR}」,请及时查看", 'plain', 'utf-8')
    message['From'] = Header("网站监测脚本", 'utf-8')
    message['To'] = Header("收件人", 'utf-8')
    message['Subject'] = Header("网站匹配预警通知", 'utf-8')
    try:
        smtp_obj = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
        smtp_obj.login(SENDER_EMAIL, SENDER_AUTH_CODE)
        smtp_obj.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, message.as_string())
        smtp_obj.quit()
        print("预警邮件发送成功")
    except Exception as e:
        print(f"邮件发送失败:{e}")

def check_website():
    """请求目标网站并匹配字符串"""
    # 模拟浏览器请求头,避免被反爬机制拦截
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    try:
        response = requests.get(TARGET_URL, headers=headers, timeout=10)
        response.encoding = response.apparent_encoding  # 自动识别编码避免中文乱码
        # 提取页面纯文本内容,过滤HTML标签
        soup = BeautifulSoup(response.text, 'html.parser')
        page_text = soup.get_text()
        # 匹配字符串,如需忽略大小写可以改成 TARGET_STR.lower() in page_text.lower()
        if TARGET_STR in page_text:
            print("匹配到目标字符串,触发通知")
            send_email_alert()
            # 如需匹配到一次就停止脚本,解开下面的注释
            # schedule.cancel_job(check_job)
        else:
            print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} 未匹配到目标字符串")
    except Exception as e:
        print(f"请求网站失败:{e}")

if __name__ == "__main__":
    # 启动时先执行一次检测
    check_website()
    # 设置定时任务
    check_job = schedule.every(CHECK_INTERVAL).seconds.do(check_website)
    # 循环运行任务
    while True:
        schedule.run_pending()
        time.sleep(1)
使用调整说明
  • 如果不需要定时执行,删掉schedule相关的代码,直接调用check_website()函数即可
  • 如果不需要过滤HTML标签直接匹配整个响应内容,可以删掉BeautifulSoup相关的代码,直接用TARGET_STR in response.text判断
  • 除了邮件通知,也可以替换成企业微信/钉钉机器人通知,只要把发送邮件的函数改成调用对应机器人的webhook接口即可
  • 部分网站有反爬机制,若请求返回403/503等错误,可以尝试在headers中加Cookie、Referer等请求头参数
  • 脚本需要保持后台运行才能持续监测,Linux服务器可以用nohup挂起,Windows可以把脚本改成后台服务运行

内容的提问来源于stack exchange,提问作者salatpl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:06:05