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