5 步用 RSSHub 给自己搭一个\”AI 并购雷达\”:每天早上 9 点推送谁在买谁

· 小白基础技术分享

OpenAI 收购、Anthropic 融资、NVIDIA 拿下 Hugging Face——AI 行业的”买买买”频率已经高到人工跟踪完全跟不上。今天这篇教程,5 步、约 30 行 Python,教你搭一个每天早上 9 点自动推送的”AI 并购雷达”,覆盖 TechCrunch、The Information、Reuters Tech、Bloomberg Tech、华尔街日报科技版、虎嗅 36 氪的并购信息。

5 步用 RSSHub 给自己搭一个\

这篇教程的灵感来自 8 月 28 日 TechCrunch 的报道《Open-weight AI companies are the Valley’s hottest acquisition targets》——AI 行业的并购密度 2025 年同比涨了 280%,但中文圈几乎没人系统整理。

前置条件

一台 7×24 运行的设备:旧笔记本、NAS、VPS 都可以,建议 1 核 CPU / 512MB 内存就够

Python 3.10+(演示用 3.11)

一个 Telegram Bot Token(不是必选,邮件 / 微信 Server酱也可以)

可选:已有 RSSHub 实例(教程里我会给两个方案:自己跑、用公开实例)

第 1 步:准备 RSSHub 数据源(5 分钟)

RSSHub 已经把主流财经媒体的 RSS / Atom feed 统一成 HTTP API。如果你自己跑过 RSSHub(监听 1200 端口),下面这些路由就能直接用:

# TechCrunch 收购 / 融资专栏
http://localhost:1200/techcrunch/category/funding

# The Information AI 频道
http://localhost:1200/theinformation/ai

# Reuters 科技 / 商业合并版块
http://localhost:1200/reuters/business/technology

# 虎嗅 AI 频道
http://localhost:1200/huxiu/channel/ai

# 36 氪 AI 频道
http://localhost:1200/36kr/information/AI

# 投资人 Twitter List(如果你有订阅)
http://localhost:1200/twitter/list/FundingProCN

如果暂时不想自己跑 RSSHub,可以临时用 rsshub.app(官方公开实例)。但公开实例有 QPS 限制,生产环境建议自部署——用 Docker 一行命令:

docker run -d --name rsshub -p 1200:1200 diygod/rsshub:latest

第 2 步:Python 抓取 + 关键词过滤(10 分钟)

新建 `ai_deal_radar.py`,把下面这段代码粘进去:

import feedparser
import requests
from datetime import datetime, timedelta
import re

RSS_FEEDS = [
    ("TechCrunch 融资", "http://localhost:1200/techcrunch/category/funding"),
    ("The Info AI",    "http://localhost:1200/theinformation/ai"),
    ("Reuters Tech",   "http://localhost:1200/reuters/business/technology"),
    ("虎嗅 AI",        "http://localhost:1200/huxiu/channel/ai"),
    ("36 氪 AI",       "http://localhost:1200/36kr/information/AI"),
]

# 关键词触发:覆盖中文 + 英文并购融资表述
DEAL_KEYWORDS = re.compile(
    r"(收购|并购|融资|投资|种子轮|A 轮|B 轮|C 轮|亿美元|十亿|"
    r"acqui|merger|acquisition|raised|funding|series [a-f]|"
    r"billion|million|invest|valuation)",
    re.IGNORECASE
)

# 黑名单:排除"报道中"、"传闻"、"考虑中"等非确定性表述
NOISE_WORDS = re.compile(
    r"(传闻|据传|或考虑|或计划|可能|试探|谈判中)",
    re.IGNORECASE
)

def fetch_feed(url, hours=30):
    """抓单个 RSS feed,过滤近 30 小时内容。"""
    out = []
    try:
        d = feedparser.parse(url, timeout=15)
    except Exception:
        return out
    cutoff = datetime.utcnow() - timedelta(hours=hours)
    for entry in d.entries[:30]:
        title = getattr(entry, "title", "")
        summary = getattr(entry, "summary", "")[:200]
        text = f"{title} {summary}"
        if DEAL_KEYWORDS.search(text) and not NOISE_WORDS.search(text):
            pub = getattr(entry, "published_parsed", None)
            pub_dt = datetime(*pub[:6]) if pub else datetime.utcnow()
            if pub_dt >= cutoff:
                out.append({
                    "source": d.feed.get("title", "RSS"),
                    "title": title,
                    "link": entry.link,
                    "published": pub_dt.isoformat(timespec="seconds"),
                })
    return out

