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だけです。サブレディットのリスト、コメントツリー付きの投稿、ユーザーの履歴など、すべてが対象です。ここから始めましょう:

import requests

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

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を返すまでループします:

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
Redditをスクレイピングするための重要な数字: 1,000件のリスト制限、1,000回のAPI呼び出しごとに$0.24、.jsonエンドポイント、4つのソートを組み合わせる
1,000件の制限はソートごとです。ソートと時間フィルターを組み合わせることで、それを超えることができます。

1,000件の制限(そしてそれを突破する方法)

多くの人を驚かせる制限があります: 任意のRedditリストは約1,000件で停止します。サブレディットのnewフィードをページングすると、約1,000件の投稿後にafterトークンが枯渇します。これはプラットフォーム全体の動作であり、スクレイパーのバグではありません。単一の投稿内のコメントには適用されません。数千のコメントを引き出すことができます。コミュニティから1,000件以上の投稿を収集するには、ビューを増やします:

# 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全体に負荷を分散することです。住宅プロキシを経由することで、研究クローラーが1つの攻撃的なクライアントではなく、多くの普通の読者のように見えるようになり、Scraper APIがその回転とペースを処理します。429を頻繁に受ける場合は、レート制限とバックオフに関するガイドでペースの数学を確認できます。

それをどう活用するか: 大規模なリスニング

Redditデータを収集する理由はリスニングです。ブランドや競合他社の言及をコミュニティ全体で追跡し、コメントツリーで感情を分析し、ニッチなサブレディットで繰り返し発生する問題を監視して、それに基づいて構築する価値があるかどうかを判断したり、主流になる前にトレンドを見つけたりします。キーワードマッチングを超えた何かを行うためには、生のテキストをLLM抽出ステップに通すことで、混乱したスレッドを構造化されたシグナル(テーマ、苦情、機能要求)に変えることができます。Redditの公開データは収集しても問題ありませんが、それは人々の投稿です。ユーザー名や個人情報を処理する予定がある場合は、2026年のスクレイピングの合法性に関する概要を読む価値があります(情報提供目的であり、法的アドバイスではありません)。

Reddit収集ループ: 住宅出口を通じて.jsonエンドポイントをページングし、投稿IDで重複を排除し、リスニングのためにデータを使用する
JSONをページングし、クリーンなIP全体にペースを調整し、フルネームで重複を排除し、データをブランドリスニングやトレンド研究に活用します。

クリーンな住宅IPでRedditデータを収集する

よくある質問

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なしでに関する投稿で同じ領域をマッピングしています。

Scraper APIでRedditを大規模にスクレイピングする