大规模新闻抓取:Google News、RSS及时效性
新闻监控在三个可预测的地方出现问题:JavaScript渲染的搜索、分页限制和每个IP的速率限制。以下是能够应对这三者的管道——Google News、RSS、去重和时效性SLA。
新闻监控听起来像是一个已经解决的问题,直到你尝试每小时在一千个发布者上运行它。然后,同样的三堵墙出现了,这是一篇知名的Scrapy和Selenium教程多年前遇到的问题:你需要的搜索结果是用JavaScript渲染的,对普通HTTP请求返回空白,分页被限制,因此每个查询只能获取前一百多个结果,每个发布者按IP限制速率,因此单个爬虫在几百个请求后会停止。一个能够在大规模下存活的媒体监控管道不是一个聪明的抓取器,而是一个发现、提取、去重和时效性的分层系统。本指南使用Google News、RSS和干净的文章提取来构建该系统,并标记出伦理界限所在。
发现:RSS和Google News垂直搜索
你无法监控你找不到的东西,抓取每个发布者的主页是浪费的。两个发现渠道承担了繁重的工作。RSS源是最便宜和最干净的——发布者授权,已经结构化,且易于轮询——但覆盖面不全且历史浅薄。Google News垂直搜索填补了空白:它按主题和国家显示故事,来源、时间戳和摘要已解析。与其自己抓取News界面,不如通过SERP API查询它,该API以JSON格式返回垂直搜索结果,无需HTML解析,也无需处理阻止:
curl -G "https://api.quantumproxies.io/serp" \
--data-urlencode "engine=google_news" \
--data-urlencode "q=semiconductor export controls" \
--data-urlencode "gl=us" \
--data-urlencode "hl=en" \
-H "Authorization: Bearer YOUR_API_KEY"
使用不同的gl国家代码运行相同的查询是捕捉一个故事的区域覆盖的方法——这项技术很重要,因为同一事件在不同市场的框架不同。关于News和其他垂直搜索为何抵制幼稚抓取的机制,请参见2026年SERP抓取工作原理。
提取:当文章反击时
发现为你提供URL;提取为你提供文章。许多新闻网站仍然提供干净的服务器渲染HTML,对于这些网站,通过旋转IP的简单请求就足够了。但主要媒体越来越多地在客户端渲染文章——或至少是搜索和存档页面——因此原始获取返回一个空壳。这正是空白页面,数据丢失中涵盖的失败模式。与其运行无头浏览器群,不如将渲染交给Scraper API,它执行页面并返回干净的markdown,准备索引:
import requests
def fetch_article(url, api_key):
r = requests.get(
"https://api.quantumproxies.io/scrape",
params={"url": url, "render": "auto", "output": "markdown"},
headers={"Authorization": f"Bearer {api_key}"},
timeout=(5, 40),
)
r.raise_for_status()
return r.json() # { title, byline, published, markdown, canonical }
单爬虫设置中阻碍的每IP限制在这里消失,因为请求自动分布在旋转的住宅池中。当你运行自己的爬虫时,按域而不是全局预算并发性——原因在速率限制揭秘中。

规范化和去重
多来源新闻的混乱现实是相同的故事以不兼容的形式多次到达。日期在同一批次中以March 24, 2021、2 hours ago和ISO时间戳出现;署名格式各异;美联社或路透社的电讯稿被逐字转载在数十个网站上。两个规范化步骤驯服了这一点:
- 将每个日期解析为UTC。 像“昨天”和“3天前”这样的相对字符串必须根据获取时间解析,否则你的时效性逻辑会悄然中断。
- 先按规范URL去重,然后按内容哈希去重。
<link rel="canonical">标签合并一个URL的跟踪参数变体;规范化正文的哈希捕捉在不同URL上存在的联合电讯稿。 - 保留来源地图。 存储哪些媒体报道了一个故事,而不是直接丢弃重复项——“被40个媒体报道”本身就是媒体监控中的信号。
时效性SLA和调度
媒体监控以延迟为标准:晚六小时发现的提及对于声誉或交易用途毫无价值。与其在一个时钟上抓取所有内容,不如分层轮询。热点话题和突发新闻查询每几分钟重新轮询;常规关键词的长尾每小时或每天运行一次。将每个层级视为一个时效性SLA,并在来源错过时发出警报——演示和生产之间的区别正是这个监控层,我们在将抓取器作为生产软件运行中涵盖。
付费墙界限
一些最有价值的报道位于订阅后面,这是监控与伦理相遇的地方。收集标题、摘要、发布日期和公共文章正文是普通的媒体监控。绕过付费墙获取未付费文章的全文是一个不同的行为,涉及版权和服务条款的后果。持久的方法是索引公开提供的内容——标题、摘要、摘要、元数据——并链接到来源以获取全文,或从出售它们的发布者处许可源。这是信息性指导,而非法律建议;对于任何大规模的操作,请与法律顾问确认你的方法。

常见问题解答
如何大规模抓取Google News?
通过SERP API查询Google News垂直搜索,而不是直接抓取界面。你传递一个主题查询加上gl和hl参数用于国家和语言,并以JSON格式获取来源、时间戳和摘要。这避免了自制News抓取器中断的JavaScript渲染和IP阻止,并且在国家代码之间运行查询捕捉同一故事的区域覆盖。
是否有免费的新闻API用于抓取文章?
RSS源是最接近免费的、发布者授权的新闻源,应该是你的第一个发现渠道。它们是结构化的且便宜的轮询,但覆盖不完整且历史浅薄。为了在数千个媒体中获得广泛的、当前的覆盖,你需要将RSS与基于SERP的新闻搜索和直接文章提取结合使用,因为没有单一的免费来源涵盖整个媒体景观。
为什么我的新闻抓取器返回空白页面?
该网站使用JavaScript渲染其内容——通常是搜索和存档页面——因此普通HTTP请求在脚本运行前接收到一个空HTML壳。要么使用基于浏览器的或渲染抓取器API渲染页面,要么找到页面调用的底层JSON端点。空白结果几乎总是意味着客户端渲染而不是网络故障。
如何去重新闻文章?
分两步去重:首先使用页面的规范链接标签合并URL变体以移除跟踪参数副本,然后对规范化文章正文进行哈希以捕捉在不同URL上重新发布的联合电讯稿。保留每个故事被哪些媒体报道的地图,而不是直接删除重复项——在媒体监控中,故事在媒体中的传播是一个核心指标。
大规模新闻不是抓取问题,而是管道问题。将发现、提取、规范化和时效性分为独立阶段,依靠Google News垂直搜索和RSS进行覆盖,并让旋转IP和渲染API吸收JavaScript和速率限制,这些限制会使单爬虫构建失败。这样做,一个布局更改永远不会让整个系统瘫痪。