Tony Wang5 分で読めますTwitter/Xをスクレイピングする方法(2026年版・API & Python)
2026年にTwitter/Xをスクレイピングする3つの方法 — Pythonによる自作、ノーコードツール、または公開プロフィール・投稿・タイムラインを扱う構造化APIと、法律面の基礎知識を解説します。
2026年にTwitter/Xを最も手早くスクレイピングする方法は、正規化されたJSONを返す構造化されたX APIを呼び出すことです。公開プロフィール、投稿、最初のタイムラインページを取得でき、Xの隠れたGraphQL API、ゲストトークン、ローテーションする識別子をヘッドレスブラウザで突破する必要がありません。自作も依然として可能ですが、簡単な道はすべて閉ざされました。無料ライブラリは死に、公式APIは大企業向けの価格で、Xは数週間ごとに防御を作り直しています。このガイドでは3つのアプローチすべてを取り上げ、それぞれが何を返すのか、どこで行き詰まるのか、そして法律面の基礎を解説します。
Twitter/Xのスクレイピングは合法ですか?
慎重に進めてください。公開されているXデータ(公開プロフィール、公開投稿)のスクレイピングは、米国では概ね合法です。hiQ v. LinkedIn の判例では、公開ウェブデータへのアクセスはComputer Fraud and Abuse Act(CFAA)違反にあたらないとされました。ただし、それは刑事上の線引きであって全体像ではありません。Xの規約はスクレイピングを明示的に禁止しており、これはアカウントやIPのBANにつながり得る契約上の問題であり、Xはスクレイパーに対して積極的に訴訟を起こしてきました。さらに公開投稿は、保存・処理する際にGDPR/CCPAの対象となる個人データを含み得ます。目安としては、公開されている非個人データのみを扱う、保護アカウント・DM・ログインの内側にあるものには決して触れない、必要以上にデータを溜め込まない、レート制限を尊重する、という点です。詳しくはウェブスクレイピングは合法かを参照してください。これは法的助言ではありません。
選択肢1:Pythonで自作する(そしてなぜ行き詰まるのか)
XのウェブアプリはGraphQLクライアントです。あなたが目にするすべてのプロフィールやタイムラインは、ゲストトークン、doc_id、レート制限で守られた隠れた内部APIから取得されています。かつての近道 — snscrape、Twint、Nitter — はいずれも匿名ゲストアクセスという1つの依存を共有しており、Xがそれを封鎖したときに揃って壊れました。今なお機能するのは、ページ自身にトークンを要求させ、その裏で発火するJSONを取得するブラウザ自動化です。
from playwright.sync_api import sync_playwright
# Conceptual skeleton — not a maintained solution
with sync_playwright() as pw:
browser = pw.chromium.launch(
proxy={"server": "http://residential-proxy:8000"} # datacenter IPs get banned fast
)
page = browser.new_page()
page.goto("https://x.com/nasa")
page.wait_for_selector("[data-testid='primaryColumn']")
# From here you still handle guest tokens, doc_ids, and rate limits yourself
print(page.content())
デモでは動作しますが、その後すぐに行き詰まります。
- ゲストトークンは失効します。 すべてのGraphQL呼び出しに1つ必要で、数時間しか持たず、Xは各トークンを要求元のIPに紐づけるため、セッションの途中でIPをローテーションするとトークンが壊れます。
doc_idはローテーションします。 GraphQLクエリをルーティングする識別子(UserTweets、TweetResultByRestId)は2〜4週間ごとに変わり、ハードコードされたクエリは静かに失敗するか空の結果を返します。- データセンターのIPは即座にBANされます。 慎重なペース配分(匿名で約300リクエスト/時)を伴うローテーティング residential プロキシが必要で、さもなければ1〜2リクエストで
429やブロックに遭います。 - 公式APIは自作を救いません。 2026年2月以降、Xは新規開発者をデフォルトで従量課金(第三者投稿の読み取りあたり約0.005ドル、月200万リード上限)に誘導し、無料の読み取りティアはありません。レガシーの Basic(月200ドル、7日間検索のみ) と Pro(月5,000ドル、全アーカイブ) は新規登録に対して閉じられています。Tweepy 経由の準拠ルートですが、コストのため公開ページを大規模にスクレイピングするのは非現実的です。
本当のコストはスクレイパーを書くことではなく、数週間ごとに直し続けることであり、通常は月10〜15時間を消費します。
選択肢2:ノーコードツール
ビジュアルな抽出ツールやブラウザ拡張機能はCSV/JSONをエクスポートできます。公開プロフィールの一度きりの取得には向いていますが、予測可能なフィールドを扱う製品内のパイプラインにはあまり向かず、自作と同じゲストトークンとレート制限の脆さを引き継ぎます。
選択肢3:構造化されたX API
公開データを対象とする繰り返し可能なワークフローには、Xスクレイピング APIが、実行するブラウザなし、リフレッシュするトークンなし、そして1つのキーの背後で処理されるプロキシとともに、正規化されたJSONを返します。公開プロフィールを取得するには次のようにします。
curl https://api.crawlora.net/api/v1/x/profile/USERNAME \
-H "x-api-key: $CRAWLORA_API_KEY"
同じ呼び出しをPythonで行う場合は次のとおりです。
import requests
profile = requests.get(
"https://api.crawlora.net/api/v1/x/profile/USERNAME",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(profile["username"], profile["metrics"]["followers"])
レスポンスは正規化されたJSONです(フィールドはあくまで例です。ドキュメントを確認してください)。
{
"data": {
"username": "NASA",
"name": "NASA",
"id": "11348282",
"description": "Making the seemingly impossible, possible. ✨",
"location": "Pale Blue Dot",
"is_blue_verified": true,
"metrics": { "followers": 92157321, "following": 119, "posts": 74188 }
}
}
プロフィールの最初のページの投稿を取得し、次に数値IDで単一の投稿を取得します。
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/x"
posts = requests.get(f"{base}/profile/NASA/posts", headers=h, params={"limit": 20}).json()["data"]
first_id = posts["posts"][0]["id"]
post = requests.get(f"{base}/post/{first_id}", headers=h, params={"username": "NASA"}).json()["data"]
print(post["text"], post["metrics"]["likes"], post["metrics"]["views"])
投稿エンドポイントは最初の公開ページのペイロードのみを読み取ります(limit は1〜50、デフォルト20)。返信、メディアタブ、検索はページ送りしません。username を /post/{id} に渡すと、著者が一致しない場合を拒否できます。公開されている非個人フィールドにとどめてください。
どのアプローチを選ぶべきか
| 自作Playwright | ノーコードツール | 構造化X API | |
|---|---|---|---|
| 導入時間 | 高い | 低い | 低い |
| 保守 | 月10〜15時間 | Xの変更で壊れる | 代行される |
| ゲストトークン / doc_id | 自分で追跡 | 自分で追跡 | キーの背後で処理 |
| プロキシ | residential を自分でローテーション | 多くは自前 | 込み |
| 最適な用途 | 完全な制御、単一プラットフォーム | 一度きりのエクスポート | 繰り返し可能なパイプライン |
収集できるもの
公開ページで公開されている範囲で、ユーザー名、表示名、数値ID、bio、所在地、認証、フォロワー数・フォロー数・投稿数、プロフィールメディア、そして投稿ごとのテキスト、タイムスタンプ、URL、著者コンテキスト、可視のエンゲージメント(いいね、返信、リポスト、閲覧数、ブックマーク)を収集できます。保護アカウント、DM、完全なフォロワーリスト、キーワード・タイムライン検索はログインの内側にあり、対象外です。
制約とよくある課題
- 匿名で見える範囲のみ。 公開プロフィール、個々の投稿、最初のタイムラインページには到達できますが、保護アカウント、DM、フォロワーリスト、検索にはログインが必要で規約の一線を越えます。
- 最初のページであってアーカイブではありません。 プロフィール投稿エンドポイントは最初の公開ペイロードを返すのであって、ページ送りされた過去カタログではありません。全アーカイブ検索はPro/EnterpriseのAPI機能(月5,000ドル〜)であり、スクレイピングの対象ではありません。
- 動く標的。 Xは2〜4週間ごとに防御の変更(ゲストトークン、
doc_id、IPスコアリング)を出します。構造化APIはそれを吸収し、パイプラインがデータを返し続けます。 - URLはプラットフォームの外で見つける。 Xの検索はログインの壁に守られていますが、Googleは公開投稿をインデックスします。
site:x.com inurl:status <keyword>でアカウントなしにターゲットリストを作れます。 - アイデンティティは個人データです。 ユーザー名、氏名、投稿内容はGDPR/CCPAのもとで個人データにあたります。適法な根拠のもと、公開されている事実ベースのフィールドのみを収集してください。
どこで使われるか
- ブランドモニタリング — X上のブランドと競合の公開プレゼンスを追跡します。ブランドモニタリングのユースケースを参照してください。
- ソーシャルリスニングとセンチメント — あるトピックに関する公開投稿をサンプリングしてリサーチします。
- クリエイターリサーチ — 公開プロフィール、リーチ、エンゲージメントを評価します。TikTokやYouTubeのシグナルと組み合わせます。
出典
収集を始める
まずは無料でお試しください: 任意の公開URLを無料ウェブスクレイパーにかけるか、Anti-Botチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
プレイグラウンドでプロフィールエンドポイントを試し、APIドキュメントでスキーマを確認し、料金をご覧ください。ソーシャルスタックの残りについては、Instagramをスクレイピングする方法、TikTokをスクレイピングする方法、YouTubeをスクレイピングする方法、LinkedInをスクレイピングする方法も、ウェブスクレイピングAPIの選び方やウェブスクレイピングは合法かもあわせて参照してください。
よくある質問
2026年でもTwitter/Xをスクレイピングできますか?
はい、公開Xデータ(プロフィール、個々の投稿、最初のタイムラインページ)は依然としてスクレイピング可能ですが、簡単な道はすべて閉ざされました。snscrape、Twint、Nitter はXが匿名ゲストアクセスを封鎖したときに終焉し、公式APIには無料の読み取りティアがありません。今の自作は、ゲストトークン、ローテーションする doc_id、residential プロキシを使ってXの隠れたGraphQL APIをPlaywrightで操作することを意味します。構造化APIは、それらすべてを1つのキーの背後で処理します。
公式X APIは無料ですか?
いいえ。2026年2月以降、Xは新規開発者をデフォルトで従量課金(第三者投稿の読み取りあたり約0.005ドル、月200万リード上限)に誘導し、無料の読み取りティアはありません。レガシーの Basic(月200ドル、7日間検索のみ)と Pro(月5,000ドル、全アーカイブ)は新規登録に対して閉じられており、Enterprise は月約42,000ドルからです。
なぜ自作のTwitterスクレイパーは壊れ続けるのですか?
XのウェブアプリはGraphQLクライアントで、3つのローテーションする仕組みに守られています。数時間で失効し要求元のIPに紐づくゲストトークン、クエリをルーティングし2〜4週間ごとにローテーションする doc_id、そしてデータセンターのレンジを即座にBANするIPレピュテーションスコアリングです。ハードコードされたスクレイパーはこれらのいずれかが変わると静かに失敗し、通常は月10〜15時間の保守を要します。
Twitter/Xのスクレイピングは合法ですか?
公開データのスクレイピングは米国では概ね合法です。hiQ v. LinkedIn は公開ウェブデータへのアクセスがCFAA違反にあたらないとしました。ただしXの規約はスクレイピングを明示的に禁止しており、これはアカウントやIPのBANにつながり得る契約上の問題で、Xはスクレイパーに対して訴訟を起こしてきました。さらに公開投稿はGDPR/CCPAのもとで個人データになり得ます。公開されている非個人フィールドにとどめ、保護アカウント・DM・ログインの内側にあるものには決して触れないでください。これは法的助言ではありません。
どのXデータを収集できますか?
公開フィールドのみです。ユーザー名、表示名、数値ID、bio、所在地、認証、フォロワー数・フォロー数・投稿数、プロフィールメディア、そして投稿ごとのテキスト、タイムスタンプ、URL、著者コンテキスト、可視のエンゲージメント(いいね、返信、リポスト、閲覧数、ブックマーク)です。保護アカウント、DM、完全なフォロワーリスト、キーワード・タイムライン検索はログインの内側にあり、対象外です。
プロフィールの投稿と単一の投稿はどうやって取得しますか?
/x/profile/{username}/posts を呼び出して最初の公開ページの投稿を取得し(limit は1〜50、デフォルト20 — 返信、メディアタブ、検索はページ送りしません)、次に /x/post/{id} で単一の投稿を取得します。任意で username を渡すと著者が一致しない場合を拒否できます。全アーカイブ検索はPro/EnterpriseのAPI機能であり、スクレイピングの対象ではありません。
どのくらいの頻度で更新できますか?
プランと責任ある利用の範囲内で、スケジュールされたスナップショットを実行し、公開プレゼンスとエンゲージメントを経時的に追跡してください。継続的にポーリングするのは避けてください。