# 2026年如何抓取Reddit数据：JSON端点和1,000限制

自从Reddit的API变为付费后，这个金矿变得更难接触——但公共.json端点仍然有效。以下是如何分页、突破1,000项限制，并在不被速率限制的情况下大规模收集数据的方法。

Reddit是互联网上最丰富的意见数据集之一——真实的人们在可搜索的社区中争论产品、工具、品牌和新闻。自从Reddit在2023年将其官方API改为付费定价（广泛报道为每1,000次调用$0.24，导致像Apollo这样的第三方应用关闭）以来，大规模收集这些数据变得更加棘手。但有一个途径没有被定价变化关闭：支持每个Reddit页面的公共`.json`端点。本指南涵盖如何分页、如何突破1,000项限制，以及如何在不触发速率限制的情况下收集数据。

## 在任何Reddit URL后附加.json

几乎每个Reddit URL在添加`.json`后都会返回结构化的JSON。不需要OAuth，不需要客户端密钥——只需一个HTTP GET。子版块列表、带评论树的帖子、用户历史：所有这些。请从这里开始：

```python
import requests

headers = {"User-Agent": "research-script/1.0 by u/yourname"}
proxies = {"http": "http://USER:PASS@residentialpremium.quantumproxies.io:8080",
           "https": "http://USER:PASS@residentialpremium.quantumproxies.io:8080"}

url = "https://www.reddit.com/r/webscraping/new.json?limit=100"
r = requests.get(url, headers=headers, proxies=proxies, timeout=20)
data = r.json()

for child in data["data"]["children"]:
    post = child["data"]
    print(post["title"], post["ups"], post["num_comments"])
```

设置一个描述性的User-Agent——Reddit对通用的User-Agent更严格。JSON直接提供标题、分数（`ups`）、赞成率、评论数、作者和时间戳，因此无需从HTML中解析。

## 使用after令牌进行分页

列表页面使用光标而不是页码。每个响应都包含一个`after`令牌（最后一项的全名，如`t3_abc123`）；将其传回以获取下一批。循环直到`after`返回null：

```python
def fetch_listing(subreddit, sort="new", pages=10):
    after, out = None, []
    for _ in range(pages):
        url = f"https://www.reddit.com/r/{subreddit}/{sort}.json?limit=100"
        if after:
            url += f"&after={after}"
        data = requests.get(url, headers=headers, proxies=proxies, timeout=20).json()
        out += [c["data"] for c in data["data"]["children"]]
        after = data["data"].get("after")
        if not after:
            break
    return out
```

![同一个 subreddit 的四种排序：new、top、hot 和 controversial，每种都以约 1,000 条内容的独立窗口呈现；卡片列出了突破上限的其他方法：对 top 使用从 hour 到 all 的时间筛选、用关键词搜索旧帖、增量轮询 new，以及单个帖子内的评论没有上限。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335171/blog/generated/qp-b9-035-diag1.png)
*1,000项限制是每种排序方式的——结合排序和时间过滤器是突破它的方法。*

## 1,000项限制（以及如何突破它）

这是一个让人惊讶的限制：任何Reddit列表大约在1,000项时停止。分页一个子版块的`new`提要，大约在1,000个帖子后`after`令牌就会耗尽，无论还有多少帖子。这是一个平台范围的行为，而不是抓取器的错误。它**不**适用于单个帖子内的评论——你可以提取成千上万的评论。要从一个社区收集超过1,000个帖子，需要多次查看：

- **结合排序。**抓取`new`，然后是`top`、`hot`和`controversial`。每种排序都是同一子版块的不同1,000项窗口，重叠部分有限——一起可以揭示更多独特的帖子。
- **添加时间过滤器。**在`top`上，迭代`?t=hour`、`day`、`week`、`month`、`year`、`all`以揭示不同的切片。
- **使用搜索。**关键词搜索可以揭示完全从主列表中消失的旧帖子。
- **增量运行。**按计划轮询`new`并通过帖子ID去重，这样你就能在帖子超过1,000项窗口之前捕获所有内容。

```python
# combine sorts to break past the 1,000-item cap
seen, posts = set(), []
for sort in ("new", "top", "hot", "controversial"):
    for post in fetch_listing("webscraping", sort=sort, pages=10):
        if post["id"] not in seen:
            seen.add(post["id"])
            posts.append(post)
print(f"{len(posts)} unique posts across four sorts")
```

