You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac+VSCode环境下Python每日自动爬取JSON链接并邮件推送求助

解决Mac上每日自动爬取JSON并邮件发送的问题

一、实现邮件发送功能

既然你已经写好爬取代码,那直接在Python脚本里集成邮件发送模块就行。用Python内置的smtplib和email库就能搞定,给你个具体的示例:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import json

# 你已有的爬取函数,返回JSON数据
def crawl_json():
    # 替换成你的实际爬取逻辑
    json_data = {"今日数据": "爬取到的内容", "更新时间": "2024-XX-XX"}
    return json_data

def send_email(content):
    # 配置邮箱信息
    sender = "你的发件邮箱@xxx.com"
    receiver = "你的收件邮箱@xxx.com"
    # 对应邮箱的SMTP服务器,比如QQ邮箱是smtp.qq.com,Gmail是smtp.gmail.com
    smtp_server = "smtp.xxx.com"
    # 邮箱密码/应用密码(Gmail需要开启两步验证后生成应用密码)
    password = "你的邮箱密码或应用密码"

    # 构造邮件内容
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['From'] = Header("JSON爬取通知", 'utf-8')
    msg['To'] = Header("自己", 'utf-8')
    msg['Subject'] = Header("每日JSON爬取内容", 'utf-8')

    try:
        # 连接SMTP服务器并发送邮件
        server = smtplib.SMTP_SSL(smtp_server, 465)  # SSL端口一般为465
        server.login(sender, password)
        server.sendmail(sender, receiver, msg.as_string())
        print("邮件发送成功")
    except Exception as e:
        print(f"邮件发送失败: {e}")
    finally:
        server.quit()

if __name__ == "__main__":
    # 爬取JSON并格式化
    raw_data = crawl_json()
    formatted_content = json.dumps(raw_data, indent=4, ensure_ascii=False)
    # 发送邮件
    send_email(formatted_content)

注意事项:

  • 不同邮箱的SMTP配置不同,比如163邮箱用smtp.163.com,端口465;QQ邮箱需要在设置里开启SMTP服务。
  • Gmail用户必须开启两步验证,然后生成应用密码代替登录密码,否则会被谷歌拦截。
  • 先单独运行这段代码,确保邮件能正常发送再进行下一步。

二、Mac上实现每日自动执行

Mac系统更推荐用launchd做定时任务,比crontab稳定,不会因为用户会话切换导致任务失效。

步骤1:创建plist配置文件

在~/Library/LaunchAgents/目录下新建一个后缀为.plist的文件,比如com.yourname.jsoncrawler.plist(用反向域名格式命名,保证唯一性)。

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!-- 任务唯一标识 -->
    <key>Label</key>
    <string>com.yourname.jsoncrawler</string>
    <!-- 执行命令:Python路径 + 脚本绝对路径 -->
    <key>ProgramArguments</key>
    <array>
        <!-- 替换成你的Python路径,终端输入which python3可查看 -->
        <string>/usr/local/bin/python3</string>
        <!-- 替换成你的爬取脚本绝对路径,比如/Users/xxx/Documents/json_crawler.py -->
        <string>/Users/yourname/path/to/your/json_crawler.py</string>
    </array>
    <!-- 定时规则:每天早上8点执行 -->
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>8</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <!-- 日志路径,方便排查问题 -->
    <key>StandardOutPath</key>
    <string>/Users/yourname/Documents/json_crawler_logs/out.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/yourname/Documents/json_crawler_logs/error.log</string>
    <!-- 不需要持续保持任务活跃 -->
    <key>KeepAlive</key>
    <false/>
    <!-- 以当前用户身份运行 -->
    <key>UserName</key>
    <string>yourname</string>
</dict>
</plist>

配置说明:

  • 务必用绝对路径!Python路径和脚本路径都不能用相对路径,否则任务找不到文件。
  • 提前创建日志文件夹/Users/yourname/Documents/json_crawler_logs/,否则会报错。
  • 可以修改StartCalendarInterval里的时间,比如改成每天20点整执行。

步骤2:加载并启动定时任务

打开终端执行以下命令:

# 加载plist配置文件
launchctl load ~/Library/LaunchAgents/com.yourname.jsoncrawler.plist
# 启动任务
launchctl start com.yourname.jsoncrawler

如果需要停止或移除任务:

# 停止任务
launchctl stop com.yourname.jsoncrawler
# 移除任务(不再自动执行)
launchctl unload ~/Library/LaunchAgents/com.yourname.jsoncrawler.plist

测试定时任务

可以临时把StartCalendarInterval改成当前时间的下一分钟(比如现在10:30,就设Hour=10,Minute=31),然后加载任务,等待时间到了查看日志和邮箱,确认任务是否正常执行。

三、常见问题排查

  • 邮件发送失败:检查SMTP服务器、端口、密码是否正确,邮箱是否开启SMTP服务,Gmail用户是否用了应用密码。
  • 定时任务不执行:用plutil -lint ~/Library/LaunchAgents/com.yourname.jsoncrawler.plist验证plist语法是否正确,确认Python和脚本路径是绝对路径,日志文件夹是否存在,权限是否足够。
  • 依赖库找不到:如果脚本用到第三方库,确保Python解释器是你安装库的那个(终端输入pip3 list查看库是否在该环境下)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:50