2026년 TikTok 공개 데이터 스크래핑 방법 (효과적인 방법)
TikTok의 공개 데이터는 모두 존재합니다 — 숨겨진 JSON 블롭과 커서 페이지네이션 피드에 — 하지만 모든 상용 스크래퍼가 결국 고장나는 이유는 바로 안티봇 레이어 때문입니다. 여전히 효과적인 방법과 모바일 IP가 중요한 이유를 알아보세요.
TikTok은 놀랄 만큼 많은 공개 데이터를 제공합니다 — 프로필, 비디오 메타데이터, 해시태그 피드, 참여 수치 — 이 모든 것을 읽기 위해 로그인할 필요가 없습니다. TikTok 데이터 스크래핑이 어려운 이유는 데이터를 찾는 것이 아니라 사이트의 안티봇 레이어가 자동화된 접근을 공격적으로 차단하기 때문입니다. 그래서 모든 상용 라이브러리가 결국 고장나고, 사용하는 종료 IP가 결과를 얻을지 CAPTCHA를 받을지를 결정합니다. 이 가이드는 공개 데이터가 어디에 있는지, 페이지네이션이 실제로 어떻게 작동하는지, 비공식 도구가 왜 고장나는지, 그리고 모바일 프록시가 실용적인 기본값인 이유를 다룹니다. 이는 공개적이고 비개인적인 연구 데이터 — 트렌드, 크리에이터, 해시태그 — 에 관한 것이며, 개인 계정을 스크래핑하는 것이 아닙니다.
공개 데이터가 실제로 어디에 있는지
TikTok은 클라이언트 렌더링 앱이므로, 단순한 GET 요청은 껍데기만 반환합니다. 유용한 콘텐츠는 두 곳에 있습니다: 페이지에 삽입된 숨겨진 JSON 블롭 (앱이 데이터를 채우는 범용 데이터 스크립트)과 로드 후 앱이 호출하는 내부 피드 엔드포인트입니다. 이 둘 사이에서 시청자가 보는 거의 모든 것을 읽을 수 있습니다: 각 비디오에 대해, 캡션 text, createTime, diggCount (좋아요), shareCount, playCount, commentCount, collectCount, 그리고 중첩된 author, music 및 stats 객체가 포함됩니다. 작가 데이터에는 팔로워 수와 총 좋아요 수, 인증 상태, 바이오 및 바이오 링크가 포함됩니다. 슬라이드쇼 게시물은 isSlideshow를 표시하고 비디오 대신 이미지 링크 배열을 포함합니다.
프로필에는 사용자 이름뿐만 아니라 두 개의 ID가 필요합니다
모든 첫 시도를 방해하는 함정: 사용자의 비디오 피드를 가져오려면 핸들뿐만 아니라 두 개의 식별자가 필요합니다. 숫자 id (userID) 및 secUid가 필요하며, 이는 프로필을 먼저 해결하여 얻을 수 있습니다. secUid를 놓치면 피드 호출은 아무것도 반환하지 않습니다. 한 번 해결한 후 피드를 통해 페이지를 넘기세요.
# Sketch of the account-free flow every TikTok scraper follows.
# 1) Resolve the profile to get BOTH ids
user = get_user("someusername") # -> {"id": ..., "secUid": ...}
user_id, sec_uid = user["id"], user["secUid"]
# 2) Page the feed with those ids (see cursor loop below)
videos = user_feed(user_id, sec_uid)
페이지네이션은 커서 기반 (약 30개로 제한)입니다
하나의 피드 호출은 대략 30개의 게시물을 반환합니다 — 전체 타임라인에는 미치지 못합니다. TikTok은 커서로 페이지네이션합니다: 각 응답에는 cursor (이 배치가 끝난 지점)와 hasMore 불리언이 포함됩니다. 전체 피드를 얻으려면 루프를 돌며 커서를 계속 전달하여 hasMore가 false가 될 때까지 진행합니다. 이때 가장 노출되기 쉬운 부분입니다 — 각 페이지는 IP로부터 또 다른 요청이므로, 긴 타임라인은 하나의 주소에서 많은 호출을 해야 합니다.
def crawl_feed(user_id, sec_uid):
items, cursor, has_more = [], 0, True
while has_more:
page = user_feed(user_id, sec_uid, cursor=cursor) # ~30 posts
items.extend(page["itemList"])
cursor = int(page["cursor"])
has_more = page["hasMore"]
# rotate / pace here — every loop is a fresh request from your IP
return items

