想要每天自动获取最新的科技新闻,却不想手动浏览网站?这个Python项目可以帮你解决这个问题。它能够自动抓取CCTV科技频道的最新新闻,生成美观的HTML邮件,并定时发送到你的邮箱。

项目亮点

  • ✅ 全自动运行:每天定时发送,无需手动操作

  • ✅ 真实数据源:直接抓取CCTV科技频道最新新闻

  • ✅ 美观邮件模板:响应式HTML设计,多设备适配

  • ✅ 免费部署:使用GitHub Actions,无需服务器

  • ✅ 稳定可靠:3次重试机制,确保任务成功率

技术栈

技术 用途
Python 3.9 核心编程语言
Requests + BeautifulSoup4 新闻抓取与解析
SMTP_SSL 安全邮件发送
GitHub Actions 自动化定时任务
JSON 数据存储

核心代码实现

1. 新闻抓取模块

# 从CCTV科技频道抓取新闻
def crawl_cctv_tech_news():
    url = "https://news.cctv.com/tech/"
    headers = {"User-Agent": "Mozilla/5.0..."}
    
    response = requests.get(url, headers=headers, timeout=15)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 解析新闻链接和标题
    news_items = []
    for a in soup.find_all("a", href=True):
        text = a.get_text(strip=True)
        if text and len(text) > 5:
            news_items.append((text, a["href"]))
    
    return news_items[:10]  # 返回最新10条新闻

2. 邮件发送模块

# 配置QQ邮箱发送(需要授权码)
smtp_server = "smtp.qq.com"
smtp_port = 465
smtp_user = "your_email@qq.com"
smtp_password = "your_authorization_code"  # 不是QQ密码!

# 创建HTML邮件内容
def create_html_email(news_items, date):
    html_content = f"""
    <h2>📰 CCTV科技新闻摘要 ({date})</h2>
    <div class="news-container">
    """
    for title, link in news_items:
        html_content += f"""
        <div class="news-item">
            <h3><a href="{link}">{title}</a></h3>
        </div>
        """
    html_content += "</div>"
    return html_content

快速部署步骤

1. 本地环境配置

# 安装依赖
pip install requests beautifulsoup4

# 测试运行
python crawl_news.py
python send_email.py

2. GitHub Actions自动化部署

创建 .github/workflows/daily-news.yml

name: 每日科技新闻

on:
  schedule:
    - cron: '0 2 * * *'  # 每天UTC 02:00(中国10:00)
  workflow_dispatch:      # 支持手动触发

jobs:
  send-news:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.9'
      
      - name: 安装依赖
        run: pip install requests beautifulsoup4
      
      - name: 抓取并发送新闻
        env:
          SENDER_EMAIL: ${{ secrets.SENDER_EMAIL }}
          SENDER_PASSWORD: ${{ secrets.SENDER_PASSWORD }}
          RECEIVER_EMAIL: ${{ secrets.RECEIVER_EMAIL }}
        run: |
          python crawl_news.py
          python send_email.py

3. 配置GitHub Secrets

在仓库Settings → Secrets中添加:

  • SENDER_EMAIL: 发件QQ邮箱

  • SENDER_PASSWORD: QQ邮箱授权码

  • RECEIVER_EMAIL: 收件邮箱

  • SMTP_SERVERsmtp.qq.com

  • SMTP_PORT: 465

关键技术点

  1. QQ邮箱授权码获取:在QQ邮箱设置→账户→POP3/SMTP服务中生成

  2. SMTP_SSL连接:直接使用SSL加密,避免普通SMTP连接问题

  3. GitHub Actions定时:利用免费额度实现每日自动运行

  4. 错误重试机制:网络请求失败时自动重试3次

项目优势

  • 零成本:完全利用免费资源(GitHub Actions + QQ邮箱)

  • 易维护:代码结构清晰,配置简单

  • 可扩展:轻松添加其他新闻源(如36kr、虎嗅等)

  • 即时性:每天固定时间推送,不错过重要科技动态

效果展示

项目生成的HTML邮件在电脑和手机端都有良好的显示效果,包含新闻标题、摘要和直达链接,方便快速阅读。

遇到的问题与解决方案

  • 问题1:CCTV页面结构变化导致抓取失败

    • 解决方案:增加多种解析方式,提高容错率

  • 问题2:SMTP连接被拒绝

    • 解决方案:使用SMTP_SSL并正确配置端口465

  • 问题3:GitHub Actions时区问题

    • 解决方案:设置环境变量TZ=Asia/Shanghai

总结

这个项目展示了如何用Python实现一个完整的自动化系统,涉及网络爬虫、数据处理、邮件发送和云平台部署。不仅实用性强,也是学习自动化开发的好案例。

只需一次配置,就能每天准时收到最新的科技新闻摘要,极大提高了信息获取效率。代码完全开源,可以根据需要自定义新闻源、发送频率和邮件模板。


详细教程和完整代码请参考原文自动科技新闻摘要邮件机器人完整教程

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