はじめに:Instaloaderとは? 🤔
Instaloaderは、Instagramから写真、動画、ストーリー、プロフィール情報、ハッシュタグに関連する投稿、コメント、キャプションなどのメタデータをダウンロードするための強力なオープンソースツールです。Pythonで書かれており、コマンドラインツールとしても、Pythonライブラリとしても利用できます。
公開されているプロフィールはもちろん、ログインすれば非公開プロフィール、自分のフィード、フォローしている人のストーリー、保存済みの投稿などもダウンロード可能です。Instagramのコンテンツを分析したり、バックアップしたりする際に非常に役立ちます。
主な機能:
- 公開・非公開プロフィールの投稿ダウンロード
- ハッシュタグに関連する投稿のダウンロード
- ストーリー、ハイライト、リール、IGTV動画のダウンロード
- フィード、保存済みメディアのダウンロード
- 投稿のキャプション、コメント、ジオタグなどのメタデータ取得
- プロフィールの変更(ユーザー名の変更など)を自動検出して対応
- ダウンロードの中断と再開
- 柔軟なフィルタリングオプション
このツールは、データ収集や分析、個人的なバックアップなど、様々な目的で活用できますが、利用にあたってはInstagramの利用規約や著作権、プライバシーに十分配慮する必要があります。
Instaloaderのインストール 💻
Instaloaderを使用するには、まずPythonがインストールされている必要があります。Python 3.8以上が推奨されています。Pythonがインストールされていれば、pip(Pythonのパッケージインストーラ)を使って簡単にInstaloaderをインストールできます。
ターミナル(Windowsの場合はコマンドプロンプトまたはPowerShell)を開き、以下のコマンドを実行してください。
pip install instaloader
または、Python 3であることを明示するために `pip3` を使うことも推奨されます。
pip3 install instaloader
これでInstaloaderがシステムにインストールされ、コマンドラインから `instaloader` コマンドを実行したり、Pythonスクリプト内で `import instaloader` としてライブラリを読み込んだりできるようになります。
最新バージョンはPyPI (Python Package Index) で確認できます。2025年1月23日にはバージョン4.14.1がリリースされています。
正常にインストールされたか確認するには、以下のコマンドを実行します。
instaloader --help
これにより、利用可能なオプションの一覧が表示されれば、インストールは成功です。
基本的な使い方(コマンドライン)🚀
Instaloaderの最も簡単な使い方は、コマンドラインインターフェース(CLI)を利用することです。基本的なコマンド構造は以下のようになります。
instaloader [オプション] ターゲット
「ターゲット」には、ダウンロードしたい対象を指定します。主なターゲットの種類は以下の通りです。
- プロフィール名: 特定のユーザーの投稿をダウンロードします。(例: `instaloader instagram`)
- #ハッシュタグ: 特定のハッシュタグが付いた投稿をダウンロードします。(例: `instaloader “#猫”` ※引用符が必要な場合があります)
- %ロケーションID: 特定の場所に関連付けられた投稿をダウンロードします。(例: `instaloader %362629379`)
- :stories: フォローしているユーザーの現在のストーリーをダウンロードします。(要ログイン)
- :feed: 自身のフィードの投稿をダウンロードします。(要ログイン)
- :saved: 自身が保存した投稿をダウンロードします。(要ログイン)
- @プロフィール名: 指定したプロフィールがフォローしている全ユーザーの投稿をダウンロードします。(例: `@instagram`)
プロフィール全体のダウンロード
特定のユーザーのすべての投稿(写真、動画)とプロフィール写真をダウンロードするには、以下のようにユーザー名を指定します。
instaloader ユーザー名
例えば、Instagramの公式アカウントの投稿をダウンロードする場合は、
instaloader instagram
実行すると、カレントディレクトリに `instagram` という名前のフォルダが作成され、その中に投稿データが保存されます。ファイル名は通常、投稿日時に基づいて付けられます。
特定の投稿のダウンロード
個別の投稿だけをダウンロードしたい場合は、その投稿のURLを使用します。
instaloader -- -投稿の短いURLコード
例えば、投稿URLが `https://www.instagram.com/p/Cabcdefghij/` の場合、短いURLコードは `Cabcdefghij` です。コマンドは以下のようになります。(ハイフン `–` が必要です)
instaloader -- -Cabcdefghij
あるいは、Pythonモジュールとして利用する場合は、投稿URLを直接使うことも可能です。
ハッシュタグのダウンロード
特定のハッシュタグが付いた投稿をダウンロードするには、ハッシュタグの前に `#` を付けます。多くの場合、シェルでの解釈を避けるために引用符で囲む必要があります。ハッシュタグのダウンロードには通常ログインが必要です。
instaloader --login=あなたのユーザー名 "#人気スポット"
その他のダウンロード
ストーリーやハイライト、リールなどをダウンロードするには、追加のオプションが必要です。
- ストーリー: `–stories` オプションをプロフィール名と併用します。(要ログイン)
- ハイライト: `–highlights` オプションをプロフィール名と併用します。(要ログイン)
- リール: `–reels` オプションをプロフィール名と併用します。
- IGTV: `–igtv` オプションをプロフィール名と併用します。
- タグ付けされた投稿: `–tagged` オプションをプロフィール名と併用します。
例:ユーザー `someuser` の投稿、ストーリー、ハイライトをダウンロードする場合(ログインが必要)
instaloader --login=あなたのユーザー名 --stories --highlights someuser
ダウンロードされたファイルは、デフォルトではターゲット名のフォルダに保存されます。例えば `instaloader username` を実行すると、`username` というフォルダが作成されます。保存場所やファイル名をカスタマイズするには `–dirname-pattern` や `–filename-pattern` オプションを使用します。
ログインして利用する 🔑
Instaloaderの一部の機能(非公開プロフィールのダウンロード、ストーリー、フィード、保存済み投稿、ハッシュタグ検索など)を利用するには、Instagramアカウントでログインする必要があります。
ログインの必要性
Instagramは、多くの情報へのアクセスにログインを要求します。ログインせずに公開プロフィールをダウンロードすることは可能ですが、以下のような場合にログインが必要となります。
- 非公開プロフィールの投稿
- ストーリー(自分やフォローしている人のもの)
- ハイライト
- 自分のフィード (`:feed`)
- 自分が保存した投稿 (`:saved`)
- ハッシュタグ検索 (`#hashtag`)
- ロケーション検索 (`%location_id`)
- ジオタグ (`–geotags`) の取得
- コメント (`–comments`) の取得(推奨)
また、ログインすることで、ダウンロード速度に関する制限が緩和される場合があります。ただし、短時間に大量のリクエストを行うと、一時的にアカウントが制限されたり、最悪の場合BANされたりするリスクもあるため注意が必要です。
ログイン方法
コマンドラインでログインするには、`–login` オプションを使用します。
instaloader --login=あなたのユーザー名 ターゲット
このコマンドを実行すると、パスワードの入力を求められます。
Enter password:
パスワードを入力すると、Instaloaderはログインセッションを開始します。
セッションファイルの利用
毎回パスワードを入力するのは手間ですし、セキュリティ上の懸念もあります。Instaloaderは、ログイン情報をセッションファイルとして保存し、再利用する機能を提供しています。
初めて `–login` オプションを使用してログインに成功すると、セッション情報を含むファイルが一時ディレクトリに自動的に保存されます(ファイル名は通常 `session-あなたのユーザー名` のようになります)。次回以降、同じユーザーでログインが必要なコマンドを実行する際、Instaloaderはこのセッションファイルを自動的に検出し、パスワードの再入力を省略します。
セッションファイルの場所を明示的に指定したい場合は `–sessionfile` オプションを使用します。
instaloader --login=あなたのユーザー名 --sessionfile=/path/to/my_session_file ターゲット
セッションファイルを安全な場所に保管し、適切に管理することが重要です。
FirefoxブラウザでInstagramにログインしている場合、そのセッション情報をインポートすることも可能です。Instaloaderのドキュメントには、このためのヘルパースクリプト (`615_import_firefox_session.py`) が提供されている場合があります。
ストーリーやプライベートコンテンツのダウンロード
ログインが成功すれば、プライベートな情報にもアクセスできます。例えば、フォローしている人のストーリーをすべてダウンロードするには:
instaloader --login=あなたのユーザー名 :stories
特定の非公開ユーザー(フォローしている必要があります)の投稿をダウンロードするには:
instaloader --login=あなたのユーザー名 非公開ユーザー名
高度な使い方:フィルタリングとオプション ⚙️
Instaloaderは、ダウンロードするコンテンツを細かく制御するための多くのオプションとフィルタリング機能を提供しています。
日付によるフィルタリング
特定の期間の投稿のみをダウンロードしたい場合、`–post-filter` オプションとPythonの `datetime` オブジェクトを組み合わせて使用できます。
例:2024年1月1日以降の投稿のみをダウンロード:
instaloader --post-filter="date_utc >= datetime(2024, 1, 1)" ターゲット
例:2023年の投稿のみをダウンロード:
instaloader --post-filter="datetime(2023, 1, 1) <= date_utc < datetime(2024, 1, 1)" ターゲット
ストーリーアイテムに対しても同様に `–storyitem-filter` が使えます。
投稿タイプによるフィルタリング
動画のみ、または写真のみをダウンロードすることも可能です。`Post` オブジェクトの `is_video` 属性を利用します。
例:動画のみをダウンロード:
instaloader --post-filter="is_video" ターゲット
例:写真のみをダウンロード:
instaloader --post-filter="not is_video" ターゲット
いいね数やコメント数によるフィルタリング
特定のエンゲージメント数を持つ投稿だけをフィルタリングすることもできます。
例:いいね数が1000以上の投稿のみ:
instaloader --post-filter="likes >= 1000" ターゲット
例:コメント数が50未満の投稿のみ:
instaloader --post-filter="comments < 50" ターゲット
メタデータの取得
Instaloaderはデフォルトで画像や動画ファイルをダウンロードしますが、関連するメタデータ(キャプション、コメント、ジオタグなど)も取得できます。
- キャプション: 各投稿ごとに `.txt` ファイルとして自動的に保存されます。
- コメント: `–comments` オプションを追加すると、コメントが `.json.xz` ファイルに保存されます。
- ジオタグ: `–geotags` オプションを追加すると、位置情報が `.txt` ファイルにGoogle マップのリンクとして保存されます(要ログイン)。
instaloader --comments --geotags --login=あなたのユーザー名 ターゲット
その他の便利なオプション
Instaloaderには他にも多くの便利なコマンドラインオプションがあります。以下に一部を紹介します。
オプション | 説明 | バージョン |
---|---|---|
--fast-update | 既にダウンロード済みのファイルが見つかった時点で、そのターゲットのダウンロードを中断します。差分更新を高速化します。 | – |
--latest-stamps | 指定したスタンプファイルに基づき、それ以降の新しい投稿のみをダウンロードします。差分更新に便利です。 | 4.1+ |
--profile-pic-only | 投稿をダウンロードせず、プロフィール写真のみをダウンロードします。 | – |
--stories | ユーザーのストーリーをダウンロードします。(要ログイン) | – |
--highlights | ユーザーのハイライトをダウンロードします。(要ログイン) | – |
--tagged | ユーザーがタグ付けされた投稿をダウンロードします。 | – |
--reels | ユーザーのリール動画をダウンロードします。 | 4.14+ |
--igtv | ユーザーのIGTV動画をダウンロードします。 | 4.3+ |
--dirname-pattern={パターン} | ダウンロード先のディレクトリ名を指定するパターン。例: {profile}/{date_utc:%Y-%m} | – |
--filename-pattern={パターン} | ダウンロードするファイル名を指定するパターン。例: {date_utc:%Y%m%d}_{shortcode} | – |
--no-metadata-json | メタデータを含む .json.xz ファイルの保存を無効にします。 | – |
--no-videos | 動画ファイルをダウンロードしません。 | – |
--no-pictures | 画像ファイルをダウンロードしません。 | – |
--login=ユーザー名 | 指定したユーザー名でログインします。 | – |
--sessionfile=ファイルパス | 使用するセッションファイルのパスを指定します。 | – |
--max-connection-attempts=N | 接続試行の最大回数を設定します(デフォルト: 3)。ネットワークが不安定な場合に役立ちます。 | – |
+args.txt | テキストファイルからターゲットとオプションを読み込みます。 | 4.1+ |
全オプションとその詳細は `instaloader –help` コマンドで確認できます。
Pythonライブラリとしての利用 🐍
Instaloaderはコマンドラインツールとしてだけでなく、強力なPythonライブラリとしても利用できます。これにより、より複雑な処理や他のプログラムとの連携が可能になります。
基本的なコード例
まず、Instaloaderライブラリをインポートし、インスタンスを作成します。
import instaloader
import datetime
# Instaloaderインスタンスを作成
L = instaloader.Instaloader()
# オプション: ログインする場合 (非公開プロフィールやストーリーなどにアクセスする場合)
# L.login("あなたのユーザー名", "あなたのパスワード")
# またはセッションファイルを利用する場合
# L.load_session_from_file("あなたのユーザー名", "/path/to/sessionfile")
# 特定のプロフィールの投稿をダウンロード
profile_name = "instagram"
L.download_profile(profile_name, profile_pic_only=False)
print(f"{profile_name} のダウンロードが完了しました。")
# 特定のハッシュタグの投稿をダウンロード (要ログイン)
# hashtag_name = "猫"
# L.download_hashtag(hashtag_name, max_count=50) # 例: 最新50件
# 特定の投稿をダウンロード
# post_shortcode = "Cabcdefghij"
# post = instaloader.Post.from_shortcode(L.context, post_shortcode)
# L.download_post(post, target=f"post_{post_shortcode}")
このコードは、`instagram` というユーザーのプロフィール情報をダウンロードします。ログインが必要な場合は、`L.login()` または `L.load_session_from_file()` のコメントアウトを解除して適切に設定してください。
イテレータの使用
特定のプロフィールの全投稿を一度にダウンロードするのではなく、投稿を一つずつ処理したい場合があります。Instaloaderはイテレータを提供しており、これを利用して投稿を順番に取得できます。
import instaloader
L = instaloader.Instaloader()
# 必要に応じてログイン
# L.login("ユーザー名", "パスワード")
profile_name = "instagram"
profile = instaloader.Profile.from_username(L.context, profile_name)
# プロフィールの投稿をイテレート
posts_iterator = profile.get_posts()
count = 0
max_posts_to_process = 10 # 例:最初の10件だけ処理
for post in posts_iterator:
if count >= max_posts_to_process:
break
print(f"投稿 Shortcode: {post.shortcode}")
print(f"投稿日時 (UTC): {post.date_utc}")
print(f"いいね数: {post.likes}")
print(f"コメント数: {post.comments}")
print("-" * 20)
# 必要であれば個別にダウンロード
# L.download_post(post, target=f"{profile_name}_{post.shortcode}")
count += 1
print(f"{count} 件の投稿情報を処理しました。")
この例では、`instagram` プロフィールの投稿をイテレータで取得し、最初の10件の投稿情報(Shortcode, 日時, いいね数, コメント数)を表示しています。`profile.get_posts()` は投稿のジェネレータを返します。同様に、`profile.get_followers()` や `profile.get_followees()` でフォロワーやフォロー中のリストをイテレートできます。
高度な操作
Pythonライブラリを使用すると、コマンドラインよりもさらに細かい制御が可能です。
- ストーリーの取得: `L.get_stories()` や `profile.get_stories()` を使用してストーリーを取得・処理できます。
- メタデータの詳細アクセス: `Post` オブジェクトや `Profile` オブジェクトから、より詳細なメタデータ(動画URL、キャプションのメンション、ハッシュタグなど)にアクセスできます。
- カスタムフィルタリング: Pythonの条件式を使って、ダウンロードする投稿や情報を柔軟にフィルタリングできます。
- エラーハンドリング: `try-except` ブロックを使用して、ダウンロード中のエラー(ネットワークエラー、非公開コンテンツへのアクセス失敗など)を適切に処理できます。
- レート制御: `Instaloader` インスタンスの `rate_controller` をカスタマイズして、リクエスト間の遅延を調整し、Instagramからのレート制限を回避できます。
import instaloader
import time
L = instaloader.Instaloader()
# レート制御を設定 (リクエスト間に1秒の遅延)
# L.context.rate_controller = instaloader.RateController(delay=1.0)
# ログイン
try:
L.load_session_from_file("あなたのユーザー名")
except FileNotFoundError:
print("セッションファイルが見つかりません。ログインします...")
L.login("あなたのユーザー名", "あなたのパスワード")
L.save_session_to_file()
# フォロワーのリストを取得
profile = instaloader.Profile.from_username(L.context, "ターゲットユーザー名")
followers = []
try:
for follower in profile.get_followers():
followers.append(follower.username)
# 短い遅延を追加して制限を避ける (オプション)
time.sleep(0.1)
except instaloader.exceptions.QueryReturnedNotFoundException:
print("プロファイルが見つからないか、非公開です。")
except Exception as e:
print(f"エラーが発生しました: {e}")
print(f"フォロワー数: {len(followers)}")
# print(followers) # フォロワーリスト表示
Pythonライブラリを活用することで、Instaloaderの機能を最大限に引き出し、特定のニーズに合わせたデータ収集や処理を実現できます。公式ドキュメントにはさらに多くの例や詳細なAPIリファレンスが記載されています。
倫理的な考慮事項と注意点 ⚠️
Instaloaderは非常に強力なツールですが、その使用には倫理的な配慮と法的な注意が必要です。以下の点を必ず守り、責任ある利用を心がけてください。
著作権と利用規約
- 著作権の尊重: Instagramに投稿された写真や動画の著作権は、投稿者本人に帰属します。Instaloaderでダウンロードしたコンテンツを、著作権者の許可なく再配布、公開、販売、改変することは、著作権侵害にあたる可能性があります。個人的なバックアップや、著作権法で認められた範囲(私的利用など)での利用に留めてください。
- Instagramの利用規約: Instagramの利用規約では、自動化された手段(ボット、スクレイピングツールなど)を用いてプラットフォームからデータを収集することを制限または禁止している場合があります。Instaloaderの使用が利用規約に違反すると判断された場合、アカウントの一時的または永久的な停止措置を受けるリスクがあります。特に短時間に大量のリクエストを行う行為は避けるべきです。
プライバシーへの配慮
- 非公開情報の扱い: Instaloaderでログインすれば、自分がフォローしている非公開アカウントの投稿やストーリーもダウンロードできます。しかし、これらの情報は公開を意図されていないプライベートなものです。ダウンロードした非公開情報を本人の許可なく第三者と共有したり、公開したりすることは絶対に避けてください。
- 個人情報の保護: 投稿に含まれるコメントやタグ、位置情報などには個人情報が含まれる可能性があります。これらの情報を収集・利用する際は、GDPR(EU一般データ保護規則)やCCPA(カリフォルニア州消費者プライバシー法)などの関連法規、および個人のプライバシー権を十分に尊重してください。研究目的などで利用する場合も、データの匿名化などの適切な処置が必要です。
ツールの責任ある利用
- 過負荷の回避: InstaloaderはInstagramのサーバーにリクエストを送信してデータを取得します。短時間に大量のリクエストを送信すると、Instagramのサーバーに過度な負荷をかける可能性があります。レート制御機能(リクエスト間の遅延設定など)を利用し、サーバーに負荷をかけすぎないよう配慮してください。
- 悪用しない: Instaloaderをスパム行為、嫌がらせ、他人のなりすまし、その他の不正な目的で使用しないでください。
- 自己責任: Instaloaderの使用によって生じたいかなる結果(アカウント停止、法的問題など)についても、開発者およびツールの提供者は責任を負いません。利用はすべて自己責任で行ってください。
技術的なツールを利用する際は、その利便性だけでなく、潜在的なリスクや社会的な影響も考慮することが重要です。常に倫理観を持ち、法令を遵守して利用するようにしましょう。
まとめ ✨
Instaloaderは、Instagramから様々なコンテンツやメタデータを効率的にダウンロードするための強力なツールです。コマンドラインからの簡単な操作だけでなく、Pythonライブラリとして利用することで、より柔軟で高度なデータ収集や処理が可能になります。
プロフィールの投稿一括ダウンロードから、ストーリー、ハッシュタグ、コメント、メタデータの取得、さらには日付や投稿タイプによるフィルタリングまで、幅広い機能を備えています。
しかし、その強力さゆえに、利用にあたってはInstagramの利用規約、著作権、プライバシーへの配慮が不可欠です。常に倫理的な観点を持ち、責任ある利用を心がけることが重要です。
このツールを正しく理解し活用することで、Instagramのデータ分析、コンテンツのバックアップ、情報収集などがより効率的に行えるようになるでしょう。 😊
コメント