비공식 라이브러리가 계속 고장나는 이유
인기 있는 오픈 소스 TikTok 라이브러리를 사용해 본 적이 있다면, 이 느낌을 알 것입니다: 잠시 작동하다가 CAPTCHA나 빈 결과를 반환하기 시작하고, 라이브러리를 유지하기 위한 포크 패치가 나타납니다. 그 변화는 유지 관리자의 잘못이 아닙니다 — TikTok은 서명 및 안티봇 로직을 변경하고, 모든 비공식 클라이언트는 이를 따라잡기 위해 경쟁합니다. 두 가지 교훈이 따릅니다. 유지되는 포크에 고정하고 업데이트를 기대하세요. 그리고 데이터 파이프라인의 신뢰성을 하나의 취약한 라이브러리에 묶지 마세요 — 내구성 있는 부분은 현재 작동하는 가져오기 방법 주위의 자체 파싱 및 회전 레이어입니다.
스크래핑된 미디어 URL은 만료됩니다 — 빠르게 가져오세요
콘텐츠를 아카이빙하는 사람들을 위한 미묘한 함정: TikTok의 아바타, 커버 및 비디오 URL은 시간 서명이 되어 있습니다. x-expires 및 x-signature 쿼리 매개변수를 포함하며 몇 시간 내에 작동을 멈춥니다. 그래서 오늘 아침에 스크래핑한 링크는 저녁에 만료됩니다. 미디어 자체가 필요하다면 발견한 즉시 다운로드하세요; 메타데이터만 필요하다면 안정적인 ID를 저장하고 필요할 때마다 새 URL을 다시 해결하세요.
왜 모바일 프록시가 특히 중요한가
TikTok은 모바일 우선 플랫폼으로 모바일 수준의 안티봇 기대치를 가지고 있으며, 여기서 IP 선택이 모든 것을 결정합니다. 데이터센터 IP는 빠르게 플래그됩니다. 주거용 IP는 훨씬 낫습니다. 하지만 모바일 프록시가 가장 적합한 이유는 통신사 네트워크의 작동 방식 때문입니다: 모바일 운영자는 수천 명의 실제 가입자를 소수의 공유 IP를 통해 라우팅합니다 (CGNAT), 따라서 하나의 모바일 IP는 전체 군중의 진짜 사용자처럼 보입니다. 이를 차단하는 것은 실제 고객을 차단하는 것을 의미하므로 플랫폼은 이를 매우 꺼립니다 — 우리가 모바일 IP가 왜 그렇게 신뢰받는지에서 다루는 이유입니다. 모바일 종료는 또한 지역별 피드를 샘플링할 수 있게 합니다: TikTok은 국가별로 트렌드를 맞춤화하므로, 영국 종료와 미국 종료는 다른 "For You" 콘텐츠를 반환합니다.
TikTok Shop 및 지역 차이
TikTok Shop 제품 데이터는 동일한 형태를 따릅니다 — 공개 목록, 구조화된 JSON, 커서 페이지네이션 — 하지만 가용성은 지역적으로 엄격히 제한되어 있어, 해당 지역의 종료 IP에서만 카탈로그를 볼 수 있습니다. 이것이 TikTok 성장 작업이 위치에 맞춘 IP에 의존하는 이유와 같습니다: Shop 인벤토리나 트렌드 피드를 읽든지 간에, 얻는 콘텐츠는 IP가 위치한 곳에 따라 결정됩니다. 각 시장을 일치하는 종료에서 샘플링하고 결과를 지역별로 취급하세요, 전 세계적인 것이 아닙니다.

