Python으로 Twitter(X) 스크레이핑: 트윗, 팔로워 수집과 CSV 내보내기
Python 튜토리얼: TwexAPI REST API로 X(Twitter)의 공개 트윗과 팔로워를 수집하고, 페이지를 넘기며 CSV로 저장합니다. 브라우저, 프록시, X 계정이 필요 없습니다.
이 가이드는 Python에서 일반 HTTP 요청만으로 X(Twitter)의 공개 데이터를 수집합니다. 고급 검색 연산자로 트윗을 검색하고, 결과 페이지를 넘기고, 팔로워 목록을 내보내 모두 CSV로 저장합니다. 헤드리스 브라우저, 프록시, X 계정 없이 TwexAPI API 키만 있으면 됩니다.
준비
- twexapi.io에서 계정을 만들면 무료 20,000 크레딧(약 4,000건 읽기)을 받습니다.
- 대시보드에서 API 키를 복사해 환경 변수로 설정합니다.
export TWEXAPI_KEY="twexapi_xxx"
pip install requests
트윗 검색
고급 검색 엔드포인트는 searchTerms(검색어 목록), sortBy(Latest 또는 Top), 페이지 이동용 next_cursor를 받습니다. 한 페이지에 최대 20개의 트윗이 반환됩니다.
import os
import time
import requests
API = "https://api.twexapi.io"
HEADERS = {"Authorization": f"Bearer {os.environ['TWEXAPI_KEY']}"}
def paginate(path, body, max_items):
"""POST a cursor endpoint until max_items rows or the last page."""
items, cursor = [], ""
while len(items) < max_items:
res = requests.post(f"{API}{path}", headers=HEADERS, json={**body, "next_cursor": cursor}, timeout=30)
res.raise_for_status()
page = res.json()
items += [row for row in page.get("data", []) if row]
cursor = page.get("next_cursor")
if not page.get("has_next_page") or not cursor:
break
time.sleep(5) # free Starter plan: 1 request per 5 seconds; paid plans allow 5+ per second
return items[:max_items]
tweets = paginate(
"/twitter/advanced_search/page",
{"searchTerms": ["openai", "lang:en", "min_faves:100", "since:2026-10-01"], "sortBy": "Latest"},
max_items=200,
)
print(len(tweets), "tweets")
searchTerms에는 X 검색창과 같은 연산자를 쓸 수 있습니다.
| 연산자 | 예시 | 의미 |
|---|---|---|
from: |
from:nasa |
특정 계정의 게시물 |
since: / until: |
since:2026-10-01 |
기간 |
lang: |
lang:ko |
언어 |
min_faves: |
min_faves:100 |
최소 좋아요 수 |
-filter:replies |
답글 제외 |
CSV로 저장
import csv
with open("tweets.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["tweet_id", "created_at", "user", "likes", "retweets", "text"])
for t in tweets:
writer.writerow([
t.get("tweet_id"),
t.get("created_at"),
(t.get("user") or {}).get("screen_name"),
t.get("favorite_count"),
t.get("retweet_count"),
(t.get("text") or "").replace("\n", " "),
])
utf-8-sig로 저장하면 Excel에서 열어도 한글과 이모지가 깨지지 않습니다.
팔로워 수집
팔로워 엔드포인트도 같은 커서 방식이라 paginate 함수를 그대로 쓸 수 있습니다.
followers = paginate("/twitter/followers/page", {"screen_name": "nasa"}, max_items=1000)
with open("followers.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["username", "name", "followers", "location", "bio"])
for u in followers:
writer.writerow([u.get("username"), u.get("name"), u.get("followersCount"), u.get("location"), u.get("description")])
비용
일반적인 읽기는 1건에 5 크레딧, 트윗이나 팔로워 1,000건당 약 $0.05입니다. 위 예시(트윗 200건과 팔로워 1,000건)는 합계 약 $0.06입니다. 정확한 단가는 요금 안내를 참고하세요.
Selenium, Playwright, twscrape를 쓰지 않는 이유
X가 2024년 초 게스트 접근을 종료한 뒤로 브라우저 기반 및 오픈소스 스크레이퍼는 로그인된 X 계정과 프록시가 필요하고, X가 사이트를 바꿀 때마다 깨집니다. API를 쓰면 이런 유지보수를 직접 하지 않아도 됩니다. 자세한 비교는 자체 Twitter 스크레이퍼 vs TwexAPI를 참고하세요.
다음 단계
- Twitter 스크레이퍼 API 개요: 수집할 수 있는 데이터와 Apify, 공식 API와의 비교.
- 오류 처리:
429와5xx응답 시 재시도와 백오프. - 공개 데이터만 수집하고, 개인정보 관련 법규와 X 약관을 지키세요.