def collect_all():
    seen = set()
    items = []
    for label, url in RSS_FEEDS:
        for it in fetch_feed(url):
            if it["link"] in seen:
                continue
            seen.add(it["link"])
            it["source"] = label
            items.append(it)
    items.sort(key=lambda x: x["published"], reverse=True)
    return items

`feedparser` 是 RSS 解析的事实标准库,第一次跑装一下:

pip install feedparser requests

第 3 步:格式化成可读推送(5 分钟)

def format_report(items):
    if not items:
        return "今日 AI 并购/融资动态:暂无新增 🟢"
    lines = [f"📡 *AI 并购雷达 · {datetime.now().strftime('%m-%d %H:%M')}*\n"]
    for it in items[:15]:  # 最多 15 条
        lines.append(f"• *{it['source']}*\n  {it['title']}\n  {it['link']}\n")
    return "\n".join(lines)

第 4 步:Telegram 推送(5 分钟)

先在 Telegram 找 @BotFather 创建机器人、拿到 token,再把机器人拉进你想接收的群(或者直接和它私聊)。然后:

import os
TG_BOT_TOKEN = os.environ["TG_BOT_TOKEN"]   # 从环境变量读取
TG_CHAT_ID   = os.environ["TG_CHAT_ID"]     # 群 ID 或用户 ID

def push_telegram(text):
    url = f"https://api.telegram.org/bot{TG_BOT_TOKEN}/sendMessage"
    r = requests.post(url, json={
        "chat_id": TG_CHAT_ID,
        "text": text,
        "parse_mode": "Markdown",
        "disable_web_page_preview": True,
    }, timeout=15)
    return r.json()

不想用 Telegram?把 `push_telegram` 换成邮件(`smtplib`)或 Server 酱(推送到微信)也只要 10 行代码。

第 5 步:cron 定时执行(2 分钟)

# 编辑 crontab
crontab -e

# 每天 09:00 跑一次,结果推 Telegram
0 9 * * * cd /home/you/ai-deal-radar && python3 ai_deal_radar.py >> radar.log 2>&1

完事。整套系统从 0 到能跑大约 30 分钟。

验证成功的标准

跑一遍后你应该能看到:

– ✅ cron 9 点准时触发,`radar.log` 有新条目

– ✅ Telegram 群收到当天 AI 并购/融资摘要

– ✅ 关键词过滤掉”猜测”和”考虑中”等噪声

– ✅ 30 小时内的新增都被收进来

– ✅ 重复链接被去重

常见失败处理

1. RSSHub 实例连不上 → 检查 1200 端口是否通;rsshub.app 公开实例偶尔限流,建议自部署。

2. Telegram 推送 429 → 加 1 秒 sleep / 用 rate limit 库;或者改用邮件。

3. 抓到大量无关新闻 → 在 `DEAL_KEYWORDS` 里加更精确的关键词,比如只保留含具体金额的(`亿美元|十亿|billion|million`)。

4. 错过去年的旧文 → 检查 `cutoff` 时间,UTC 时区建议设 30 小时(覆盖跨时区)。

5. 重复抓到同一新闻 → 多源 RSS 经常转载,已用 `seen` set 去重。如果还有重复,加 `title` 前 30 字 hash。

进阶玩法

加 LLM 总结:把每天抓到的 15 条扔给本地 Ollama(`qwen2.5:7b`)生成 200 字中文摘要

加邮件备份:Telegram 失败时 fallback 到 SMTP

加 Slack 集成:用 Slack incoming webhook 推送到团队工作区

加 Dashboard:用 Streamlit 写一个 30 天趋势面板

这套系统的核心价值不是技术,是**让你成为朋友圈里第一个知道”AI 行业又出啥大事”的人**。当你能在同事看到新闻之前 30 分钟就在群里分享”OpenAI 刚买了 X 公司,估值 Y 亿美元”,你的信息差价值立刻建立。

🔥 关注 LC 智趣厅,下周会带来”RAG + LLM 总结:把雷达自动写成行业研报”教程。


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