# 大规模新闻抓取：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](https://quantumproxies.io/serp-api)查询它，该API以JSON格式返回垂直搜索结果，无需HTML解析，也无需处理阻止：

```bash
curl -X POST "https://api.quantumproxies.io/v1/scraper/serp" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "semiconductor export controls", "search_type": "news", "gl": "us", "hl": "en"}'
```

使用不同的`gl`国家代码运行相同的查询是捕捉一个故事的区域覆盖的方法——这项技术很重要，因为同一事件在不同市场的框架不同。关于News和其他垂直搜索为何抵制幼稚抓取的机制，请参见[2026年SERP抓取工作原理](https://quantumproxies.io/blog/how-serp-scraping-works-in-2026)。

## 提取：当文章反击时

发现为你提供URL；提取为你提供文章。许多新闻网站仍然提供干净的服务器渲染HTML，对于这些网站，通过旋转IP的简单请求就足够了。但主要媒体越来越多地在客户端渲染文章——或至少是搜索和存档页面——因此原始获取返回一个空壳。这正是[空白页面，数据丢失](https://quantumproxies.io/blog/scraper-returns-empty-page-javascript)中涵盖的失败模式。与其运行无头浏览器群，不如将渲染交给[Scraper API](https://quantumproxies.io/scraper-api)，它执行页面并返回干净的markdown，准备索引：

```python
import requests

def fetch_article(url, api_key):
    r = requests.post(
        "https://api.quantumproxies.io/v1/scraper/extract",
        headers={"Authorization": f"Bearer {api_key}"},
        json={"url": url, "format": "markdown"},
        timeout=(5, 120),
    )
    r.raise_for_status()
    p = r.json()["payload"]
    return {"title": p["title"], "markdown": p["content"], "canonical": p["metadata"].get("canonical")}
```

单爬虫设置中阻碍的每IP限制在这里消失，因为请求自动分布在旋转的住宅池中。当你运行自己的爬虫时，按域而不是全局预算并发性——原因在[速率限制揭秘](https://quantumproxies.io/blog/fix-429-too-many-requests-scraping)中。

![由四个独立阶段组成的新闻媒体监控流水线：通过 Google News 垂直接口和 RSS 发现报道，借助渲染把文章提取为 markdown，把所有日期统一为 UTC，然后按规范 URL 和内容哈希去重；卡片指出，页面布局变化只影响提取阶段。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335176/blog/generated/qp-b9-040-diag1.png)
*保持发现、提取、规范化和去重为独立阶段。当一个发布者更改其布局时，只需修复提取步骤。*

## 规范化和去重

多来源新闻的混乱现实是相同的故事以不兼容的形式多次到达。日期在同一批次中以`March 24, 2021`、`2 hours ago`和ISO时间戳出现；署名格式各异；美联社或路透社的电讯稿被逐字转载在数十个网站上。两个规范化步骤驯服了这一点：

- **将每个日期解析为UTC。** 像“昨天”和“3天前”这样的相对字符串必须根据获取时间解析，否则你的时效性逻辑会悄然中断。
- **先按规范URL去重，然后按内容哈希去重。** `<link rel="canonical">`标签合并一个URL的跟踪参数变体；规范化正文的哈希捕捉在不同URL上存在的联合电讯稿。
- **保留来源地图。** 存储哪些媒体报道了一个故事，而不是直接丢弃重复项——“被40个媒体报道”本身就是媒体监控中的信号。

## 时效性SLA和调度

媒体监控以延迟为标准：晚六小时发现的提及对于声誉或交易用途毫无价值。与其在一个时钟上抓取所有内容，不如分层轮询。热点话题和突发新闻查询每几分钟重新轮询；常规关键词的长尾每小时或每天运行一次。将每个层级视为一个时效性SLA，并在来源错过时发出警报——演示和生产之间的区别正是这个监控层，我们在[将抓取器作为生产软件运行](https://quantumproxies.io/blog/schedule-monitor-web-scrapers)中涵盖。

## 付费墙界限

一些最有价值的报道位于订阅后面，这是监控与伦理相遇的地方。收集标题、摘要、发布日期和公共文章正文是普通的媒体监控。绕过付费墙获取未付费文章的全文是一个不同的行为，涉及版权和服务条款的后果。持久的方法是索引公开提供的内容——标题、摘要、摘要、元数据——并链接到来源以获取全文，或从出售它们的发布者处许可源。这是信息性指导，而非法律建议；对于任何大规模的操作，请与法律顾问确认你的方法。

![以表格比较的三条新闻数据路线，其中 Google News 垂直接口一栏被高亮：RSS 源最便宜但覆盖不全，Google News SERP 垂直接口通过一个 API 实现按主题和地区发现新闻，直接抓取文章能获得完整正文，但维护工作量最大。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335176/blog/generated/qp-b9-040-diag2.png)
*RSS是最便宜的，Google News垂直搜索通过一个API提供主题和地理发现，而直接抓取则以最多的维护成本提供完整的文章正文。*

## 常见问题解答

### 如何大规模抓取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和速率限制，这些限制会使单爬虫构建失败。这样做，一个布局更改永远不会让整个系统瘫痪。

[将Google News垂直搜索作为干净的JSON提取](https://quantumproxies.io/serp-api)