DIY 스택을 건너뛰어야 할 때
TikTok 스크래퍼를 유지하는 것은 서명 변경을 추적하고, CAPTCHA를 처리하고, 포크를 관리하는 것을 의미합니다 — 일회성 구축이 아닌 지속적인 비용입니다. TikTok 데이터가 제품의 입력이 아니라면, Scraper API가 페이지를 렌더링하고, 모바일 수준의 IP를 회전시키고, 깨끗한 JSON을 반환하여 유지 관리를 덜어줍니다. 구조를 배우는 동안 자체 스택을 실행하세요; 유지 비용이 통찰력보다 더 많이 들기 시작할 때 관리형 가져오기 레이어로 전환하세요.
자주 묻는 질문
계정 없이 TikTok 데이터를 스크래핑할 수 있나요?
네 — 공개 프로필, 비디오, 해시태그 및 그들의 참여 메타데이터는 로그인 없이 읽을 수 있습니다, 왜냐하면 TikTok이 그것들을 숨겨진 JSON 블롭에 포함시키고 내부 피드 엔드포인트를 통해 제공합니다. 여전히 프로필의 숫자 id와 secUid를 해결한 후 피드를 페이지해야 하며, 깨끗하고 회전하는 IP 없이 안티봇 플래그에 걸리게 됩니다.
왜 내 TikTok 스크래퍼가 CAPTCHA를 받나요?
TikTok은 자동화처럼 행동하는 IP를 플래그합니다 — 너무 많은 요청, 데이터센터 주소 범위, 또는 평판이 좋지 않은 IP. 커서 페이지네이션은 이를 악화시킵니다, 왜냐하면 전체 타임라인은 하나의 IP에서 많은 호출이기 때문입니다. 요청을 회전하는 모바일 또는 주거용 풀에 분산하고, 속도를 조절하며, 응답을 검증하세요. 모바일 IP는 실제 가입자들이 공유하기 때문에 가장 적은 의심을 받습니다.
하나의 요청이 얼마나 많은 TikTok 데이터를 반환할 수 있나요?
단일 피드 호출은 대략 30개의 게시물을 반환합니다. 전체 타임라인을 수집하려면 응답이 제공하는 커서를 반복하여, hasMore 플래그가 false가 될 때까지 계속 전달하세요. 각 페이지는 IP로부터 또 다른 요청이므로, 더 긴 타임라인은 더 많은 노출을 의미합니다 — 그래서 회전과 속도 조절이 수가 증가함에 따라 중요합니다.
TikTok에 모바일 프록시가 필요하나요?
꼭 그렇지는 않지만, 가장 강력한 옵션입니다. 데이터센터 IP는 빠르게 플래그됩니다; 주거용 IP는 더 잘 작동합니다; 모바일 프록시는 가장 잘 작동합니다, 왜냐하면 통신사 CGNAT는 하나의 모바일 IP가 많은 실제 사용자에 의해 공유되기 때문에, 플랫폼은 이를 차단하기를 꺼립니다. 모바일 종료는 또한 종료 국가를 선택하여 지역별 트렌드 및 Shop 데이터를 가져올 수 있게 합니다.
TikTok의 공개 데이터는 로그인 없이 모두 접근 가능합니다 — 어려운 부분은 접근 가능성을 유지하는 것입니다. 두 프로필 ID를 해결하고, 커서를 루프하며, 서명된 미디어를 즉시 가져오고, 모바일 수준의 IP를 통해 라우팅하여 요청이 숨겨진 군중처럼 보이도록 하세요. IP 레이어를 제대로 설정하면 나머지는 그냥 JSON입니다.