用 API 监控中国科技创投新闻:Python 自动聚合与关键词追踪实战
一、问题:科技创投的信息更新太快,人力盯不过来
如果你在做行业研究、竞品调研,或者只是想第一时间知道某个赛道有没有新的融资、新产品、新政策,那你一定体会过一件事:中国科技创投领域的新闻更新速度极快,而且分散在无数个来源里。今天这家公司拿了融资,明天那个赛道出了新玩家,信息一多,人力根本盯不过来。
具体到工程实现上,痛点主要有几个:
- 信息源太分散,没有一个统一入口;
- 你只关心某几个关键词(比如某个行业、某家公司、某种技术),但大多数资讯流是「全量推送」,噪声很大;
- 想做归档、做统计、做时间线,就必须先把这些新闻变成结构化数据,而不是一堆网页。
二、手动方式的痛点
最原始的做法,就是每天早上打开一堆网站和公众号,逐条看、逐条记。这种方式的问题非常直接:
- 重复劳动:每天做一样的事,还容易漏;
- 无法沉淀:看过就过了,想回头做「过去三个月某关键词出现频率」的分析,根本没有数据底子;
- 不可扩展:今天你盯 3 个关键词还行,等你要盯 30 个,人就废了。
稍微进阶一点的同学会自己写爬虫。但正如上一篇讲大宗交易时说的——自研爬虫维护成本高,页面一改版就得返工,还要处理反爬、编码、去重等一堆杂活。对于「我只是想拿到干净的新闻列表」这个朴素需求来说,这有点重了。
三、方案:用 Actor 按关键词拉取创投新闻
Apify 上的 china-tech-startup-news 这个 Actor,正好解决这个需求。它的输入非常克制,只有两个参数:
keyword:你关心的关键词;maxResults:最多返回多少条。
Actor 页面:https://apify.com/nexgendata/china-tech-startup-news?fpr=2ayu9b
3.1 最小可运行示例
同样用 Apify 的 run-sync-get-dataset-items 端点,一次请求同步拿数据:
import requests
APIFY_TOKEN = "<你的-apify-token>"
ACTOR_SLUG = "nexgendata~china-tech-startup-news"
ENDPOINT = (
f"https://api.apify.com/v2/acts/{ACTOR_SLUG}"
f"/run-sync-get-dataset-items?token={APIFY_TOKEN}"
)
payload = {
"keyword": "人工智能", # 你关心的关键词
"maxResults": 50,
}
resp = requests.post(ENDPOINT, json=payload, timeout=180)
resp.raise_for_status()
items = resp.json()
print(f"关键词『{payload['keyword']}』共抓到 {len(items)} 条新闻")
for row in items[:3]:
print(row)
3.2 诚实说明输出结构
这里要老实讲:china-tech-startup-news 没有对外声明固定的输出字段 schema。所以别去假设「一定有 title / url / date」这些字段——正确的姿势是先跑一次,把实际返回的键打印出来,再基于真实结构去写后续处理。这样脚本更健壮,不会因为你猜错字段名而崩。
# 探测实际返回了哪些字段
if items:
sample = items[0]
print("单条记录包含的字段:", list(sample.keys()))
else:
print("没有返回数据,换个关键词或调大 maxResults 试试")
3.3 多关键词批量监控
真正实用的场景,是一次盯多个关键词。把上面的调用封装成函数,循环跑一遍即可:
import time
def fetch_news(keyword, max_results=50):
payload = {"keyword": keyword, "maxResults": max_results}
r = requests.post(ENDPOINT, json=payload, timeout=180)
r.raise_for_status()
return r.json()
watchlist = ["人工智能", "新能源", "半导体", "机器人"]
all_news = {}
for kw in watchlist:
rows = fetch_news(kw)
all_news[kw] = rows
print(f"{kw}: {len(rows)} 条")
time.sleep(2) # 温柔一点,别把请求打太密
拿到 all_news 之后,你可以按关键词分组落库、去重、做时间线,或者简单统计每个关键词今天出现了多少条新闻,快速判断哪个赛道最近最热闹。
四、定时与自动化
监控类需求的价值,八成来自「自动、持续」。两条路:
- 平台侧定时:在 Apify 上给 Actor 配 Schedule,比如每天早上 8 点自动跑,跑完的结果直接存进 Apify 的数据集,你随时拉取。
- 自己这边定时:用 cron 或者任意任务调度器触发上面的脚本。
一个每日早晨 8 点执行的 crontab 示例:
0 8 * * * /usr/bin/python3 /home/you/jobs/monitor_vc_news.py >> /home/you/logs/vc.log 2>&1
再加一层去重逻辑,就能做到「只推送今天新出现的、我还没见过的新闻」。思路很简单:把已经处理过的新闻做一个唯一标识(比如根据探测到的字段拼一个 key),存进本地集合或数据库,每次跑完先比对:
seen = set() # 实际项目里换成持久化存储
def dedupe(rows):
fresh = []
for r in rows:
# 用探测到的真实字段拼唯一 key(示意)
key = str(sorted(r.items()))
if key not in seen:
seen.add(key)
fresh.append(r)
return fresh
五、小结
监控中国科技创投新闻,难点不在「分析」,而在「持续、稳定地把分散信息变成结构化数据」。china-tech-startup-news 这个 Actor 把这件苦活收敛成 keyword + maxResults 两个参数,你写几十行 Python 就能搭起一套多关键词的自动监控管线,把精力留给判断本身。
想了解更多面向中文与 APAC 场景的数据采集 Actor,可以到 https://thenextgennexus.com 逛逛。有踩坑心得欢迎评论区交流。