# 2026年にRedditデータをスクレイピングする方法: JSONエンドポイントと1,000件の制限

RedditのAPIが有料化されて以来、データの宝庫にアクセスするのが難しくなりましたが、公開されている.jsonエンドポイントはまだ機能しています。ページング方法、1,000件の制限を突破する方法、レート制限を受けずに大規模にデータを収集する方法を紹介します。

Redditはウェブ上で最も豊富な意見データセットの一つです。製品、ツール、ブランド、ニュースについての実際の人々の議論が検索可能なコミュニティで行われています。2023年にRedditが公式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は一般的なものには厳しいです。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
```

![1つのsubredditの4つの並べ替え（new、top、hot、controversial）を、それぞれ約1,000件の独立したウィンドウとして描いた図。カードには上限を回避するほかの方法を挙げている：topでの時間フィルター（hourからallまで）、古い投稿のキーワード検索、newの差分ポーリング、そして1つの投稿内のコメントには上限がないこと。](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")
```

## レート制限とブロックを回避する方法

JSONエンドポイントを激しくポーリングする1つのIPはすぐにスロットルされ、最終的にブロックされます。収集ジョブを健全に保つための2つの方法があります: ペースを調整する（リクエスト間に短い遅延を設けることでリミッターを超えるバーストを防ぐ）ことと、IP全体に負荷を分散することです。[住宅プロキシ](https://quantumproxies.io/residential-proxies)を経由することで、研究クローラーが1つの攻撃的なクライアントではなく、多くの普通の読者のように見えるようになり、[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)に関する概要を読む価値があります（情報提供目的であり、法的アドバイスではありません）。

![4ステップの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`エンドポイントは、OAuthなしでプレーンなHTTP GETで構造化されたデータを返します。レート制限がありますので、リクエストのペースを調整し、IP全体に分散させる必要がありますが、研究規模の収集には最も実用的なルートです。`old.reddit.com`やRSSフィードも追加の軽量なソースです。

### なぜRedditは1,000件で止まるのですか？

Redditは、サブレディットのソート、ユーザーの履歴、検索など、単一のリストをプラットフォーム全体で約1,000件に制限しています。ページネーションカーソルが単に停止します。これはスクレイパーの問題ではありません。ソート（new、top、hot、controversial）を組み合わせ、時間フィルターを適用し、検索を利用し、段階的なジョブを実行して、ウィンドウから外れる前に投稿をキャプチャすることで、それを超えることができます。

### Redditをスクレイピングするのにプロキシが必要ですか？

少数のリクエストの場合は不要です。持続的な収集には必要です。JSONエンドポイントを叩く単一のIPは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)
