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는 일반적인 User-Agent에 더 엄격합니다. 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

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개 항목 창을 지나치기 전에 모든 것을 캡처하세요.
# 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 엔드포인트를 강하게 폴링하는 단일 IP는 빠르게 제한됩니다 — Reddit는 429를 반환하고 결국 차단합니다. 수집 작업을 건강하게 유지하는 두 가지 방법이 있습니다: 속도를 조절하세요 (요청 사이에 짧은 지연을 두어 제한기를 작동시키는 폭발을 피하세요) 그리고 IP에 걸쳐 분산하세요. 이렇게 하면 단일 주소가 전체 부하를 감당하지 않습니다. 주거용 프록시를 통해 라우팅하면 연구 크롤이 한 명의 공격적인 클라이언트가 아닌 여러 일반 독자로 보이게 하며, Scraper API가 그 회전과 속도 조절을 처리합니다. 429를 계속 맞고 있다면, 속도 제한 및 백오프에 대한 우리의 가이드가 속도 조절 수학을 다룹니다.
이를 활용하는 방법: 대규모 청취
Reddit 데이터를 수집하는 이유는 듣기 위해서입니다. 커뮤니티 전반에 걸쳐 브랜드나 경쟁사의 언급을 추적하고, 댓글 트리에 감정 분석을 실행하고, 반복적인 문제를 해결할 가치가 있는 틈새 서브레딧을 관찰하거나, 주류에 도달하기 전에 트렌드를 포착하세요. 키워드 매칭을 넘어서려면, 원시 텍스트를 LLM 추출 단계에 통과시켜 혼란스러운 스레드를 구조화된 신호로 변환하세요 — 테마, 불만, 기능 요청. Reddit의 공개 데이터는 수집하기에 적합하지만, 이는 사람들의 게시물입니다. 사용자 이름이나 개인 정보를 처리할 계획이라면, 2026년 웹 스크래핑의 합법성에 대한 개요를 읽어보는 것이 좋습니다 (정보 제공용, 법적 조언 아님).

자주 묻는 질문
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 없이에 대한 우리의 게시물이 동일한 지형을 맵핑합니다.