X画像ダウンローダーの紹介
2025-10-06
Automate X Image Downloads with Python & Selenium
はじめに:こんな悩み、ありませんか?
Xを使っていて、こんな経験はないでしょうか?
- 「このイラストレーターさんの作品を全部保存したい...」
- 「過去のツイート画像をまとめてバックアップしたい」
- 「お気に入りのアカウントの画像だけ集めたい」
でも、X(旧Twitter)には画像を一括ダウンロードする機能がありません。一枚一枚右クリックして保存するのは、数が多いと本当に大変ですよね。
そこで今回、Seleniumを使って指定ユーザーの画像を自動で一括ダウンロードするPythonツールを作りました!
作成したツールの特徴
🎯 主な機能
CLIでの完全自動化
- コマンドライン上ですべて完結
- パスワード入力も安全(非表示)
高画質ダウンロード
- オリジナル画質で保存(
?format=jpg&name=large) - 圧縮なしの綺麗な画像
- オリジナル画質で保存(
柔軟な設定
- スクロール回数で取得量を調整
- ヘッドレスモードでバックグラウンド実行
進捗の可視化
- リアルタイムで収集枚数を表示
- どれだけダウンロードできたか一目瞭然
技術スタック
このツールは以下の技術を使用しています:
- Python 3.7+
- Selenium 4.36.0 # ブラウザ自動操作
- Requests 2.32.3 # 画像ダウンロード最小限のパッケージ構成で、シンプルかつ高速に動作します。
使い方:3ステップで簡単ダウンロード
ステップ1:インストール
# リポジトリをクローン
git clone https://github.com/kiyohken2000/x_image_downloader.git
cd x_image_downloader
# 必要なパッケージをインストール
pip install -r requirements.txtステップ2:実行
python x_image_downloader.pyステップ3:設定を入力
対話形式で簡単に設定できます:
=== X画像ダウンローダー (Selenium版) ===
--- Xログイン情報 ---
ログインしますか? (y/n, デフォルトy): y
Xのログインユーザー名/メール/電話番号: your_username
Xのパスワード (入力は表示されません): ********
--- ダウンロード設定 ---
画像をダウンロードするユーザー名 (@ なし): target_user
スクロール回数 (デフォルト20): 50
スクロール間隔・秒 (デフォルト3): 3
ヘッドレスモード (バックグラウンド実行)? (y/n, デフォルトn): nたったこれだけで、自動的に画像をダウンロードしてくれます!
実装のポイント
1. Seleniumによるブラウザ自動操作
def setup_driver(headless=False):
options = Options()
if headless:
options.add_argument('--headless')
options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=options)
return driverChromeを自動操作し、実際のユーザーと同じようにページをスクロールして画像を収集します。
2. 自動ログイン機能
def login_to_x(driver, username, password):
driver.get("https://twitter.com/i/flow/login")
# ユーザー名入力
username_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'input[autocomplete="username"]'))
)
username_input.send_keys(username)
# パスワード入力...CLIで入力した情報を使って、Seleniumが自動でログイン処理を行います。getpassを使うことで、パスワードを画面に表示せず安全に入力できます。
3. 賢い画像収集アルゴリズム
# 複数のセレクタで確実に画像を取得
images = []
images.extend(driver.find_elements(By.CSS_SELECTOR, 'img[src*="pbs.twimg.com/media"]'))
images.extend(driver.find_elements(By.CSS_SELECTOR, 'article img'))
images.extend(driver.find_elements(By.CSS_SELECTOR, 'div[data-testid*="Tweet"] img'))Xの動的な読み込みに対応するため、複数のCSSセレクタを使用して確実に画像を検出します。
4. 段階的スクロールで確実に読み込み
# よりゆっくり複数回スクロール
for scroll_step in range(5):
driver.execute_script(f"window.scrollBy(0, {200 * (scroll_step + 1)});")
time.sleep(scroll_pause * 0.3)一気にスクロールせず、段階的にスクロールすることで、遅延読み込みの画像も確実に取得します。
実際の使用例
例1:イラストレーターの作品を収集
画像をダウンロードするユーザー名: favorite_artist
スクロール回数: 100
スクロール間隔: 3秒
結果: 478枚の画像をダウンロード
保存先: x_images_favorite_artist_20251006_140019/例2:自分のツイート画像をバックアップ
画像をダウンロードするユーザー名: my_account
スクロール回数: 200
ヘッドレスモード: y
結果: 1,234枚の画像をバックアップ完了パフォーマンスとベストプラクティス
推奨設定
| 用途 | スクロール回数 | スクロール間隔 | ヘッドレスモード |
|---|---|---|---|
| 最近の投稿のみ | 10-20 | 3秒 | オフ |
| 数ヶ月分 | 50-100 | 3秒 | オン |
| 全期間 | 100-200 | 4-5秒 | オン |
注意点
レート制限に注意
- スクロール間隔は最低3秒推奨
- 一度に大量ダウンロードしすぎない
利用規約の遵守
- 個人利用・研究目的での使用
- 著作権に配慮した取り扱い
セキュリティ
- パスワードはGit管理外(
.gitignoreで除外) - セッション情報は一時的なもの
- パスワードはGit管理外(
トラブルシューティング
Q: 画像が少ししかダウンロードされない
A: 以下を試してください:
- ログインオプションで「y」を選択
- スクロール回数を増やす(50-100)
- スクロール間隔を長くする(5秒など)
Q: ログインに失敗する
A: 以下を確認:
- 2段階認証を一時的に無効化
- ヘッドレスモードをオフにして手動でログイン確認
まとめ
このツールを使えば、Xの画像を簡単に一括ダウンロードできます。
このツールの利点:
- ✅ 完全自動化で手間いらず
- ✅ 高画質で保存
- ✅ CLIで完結、使いやすい
- ✅ オープンソースで自由にカスタマイズ可能
こんな人におすすめ:
- イラストや写真のコレクターの方
- 自分のツイート画像をバックアップしたい方
- 研究やアーカイブ目的で画像収集したい方
GitHubで公開中
ソースコードは以下で公開しています:
x_image_downloader/
├── x_image_downloader.py # メインスクリプト
├── requirements.txt # 依存パッケージ
├── .gitignore # Git除外設定
└── README.md # ドキュメントぜひスターやフォークをお願いします!バグ報告や機能リクエストもお待ちしています。
免責事項: このツールは教育・研究目的で作成されました。Xの利用規約を遵守し、自己責任でご利用ください。