Tony Wang4 分で読めますInstagramをスクレイピングする方法(2026年版・API & Python)
2026年にInstagramをスクレイピングする3つの方法 — Pythonによる自作、ノーコードツール、または公開プロフィール・投稿・リールを扱う構造化APIと、法律面の基礎知識を解説します。
2026年にInstagramを最も手早くスクレイピングする方法は、正規化されたJSONを返す構造化されたInstagram APIを呼び出すことです。公開プロフィール、投稿、リールを取得でき、Instagramのログインや anti-bot 防御を突破するヘッドレスブラウザを操作する必要がありません。自作も可能ですが、Instagramは厳重にゲートで守られ、積極的に防御されているうえ、個人データはプライバシー上の懸念を伴います。このガイドでは3つのアプローチすべてを取り上げ、それぞれが何を返すのか、どこで行き詰まるのか、そして法律面の基礎を解説します。
Instagramのスクレイピングは合法ですか?
慎重に進めてください。公開されているInstagramデータ(公開プロフィール、公開投稿)のスクレイピングは、ゲートで守られたデータよりもリスクは低く、hiQ v. LinkedIn の判例では公開データへのアクセスはCFAA違反にあたらないとされました。ただし、Instagramの規約は自動アクセスを禁止しており、その価値の多くはGDPR/CCPAの対象となる個人データであり、ログインの内側にあるものはすべて対象外です。目安としては、公開されている非個人データのみを扱う、ログインを決して突破しない、適法な根拠なく個人データを収集しない、そしてInstagramの規約を確認する、という点です。詳しくはウェブスクレイピングは合法かを参照してください。これは法的助言ではありません。
選択肢1:Pythonで自作する(そしてなぜ行き詰まるのか)
公開プロフィールについては、Instagramはログインなしでプロフィールと最新の約12件の投稿を返すウェブエンドポイントを公開しています。それ以外のものはすべて、ログイン済みのヘッドレスブラウザが必要になります。
import requests
resp = requests.get(
"https://www.instagram.com/api/v1/users/web_profile_info/",
params={"username": "example"},
headers={"User-Agent": "Mozilla/5.0", "X-IG-App-ID": "936619743392459"}, # required, undocumented
)
user = resp.json()["data"]["user"]
print(user["full_name"], user["edge_followed_by"]["count"])
デモでは動作しますが、その後すぐに行き詰まります。
- 厳しいレート制限 — このエンドポイントはIPごとに1時間あたり約200リクエストで頭打ちになり、データセンターのIPは即座にBANされるため、スティッキーセッションを備えた多数のローテーティング residential IP が必要になります。
- プロフィールの先にあるログインの壁 — 投稿履歴全体、コメント、ストーリー、フォロワーには認証が必要で、これは規約とプライバシーの一線を越えます。
- TLSとヘッダーのフィンガープリンティング — Pythonクライアントには検知可能なTLSシグネチャがあり、必須の
X-IG-App-IDやヘッダーは変化するため、リクエストがフラグを立てられます。 - Graph APIは役に立ちません — MetaのInstagram Graph APIは自分自身のBusiness/Creatorアカウントのみを提供し、任意の公開ユーザーには対応していません。
選択肢2:ノーコードツール
ビジュアルな抽出ツールやブラウザ拡張機能はCSV/JSONをエクスポートできます。一度きりの公開データ取得には向いていますが、予測可能なフィールドを扱う製品内のパイプラインにはあまり向きません。
選択肢3:構造化されたInstagram API
公開データを対象とする繰り返し可能なワークフローには、Instagramスクレイピング APIが、実行するブラウザなしで正規化されたJSONを返します。公開プロフィールを取得するには次のようにします。
curl https://api.crawlora.net/api/v1/instagram/profile/USERNAME \
-H "x-api-key: $CRAWLORA_API_KEY"
同じ呼び出しをPythonで行う場合は次のとおりです。
import requests
profile = requests.get(
"https://api.crawlora.net/api/v1/instagram/profile/USERNAME",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(profile.get("username"), profile.get("followers"))
レスポンスは正規化されたJSONです(フィールドはあくまで例です。ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"username": "example",
"full_name": "Example Brand",
"followers": 184000,
"posts_count": 420,
"is_verified": true
}
}
投稿とリールは @handle ではなく、ユーザーの数値ID(プロフィールから取得)で指定するため、まずプロフィールを取得します。
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/instagram"
profile = requests.get(f"{base}/profile/example", headers=h).json()["data"]
uid = profile["id"]
reels = requests.get(f"{base}/reels/{uid}", headers=h, params={"max_id": ""}).json()["data"]
post = requests.get(f"{base}/post/{uid}/POST_ID", headers=h).json()["data"]
リールは max_id でページ送りします。公開されている非個人フィールドにとどめてください。
収集できるもの
公開プロフィールで公開されている範囲で、ユーザー名、表示名、フォロワー数・投稿数、認証バッジ、公開投稿・リールのメタデータ、エンゲージメント数、そしてリクエストしたユーザー名またはIDを収集できます。公開されている非個人フィールドにとどめてください。
制約とよくある課題
- 価値の大半はゲートで守られています。 公開プロフィールとその最新投稿には到達できますが、投稿履歴全体、コメント、ストーリー、フォロワーはログインの内側にあり、規約とプライバシーの一線を越えなければ対象外です。
- Graph APIは役に立ちません。 MetaのInstagram Graph APIは自分自身のBusiness/Creatorアカウントのみを提供し、任意の公開ユーザーには対応していません。
- 厳しいレート制限。 Instagramは認証なしのリクエストを制限し(IPごとに約200/時間)、データセンターのIPを即座にBANするため、自作では多数のローテーティング residential IP が必要になります。構造化APIは、それを1つのキーの背後で処理します。
- ユーザーIDへの一手間。 投稿とリールは
@handleではなく、プロフィールから得られる数値のユーザーIDで指定します。 - アイデンティティは個人データです。 ユーザー名、氏名、投稿内容はGDPR/CCPAのもとで個人データにあたります。適法な根拠のもと、公開されている非個人フィールドのみを収集してください。
どこで使われるか
- ブランドモニタリング — 公開されているブランドと競合の存在感を追跡します。ブランドモニタリングのユースケースを参照してください。
- クリエイターリサーチ — 公開クリエイタープロフィールとリーチを評価します。
- トレンドリサーチ — TikTokやYouTubeのシグナルと組み合わせます。
出典
収集を始める
まずは無料でお試しください: 任意の公開URLを無料ウェブスクレイパーにかけるか、Anti-Botチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
プレイグラウンドでプロフィールエンドポイントを試し、APIドキュメントでスキーマを確認し、料金をご覧ください。ソーシャルスタックの残りについては、TikTokをスクレイピングする方法、YouTubeをスクレイピングする方法、LinkedInをスクレイピングする方法、Twitter/Xをスクレイピングする方法も、ウェブスクレイピングAPIの選び方やウェブスクレイピングは合法かもあわせて参照してください。
よくある質問
ブロックされずにInstagramをスクレイピングできますか?
構造化APIを使えば、対応する公開データについては、プロキシのルーティングとブラウザの実行がエンドポイントの背後で処理されます。自作は困難です。Instagramは認証なしのリクエストを制限し(IPごとに約200/時間)、データセンターのIPを即座にBANし、TLSとヘッダーをフィンガープリンティングするため、多数のローテーティング residential IP が必要になります。
Instagram Graph APIは公開データに使えますか?
いいえ。MetaのInstagram Graph APIは自分自身のBusinessまたはCreatorアカウントのみを提供し、任意の公開ユーザーには対応していません。だからこそ、公開されたプロフィール・投稿・リールのデータを収集するにはスクレイピングが必要になります。
非公開データや個人データをスクレイピングできますか?
いいえ。Crawloraのエンドポイントは公開データ専用です。投稿履歴全体、コメント、ストーリー、フォロワーはログインの内側にあります。ユーザー名、氏名、投稿内容はGDPR/CCPAのもとで個人データとして扱い、適法な根拠なく収集しないでください。
ユーザーの投稿とリールはどうやって取得しますか?
まずユーザー名でプロフィールを取得して数値のユーザーIDを得てから、そのIDでリールと投稿のエンドポイントを呼び出します(投稿とリールは @handle ではなくユーザーIDで指定します)。リールは max_id でページ送りします。
これは公式のInstagram APIですか?
いいえ。これは公開されたInstagramデータを抽出するもので、Metaの公式APIとは独立しています。
どのくらいの頻度で更新できますか?
プランと責任ある利用の範囲内で、スケジュールされたスナップショットを実行してください。