---
title: "Python で X（Twitter）をスクレイピング：ツイート・フォロワー取得と CSV 保存"
description: "Python で X（旧 Twitter）の公開ツイートとフォロワーを取得し、ページ送りして CSV に保存するチュートリアル。ブラウザ・プロキシ・X アカウントは不要です。"
---

このガイドでは、Python から HTTP リクエストだけで X（旧 Twitter）の公開データを取得します。検索演算子でツイートを検索し、ページ送りで集め、フォロワー一覧と合わせて CSV に保存します。Selenium などのブラウザ、プロキシ、X アカウントは不要で、TwexAPI の API キーだけで動きます。

## 準備

1. [twexapi.io](https://twexapi.io/get-started) でアカウントを作成すると、20,000 クレジット（約4,000件分）が無料で付きます。
2. ダッシュボードで API キーをコピーして、環境変数に設定します。

```bash
export TWEXAPI_KEY="twexapi_xxx"
pip install requests
```

## ツイートを検索する

[高度な検索エンドポイント](/ja/api-reference/search-endpoints/get-data-page-twitter-advanced-search-page-post)には、`searchTerms`（検索語のリスト）、`sortBy`（`Latest` または `Top`）、ページ送り用の `next_cursor` を渡します。1ページで最大20件が返ります。

```python
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 に保存する

```python
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 で開いても日本語や絵文字が文字化けしません。

## フォロワーを取得する

[フォロワー取得エンドポイント](/ja/api-reference/followers-following-endpoints/get-followers-cursor-apiendpoint-twitter-followers-page-post)も同じカーソル方式なので、`paginate` 関数をそのまま使えます。

```python
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 です。正確な単価は[料金](/ja/guides/pricing)をご覧ください。

## Selenium・Playwright・twscrape との違い

X は 2024 年初めにゲストアクセスを終了したため、ブラウザ型やオープンソースのスクレイパーはログイン済みの X アカウントとプロキシが必要になり、X の仕様変更のたびに動かなくなります。API を使えば、そうした保守を自分で抱えずに済みます。詳しくは[自前スクレイパー vs TwexAPI](/ja/comparison/scraper-vs-api) をご覧ください。

## 次のステップ

- [X API 料金表と代替サービス](https://twexapi.io/ja/twitter-api-pricing)：公式 X API の料金・無料枠・制限との比較。
- [エラーハンドリング](/ja/guides/error-handling)：`429` や `5xx` のときのリトライ方法。
- 取得するのは公開データに限り、個人情報保護法や X の規約に沿って利用してください。