## 速率限制和保持不被封锁

一个IP频繁轮询JSON端点会很快被限制——Reddit返回429并最终封锁。保持收集任务健康的两件事：调整节奏（请求之间的短暂延迟比触发限制器的突发更好）并将其分散到多个IP上，这样没有单个地址承载全部负载。通过[住宅代理](https://quantumproxies.io/residential-proxies)路由使研究抓取看起来像许多普通读者而不是一个激进的客户端，而[Scraper API](https://quantumproxies.io/scraper-api)为你处理这种轮换和节奏。如果你不断遇到429，我们的[速率限制和退避](https://quantumproxies.io/blog/fix-429-too-many-requests-scraping)指南涵盖了节奏数学。

## 如何利用它：大规模监听

收集Reddit数据的原因是为了倾听。跟踪你的品牌或竞争对手在各个社区的提及，分析评论树的情感，观察一个小众子版块中值得围绕构建的经常性问题，或在趋势进入主流之前发现它。对于任何超出关键词匹配的内容，通过[LLM提取步骤](https://quantumproxies.io/blog/ai-web-scraping-llm-extraction)将原始文本转化为结构化信号——主题、投诉、功能请求。Reddit的公共数据是可以收集的，但它是人们的帖子；如果你计划处理用户名或个人详细信息，我们关于[2026年抓取合法性](https://quantumproxies.io/blog/is-web-scraping-legal-2026)的概述值得一读（信息性，不是法律建议）。

![四步 Reddit 收集循环：用 limit=100 和 after 令牌翻页 .json 列表，在多个住宅出口之间控制请求节奏，按 fullname 去重，并把帖子输入品牌舆情监听；卡片展示了每一步使用的 JSON 字段：after、帖子的 fullname，以及 title、ups 和评论数。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335171/blog/generated/qp-b9-035-diag2.png)
*分页JSON，跨干净IP调整节奏，按全名去重，数据用于品牌监听或趋势研究。*

[在干净的住宅IP上收集Reddit数据](https://quantumproxies.io/residential-proxies)

## 常见问题解答

### 在API更改后还能抓取Reddit吗？

可以。官方API现在是付费的，但每个Reddit页面背后的公共`.json`端点仍然通过简单的HTTP GET返回结构化数据，无需OAuth。它有速率限制，所以调整请求节奏并分散到多个IP上，但对于研究规模的收集，它仍然是最实用的途径。`old.reddit.com`和RSS提要是额外的轻量级来源。

### 为什么Reddit在1,000个帖子时停止？

Reddit限制任何单个列表——子版块排序、用户历史、搜索——大约在1,000项平台范围内；分页光标会简单地停止。这不是你的抓取器。通过结合排序（new、top、hot、controversial）、应用时间过滤器、使用搜索和运行增量任务来突破它，这样可以在帖子过期之前捕获它们。

### 抓取Reddit需要代理吗？

对于少量请求，不需要。对于持续收集，你需要：一个IP频繁访问JSON端点会被429限制然后封锁。住宅代理分散负载，使流量看起来像许多普通读者，而请求之间的节奏保持在限制器之下。它们一起让研究抓取能够持续运行而不触发防御。

### 抓取Reddit合法吗？

收集公开可见的页面在广泛的范围内是可辩护的，但Reddit的条款限制自动访问，数据包括用户生成的内容和用户名。保持在公共数据范围内，尊重速率限制，并小心处理任何识别个人的内容。这是一般信息，不是法律建议——在进行大型项目之前检查Reddit的当前条款和你的司法管辖区。

API变为付费并没有锁上门——只是移动了把手。`.json`端点、光标分页以及1,000项限制的策略可以获取数据；住宅IP和礼貌的节奏保持收集运行。从那里开始就是一个监听问题，而Reddit是你可以指向的最佳信号之一。如果你还想了解其他平台的API定价故事，我们关于[X/Twitter数据无API](https://quantumproxies.io/blog/twitter-x-data-without-api)的文章描绘了同样的领域。

[使用Scraper API大规模抓取Reddit](https://quantumproxies.io/scraper-api)
