こんにちは、tampopo256です。
大学のイベントでSNSアカウントの分析や整理をする中で、「複数のXアカウントの情報を一括で取得してCSVにまとめたい」というニーズがありました。
そこで、twikitというライブラリを使って、簡単にXユーザー情報をCSVで取得できるスクリプトを作ったので紹介します。
このスクリプトはX(旧Twitter)の利用規約に違反しています。
X(旧Twitter)では明確にスクレイピング行為を禁止しており、非公式APIを用いた情報取得や自動化行為により、アカウントが一時停止・凍結される可能性があります。
本記事は「こういった技術的手法がある」という技術紹介目的であり、筆者およびその所属団体・組織は実際の運用や業務利用を推奨しておりません。
実際に使用する際は必ずX社の利用規約および開発者ポリシーを確認の上、自己責任で行ってください。
✅ やりたいこと
- X(旧Twitter)の@ユーザー名一覧が入ったCSVファイルを読み込む
-
twikitを使ってユーザー情報(名前、ID、フォロワー数など)を取得 - 結果を別のCSVファイルとして保存する
📦 使用ライブラリ
-
twikit:X非公式APIクライアント -
asyncio:非同期処理で高速化 -
csv:読み書き処理
pip install twikit
📄 スクリプト全体
import asyncio
import csv
from twikit import Client
INPUT_FILE = "users.csv"
OUTPUT_FILE = "output.csv"
def clean_user_data(user, identifier):
safe_keys = {
k: v
for k, v in user.__dict__.items()
if not k.startswith("_") and isinstance(v, (str, int, float, bool, type(None)))
}
safe_keys["入力ID"] = identifier
return safe_keys
async def fetch_user_data(client, identifier):
if identifier.strip() == "-":
return {"入力ID": identifier}
try:
user = await client.get_user_by_screen_name(identifier.strip())
return clean_user_data(user, identifier)
except Exception as e:
return {"入力ID": identifier, "error": str(e)}
async def main():
client = Client()
await client.login(
auth_info_1="YOUR_ID", # あなたのXログインID
password="YOUR_PASSWORD", # あなたのパスワード
cookies_file="cookies.json" # Cookieファイルでセッション維持
)
results = []
all_keys = set()
with open(INPUT_FILE, newline='', encoding='utf-8') as infile:
reader = csv.reader(infile)
for row in reader:
identifier = row[0].strip()
print(f"🔍 {identifier} を取得中...")
user_data = await fetch_user_data(client, identifier)
results.append(user_data)
all_keys.update(user_data.keys())
with open(OUTPUT_FILE, "w", newline='', encoding='utf-8') as outfile:
fieldnames = ["入力ID"] + sorted(k for k in all_keys if k != "入力ID")
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
writer.writeheader()
for row in results:
writer.writerow(row)
print(f"✅ 完了しました: {OUTPUT_FILE}")
if __name__ == "__main__":
asyncio.run(main())
🔧 入力CSVの形式
例えば以下のような users.csv を用意します。
kurosangurasu
elonmusk
jack
-
-
-はスキップされ、空データとして処理されます
🧠 補足ポイント
-
twikitはログインが必要です(初回は手動でログイン、以降cookies.jsonを使って再利用可能) -
user.__dict__から_で始まる内部情報を除外し、安全なデータだけをCSVに出力します - 取得できなかったアカウントは
"error"キーにエラーメッセージが記録されます