본문으로 건너뛰기
Twexapi
한국어
Esc
↑↓이동↵열기⌘J미리보기
이 페이지에서

Python으로 Twitter(X) 스크레이핑: 트윗, 팔로워 수집과 CSV 내보내기

Python 튜토리얼: TwexAPI REST API로 X(Twitter)의 공개 트윗과 팔로워를 수집하고, 페이지를 넘기며 CSV로 저장합니다. 브라우저, 프록시, X 계정이 필요 없습니다.

이 가이드는 Python에서 일반 HTTP 요청만으로 X(Twitter)의 공개 데이터를 수집합니다. 고급 검색 연산자로 트윗을 검색하고, 결과 페이지를 넘기고, 팔로워 목록을 내보내 모두 CSV로 저장합니다. 헤드리스 브라우저, 프록시, X 계정 없이 TwexAPI API 키만 있으면 됩니다.

준비

  1. twexapi.io에서 계정을 만들면 무료 20,000 크레딧(약 4,000건 읽기)을 받습니다.
  2. 대시보드에서 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 약관을 지키세요.

이 페이지가 도움이 되었나요?