「Instagramの投稿をスクレイピングしたい」
「インスタの投稿を保存・ダウンロードしたい」
「Pythonでインスタのデータを集めたい」
このような場合には、Instaloaderをオススメします。
この記事では、Instaloaderについて解説しています。
本記事の内容
- Instaloaderとは?
- Instaloaderのシステム要件
- Instaloaderのインストール
- Instaloaderの動作確認
それでは、上記に沿って解説していきます。
Instaloaderとは?
Instaloaderとは、Instagramからユーザーの投稿を取得するツールです。
無料で使えるオープンソースのPythonライブラリとなります。
ユーザーは、自分・第三者に関わらず指定できます。
そして、取得できる情報は以下のモノがあります。
- プロフィール
- ハッシュタグ
- ユーザーストーリー
- フィード
- メディア(写真・動画)
また、投稿毎における次の情報も対象にできます。
- コメント
- ジオタグ
- キャプション
Instaloaderの利用方法には、次の2つが用意されています。
- コマンドラインツール
- Python API(モジュール)
一般的には、コマンドラインツールでの利用となるでしょう。
複雑なことがしたい場合は、Python APIの利用になります。
Instaloaderを使えば、スクレイピングをする必要もなくなるかもしれません。
また、Instaloaderは自動ログインにも対応しています。
しかし、自動で「いいね」まではInstaloaderではできません。
あくまで、Instaloaderはインスタからの情報収集で用いることになります。
以上、Instaloaderについて説明しました。
次は、Instaloaderのシステム要件を確認します。
Instaloaderのシステム要件
現時点(2022年3月)でのInstaloaderの最新バージョンは、4.8.4となります。
この最新バージョンは、2022年1月16日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
以下は、Python公式開発サイクルです。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python公式開発サイクルを基準にすると、Python 3.10には対応しておいて欲しいです。
そして、Python 3.6はサポート対象外でも構いません。
ただ、Python 3.10の方は安心してください。
Python 3.10でも問題なく動きます。
Instaloaderのシステム要件をまとめると、特に注意すべき点はありません。
利用する側からすると、Python 3.7以降であれば問題ないでしょう。
以上、Instaloaderのシステム要件について説明しました。
次は、Instaloaderをインストールしていきます。
Instaloaderのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.0.4 setuptools 60.10.0 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Instaloaderのインストールです。
Instaloaderのインストールは、以下のコマンドとなります。
pip install instaloader
Instaloaderのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ------------------ --------- certifi 2021.10.8 charset-normalizer 2.0.12 idna 3.3 instaloader 4.8.4 pip 22.0.4 requests 2.27.1 setuptools 60.10.0 urllib3 1.26.9 wheel 0.36.2
見たことのあるパッケージが、数個インストールされています。
これだけであれば、依存関係でのトラブルは発生しないでしょう。
それでも心配だという人は、Python仮想環境を利用しましょう。
以上、Instaloaderのインストールを説明しました。
次は、Instaloaderの動作確認を行います。
Instaloaderの動作確認
Instaloaderのインストールが成功したら、次のコマンドが利用可能です。
instaloader --version
上記コマンドを実行すると、インストールしたInstaloaderのバージョンを確認できます。
$ instaloader --version 4.8.4
あとは、ヘルプも確認しておきます。
$ instaloader --help usage: instaloader [--comments] [--geotags] [--stories] [--highlights] [--tagged] [--igtv] [--login YOUR-USERNAME] [--fast-update] profile | "#hashtag" | %location_id | :stories | :feed | :saved instaloader --help Download pictures (or videos) along with their captions and other metadata from Instagram. What to Download: Specify a list of targets. For each of these, Instaloader creates a folder and downloads all posts. The following targets are supported: 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. What to Download of each Post: --slide SLIDE Set what image/interval of a sidecar you want to download. --no-pictures Do not download post pictures. Cannot be used together with --fast-update. Implies --no-video-thumbnails, does not imply --no-videos. -V, --no-videos Do not download videos. --no-video-thumbnails Do not download thumbnails of videos. -G, --geotags Download geotags when available. Geotags are stored as a text file with the location's name and a Google Maps link. This requires an additional request to the Instagram server for each picture. Requires --login. -C, --comments Download and update comments for each post. This requires an additional request to the Instagram server for each post, which is why it is disabled by default. --no-captions Do not create txt files. --post-metadata-txt POST_METADATA_TXT Template to write in txt file for each Post. --storyitem-metadata-txt STORYITEM_METADATA_TXT Template to write in txt file for each StoryItem. --no-metadata-json Do not create a JSON file containing the metadata of each post. --no-compress-json Do not xz compress JSON files, rather create pretty formatted JSONs. What to Download of each Profile: --no-posts Do not download regular posts. --no-profile-pic Do not download profile picture. -s, --stories Also download stories of each profile that is downloaded. Requires --login. --highlights Also download highlights of each profile that is downloaded. Requires --login. --tagged Also download posts where each profile is tagged. --igtv Also download IGTV videos. Which Posts to Download: -F, --fast-update For each target, stop when encountering the first already-downloaded picture. This flag is recommended when you use Instaloader to update your personal Instagram archive. --latest-stamps [STAMPSFILE] Store the timestamps of latest media scraped for each profile. This allows updating your personal Instagram archive even if you delete the destination directories. If STAMPSFILE is not provided, defaults to /home/gansuke/.config/instaloader/latest-stamps.ini --post-filter filter, --only-if filter Expression that, if given, must evaluate to True for each post to be downloaded. Must be a syntactically valid python expression. Variables are evaluated to instaloader.Post attributes. Example: --post-filter=viewer_has_liked. --storyitem-filter filter Expression that, if given, must evaluate to True for each storyitem to be downloaded. Must be a syntactically valid python expression. Variables are evaluated to instaloader.StoryItem attributes. -c COUNT, --count COUNT Do not attempt to download more than COUNT posts. Applies to #hashtag, %location_id, :feed, and :saved. Login (Download Private Profiles): Instaloader can login to Instagram. This allows downloading private profiles. To login, pass the --login option. Your session cookie (not your password!) will be saved to a local file to be reused next time you want Instaloader to login. -l YOUR-USERNAME, --login YOUR-USERNAME Login name (profile name) for your Instagram account. -f SESSIONFILE, --sessionfile SESSIONFILE Path for loading and storing session key file. Defaults to /home/gansuke/.config/instaloader/session-<login_name> -p YOUR-PASSWORD, --password YOUR-PASSWORD Password for your Instagram account. Without this option, you'll be prompted for your password interactively if there is not yet a valid session file. How to Download: --dirname-pattern DIRNAME_PATTERN Name of directory where to store posts. {profile} is replaced by the profile name, {target} is replaced by the target you specified, i.e. either :feed, #hashtag or the profile name. Defaults to '{target}'. --filename-pattern FILENAME_PATTERN Prefix of filenames for posts and stories, relative to the directory given with --dirname-pattern. {profile} is replaced by the profile name,{target} is replaced by the target you specified, i.e. either :feed#hashtag or the profile name. Defaults to '{date_utc}_UTC' --title-pattern TITLE_PATTERN Prefix of filenames for profile pics, hashtag profile pics, and highlight covers. Defaults to '{date_utc}_UTC_{typename}' if --dirname-pattern contains '{target}' or '{dirname}', or if --dirname-pattern is not specified. Otherwise defaults to '{target}_{date_utc}_UTC_{typename}'. --resume-prefix PREFIX Prefix for filenames that are used to save the information to resume an interrupted download. --no-resume Do not resume a previously-aborted download iteration, and do not save such information when interrupted. --user-agent USER_AGENT User Agent to use for HTTP requests. Defaults to 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'. --max-connection-attempts N Maximum number of connection attempts until a request is aborted. Defaults to 3. If a connection fails, it can be manually skipped by hitting CTRL+C. Set this to 0 to retry infinitely. --request-timeout N Seconds to wait before timing out a connection request. Defaults to 300. --abort-on STATUS_CODES Comma-separated list of HTTP status codes that cause Instaloader to abort, bypassing all retry logic. --no-iphone Do not attempt to download iPhone version of images and videos. Miscellaneous Options: -q, --quiet Disable user interaction, i.e. do not print messages (except errors) and fail if login credentials are needed but not given. This makes Instaloader suitable as a cron job. -h, --help Show this help message and exit. --version Show version number and exit. The complete documentation can be found at https://instaloader.github.io/.
ヘルプを見ると、多くのことができそうです。
以上、Instaloaderの動作確認を説明しました。
追記 2022年3月21日
以下の記事では、Instaloaderを使って投稿を取得する方法を解説しています。