Statista によると、 Instagram は世界最大のソーシャル メディア ネットワークの 1 つで、2021 年の時点でユーザー数は約 12 億 1,000 万人で、インターネットの約 28% を占めています。
この記事は、Python を使用してプログラムでプロフィールから Instagram データをダウンロードする 2 つの方法についてのガイドです。 1 つ目の方法は、Instaloader を使用してメディアをダウンロードする方法です。 2 つ目は、プロファイルに関する JSON データを取得するための簡単な Python スクリプトを作成することです。
データのスクレイピングは Instagram の利用規約に違反する可能性があることに注意することが重要であり、自分のアカウントからのみデータをダウンロードすることをお勧めします。
インスタローダーの使用
Instaloader は、 Instagram メディアをダウンロードするための Python パッケージです。非常に使いやすく、データの抽出とダウンロードが迅速かつ簡単に行えます。 Instaloader の使用を開始するには、まず pip を使用してインストールします。
pip install instaloader
インストールすると、コマンド ライン インターフェイスから、または Python スクリプトのパッケージとして使用できます。
コマンドラインから使用するには、
instaloader
コマンドを使用します。たとえば、ヘルプ情報を表示するには、ターミナルに次のコマンドを入力します。
instaloader --help
ユーザーのプロフィール写真をダウンロードするには、
--profile
タグの後にユーザー名を指定してコマンドを入力します。そのようです:
instaloader --profile <USERNAME OF THE PROFILE>
ただし、このコマンドが機能するには、まずログインする必要があります。これを行うには、次のようにログイン オプションを渡します。
instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>
ダウンロードするもの
Instaloader を使用すると、さまざまなメディアをダウンロードできます。マニュアル ページのこの抜粋には、ダウンロードできるさまざまなものがすべて示されています。
profile Download profile. If an already-downloaded profile has been renamed, Instaloader automatically finds it by its unique
ID and renames the folder likewise.
@profile Download all followees of profile. Requires --login. Consider using :feed rather than @yourself.
"#hashtag" Download #hashtag.
%location_id Download %location_id. Requires --login.
:feed Download pictures from your feed. Requires --login.
:stories Download the stories of your followees. Requires --login.
:saved Download the posts that you marked as saved. Requires --login.
-- -shortcode Download the post with the given shortcode
filename.json[.xz] Re-Download the given object.
+args.txt Read targets (and options) from given textfile.
特定のユーザーの投稿をダウンロードするには、次のコマンドを入力します。
instaloader --login <YOUR USERNAME> <TARGET USERNAME>
この場合、ユーザー名は認証された Instagram アカウントのユーザー名です。ターゲット ユーザー名は、ダウンロードする投稿のプロファイルです。
プロフィールのフォロワーからの投稿をダウンロードするには、次のコマンドを入力します。
instaloader --login <YOUR USERNAME> @<TARGET USERNAME>
このコマンドと前のコマンドの違いは、ターゲット ユーザー名の前に
@
があることに注意してください。
Instaloader コマンド ライン インターフェイスを使用する代わりに、Instaloader コマンド ライン インターフェイスを Python パッケージとして使用することもできます。パッケージについては、 ここで 詳しく説明されています。
Instaloader を使用すると、さまざまなメディア ファイルをダウンロードできます。ただし、ユーザーのプロフィールページなどのメタデータを抽出したい場合は、Instaloader だけでは十分ではありません。次の方法では、ユーザー プロファイルのデータを抽出する Python スクリプトを作成します。
Instagram データをダウンロードするための Python スクリプトの作成
概要
この方法では、Python で Instagram データをダウンロードする簡単なスクリプトを作成します。この方法は、パブリック プロフィールからデータを抽出するために、比較的知られていない Instagram JSON API の使用に依存しています。
この API の仕組みは、プロフィール URL の末尾にクエリ
__a=1&__d=1
を追加すると、Instagram がプロフィールに関する JSON データで応答します。
たとえば、私のユーザー名は 0xanesu です。その結果、
https://instagram.com/instagram/?__a=1&__d=1
にリクエストを送信すると、応答としてプロフィールに関する JSON データが返されます。
スクリプトを書く
Python でリクエストを行うには、Python リクエスト モジュールを使用します。ただし、pycURL、urllib、または HTTP リクエストの作成に使用したいその他のクライアント ライブラリを使用することもできます。まず、
pip
を使用して
requests
モジュールをインストールします。
pip install requests
これがインストールされたら、スクリプトを記述するファイルを開いて、request モジュールから get 関数をインポートします。さらに、ロード関数も
json
からインポートします。これは、JSON 応答を解析するために使用されます。
from requests import get
from json import loads
データをインポートしたら、Instagram プロフィールへの URL を保存する変数を作成します。
url = 'https://instagram.com/<YOUR USERNAME HERE>'
前述したように、プロフィールから Instagram データを抽出するには、
__a=1
および
__d=1
クエリ パラメーターを追加する必要があります。これらを定義するには、パラメーターを使用して辞書オブジェクトを作成します。
params = { '__a': 1, '__d': 1 }
Instagram が行うリクエストを承認するには、セッション ID が必要です。セッション ID を取得する方法については後ほど説明します。ここでは、後で置き換えるプレースホルダー値を入力するだけです。
cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }
次に、リクエストが成功したときに実行される関数を定義します。
def on_success(response):
profile_data_json = response.text
parsed_data = loads(profile_data_json)
print('User fullname:', parsed_data['graphql']['user']['full_name'])
print('User bio:', parsed_data['graphql']['user']['biography'])
私が定義した関数は、応答オブジェクトを受け取り、応答本文から JSON を抽出し、JSON を解析してオブジェクトにします。この後は、プロフィールのフルネームと経歴のみを抽出します。
次に、エラーが発生した場合に実行する関数を定義します。
def on_error(response):
# Printing the error if something went wrong
print('Something went wrong')
print('Error Code:', response.status_code)
print('Reason:', response.reason)
次に、get 関数を呼び出してリクエストを作成し、URL、params、Cookie を引数として渡します。
response = get(url, params, cookies=cookies)
最後に、エラーのステータス コードを確認します。ステータスが 200 の場合、
on_success
関数を呼び出します。それ以外の場合は、
on_error
関数を呼び出すだけです。
if response.status_code == 200:
on_success(response)
else:
on_error(response)
この時点で、コードの作成は完了です。残っているのは、
sessionid
取得することです。セッション ID を取得するには、Google Chrome を開き、Web で Instagram を開きます。ログインしていることを確認し、
Ctrl + Shift + I
または
Cmd +Shift + I
を使用して開発ツールを開きます。

開発ツールを開いた状態で、「アプリケーション」タブを開きます。

次に、「Cookie」サブメニューをクリックして、Instagram で使用されている Cookie を表示します。

その後、[Dev Tools] パネルに表示される Cookie のリストから
sessionid
Cookie の値をコピーします。
セッション ID をコピーしたら、それをスクリプトに貼り付けてスクリプトを実行します。私の場合、ユーザー名として Instagram を使用すると (https://instgram.com/instagram?__a=1&__d=1)、これが出力です。

まさにそのようにして、プロファイル データを動的にダウンロードすることができます。 JSON API から返されるデータはさらに多くあります。すべてを印刷すると、次の出力が得られます。

これが、Instagram プロフィールからデータと投稿を抽出する方法です。
最後の言葉
この記事では、Instaloader を使用して投稿とメディアをダウンロードする方法を説明しました。次に、メディア コンテンツ以外の多くの情報を含むプロファイル JSON データを抽出するカスタム スクリプトを作成しました。このプロジェクトを気に入っていただけた場合は、コードの時間を計測するための Python Timeit に関する投稿をチェックしてみてください。
Instagram 体験をさらに活用したい場合は、Qoob Stories の投稿: Instagram ダウンローダーの詳細なレビューをご覧ください。