Python で X(Twitter)をスクレイピング:ツイート・フォロワー取得と CSV 保存
Python で X(旧 Twitter)の公開ツイートとフォロワーを取得し、ページ送りして CSV に保存するチュートリアル。ブラウザ・プロキシ・X アカウントは不要です。
このガイドでは、Python から HTTP リクエストだけで X(旧 Twitter)の公開データを取得します。検索演算子でツイートを検索し、ページ送りで集め、フォロワー一覧と合わせて CSV に保存します。Selenium などのブラウザ、プロキシ、X アカウントは不要で、TwexAPI の API キーだけで動きます。
準備
- twexapi.io でアカウントを作成すると、20,000 クレジット(約4,000件分)が無料で付きます。
- ダッシュボードで API キーをコピーして、環境変数に設定します。
export TWEXAPI_KEY="twexapi_xxx"
pip install requests
ツイートを検索する
高度な検索エンドポイントには、searchTerms(検索語のリスト)、sortBy(Latest または Top)、ページ送り用の next_cursor を渡します。1ページで最大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:ja |
言語 |
min_faves: |
min_faves:100 |
いいね数の下限 |
-filter:replies |
リプライを除外 |
日本語のツイートを集めるなら、searchTerms を ["生成AI", "lang:ja"] のようにします。
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(約7.5円)です。上の例(ツイート200件とフォロワー1,000件)なら合計約 $0.06 です。正確な単価は料金をご覧ください。
Selenium・Playwright・twscrape との違い
X は 2024 年初めにゲストアクセスを終了したため、ブラウザ型やオープンソースのスクレイパーはログイン済みの X アカウントとプロキシが必要になり、X の仕様変更のたびに動かなくなります。API を使えば、そうした保守を自分で抱えずに済みます。詳しくは自前スクレイパー vs TwexAPI をご覧ください。
次のステップ
- X API 料金表と代替サービス:公式 X API の料金・無料枠・制限との比較。
- エラーハンドリング:
429や5xxのときのリトライ方法。 - 取得するのは公開データに限り、個人情報保護法や X の規約に沿って利用してください。