mirror of
https://github.com/instaloader/instaloader.git
synced 2026-10-19 23:22:16 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01fc150e78 | ||
|
|
46ac119a10 | ||
|
|
6b520f6a2d | ||
|
|
c3a5557140 | ||
|
|
0ad50c1526 | ||
|
|
9fbe9b0903 | ||
|
|
4b8b257672 | ||
|
|
b1b90f8abf | ||
|
|
66f69b5c21 | ||
|
|
48d6f0226b | ||
|
|
82ae31cea5 | ||
|
|
3e0b81ad56 | ||
|
|
99620ec766 | ||
|
|
13d288ef36 | ||
|
|
b85e8fd793 | ||
|
|
1699954761 | ||
|
|
7cac6d53f2 | ||
|
|
c355338010 | ||
|
|
2205bbcf45 | ||
|
|
c299e9d1a2 | ||
|
|
151ccfd71d | ||
|
|
bf5e3b90d0 | ||
|
|
56b27fb26f | ||
|
|
8572e527ec | ||
|
|
5068c9453e | ||
|
|
d614d9f015 | ||
|
|
051a6fa9d0 | ||
|
|
169ce1a300 | ||
|
|
ee8e159d56 | ||
|
|
b3f916b371 | ||
|
|
1fdce16f46 | ||
|
|
dd513f7190 | ||
|
|
7198f1ad9f | ||
|
|
58c12d5618 | ||
|
|
1e10ab8669 | ||
|
|
c0eecd1bd2 | ||
|
|
8607135740 | ||
|
|
ca2829becc | ||
|
|
715582138b | ||
|
|
184c521646 | ||
|
|
5ae3d7090f | ||
|
|
4768fdbd10 | ||
|
|
591dfd31e4 | ||
|
|
caf75a8135 | ||
|
|
52492456ed | ||
|
|
e0924e8d08 | ||
|
|
655dbb552d | ||
|
|
fdb8e94c64 | ||
|
|
b3c83f420c | ||
|
|
df00e2b03a | ||
|
|
b60f0b4836 | ||
|
|
35e71192c5 | ||
|
|
2106c2d5f6 | ||
|
|
0e943189e5 | ||
|
|
8e77a1c125 | ||
|
|
361445519a | ||
|
|
6b345e1f52 | ||
|
|
c841bca81b | ||
|
|
3e1360160d | ||
|
|
a7d1c5bbb0 | ||
|
|
dc748a0541 | ||
|
|
72c647829a | ||
|
|
0a039b9c8c | ||
|
|
b1014bfbfd | ||
|
|
d246268630 | ||
|
|
23a0e32e8e | ||
|
|
597e5977b2 | ||
|
|
00f6f47fa9 | ||
|
|
61711f3b6d | ||
|
|
be477e8a88 | ||
|
|
02509d3c40 | ||
|
|
6e3c13b5d3 | ||
|
|
84c2a823c4 | ||
|
|
f2660f7c02 | ||
|
|
73f85b3316 | ||
|
|
86f8b2f018 | ||
|
|
13ebcb782e | ||
|
|
50faad0a04 | ||
|
|
98c2847afd | ||
|
|
be8546812a | ||
|
|
1d506b5f95 | ||
|
|
1036fe45b5 | ||
|
|
bbcebb25eb | ||
|
|
8408183b79 | ||
|
|
66cd9695df | ||
|
|
508c629d2b | ||
|
|
1ff6dd9d30 | ||
|
|
d5c13b1295 | ||
|
|
3ac8ffbc84 | ||
|
|
7f500d775e | ||
|
|
c2957e389f | ||
|
|
70c91e000e | ||
|
|
9cd93c9414 | ||
|
|
5dc9be47cb | ||
|
|
0088ee5e9e | ||
|
|
0678a8118a | ||
|
|
b71179371d | ||
|
|
05104b7438 | ||
|
|
ce8bdb18e0 | ||
|
|
77d0d272fc | ||
|
|
e6ca038e25 | ||
|
|
4fb574253e | ||
|
|
584c3cc76c | ||
|
|
dd383d8887 | ||
|
|
82ef71836f | ||
|
|
2f53debffa | ||
|
|
ebff2205b1 | ||
|
|
8524c8a2f2 |
@@ -0,0 +1,4 @@
|
|||||||
|
__pycache__/
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
instaloader.egg-info/
|
||||||
+4
-3
@@ -1,11 +1,12 @@
|
|||||||
language: python
|
language: python
|
||||||
python:
|
python:
|
||||||
- "3.3"
|
|
||||||
- "3.4"
|
|
||||||
- "3.5"
|
- "3.5"
|
||||||
- "3.5-dev"
|
- "3.5-dev"
|
||||||
|
- "3.6"
|
||||||
|
- "3.6-dev"
|
||||||
|
- "3.7-dev"
|
||||||
- "nightly"
|
- "nightly"
|
||||||
install:
|
install:
|
||||||
- pip install pylint requests
|
- pip install pylint requests
|
||||||
script:
|
script:
|
||||||
- python3 -m pylint -r n -d bad-whitespace,bad-continuation,missing-docstring,anomalous-backslash-in-string,multiple-imports,dangerous-default-value,locally-disabled instaloader
|
- python3 -m pylint -r n -d bad-whitespace,missing-docstring,too-many-arguments,locally-disabled,line-too-long,too-many-public-methods,too-many-lines,too-many-instance-attributes,too-many-locals,too-many-branches,too-many-statements instaloader
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
# instaloader
|
|
||||||
|
|
||||||
Simple downloader to fetch all Instagram pictures and captions from a given profile.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Ensure having [Python](https://www.python.org/) (at least version 3.3) and
|
|
||||||
[python3-requests](https://pypi.python.org/pypi/requests/) installed.
|
|
||||||
|
|
||||||
After having [downloaded instaloader.py](https://github.com/Thammus/instaloader/releases), you invoke it with
|
|
||||||
```
|
|
||||||
./instaloader.py profile [profile ...]
|
|
||||||
```
|
|
||||||
where `profile` is the name of a profile you want to download. Instead of only one profile, you may
|
|
||||||
also specify a list of profiles.
|
|
||||||
|
|
||||||
To later update your local copy of that profile, you may run
|
|
||||||
```
|
|
||||||
./instaloader.py --fast-update profile [profile ...]
|
|
||||||
```
|
|
||||||
When `--fast-update` is given, instaloder terminates when arriving at the first already-downloaded
|
|
||||||
picture.
|
|
||||||
|
|
||||||
Instaloader can also be used to **download private profiles**. To do so, invoke it with
|
|
||||||
```
|
|
||||||
./instaloader.py --login=your_username profile [profile ...]
|
|
||||||
```
|
|
||||||
When invoked like this, it also **stores the session cookies** in a file in `/tmp`, which will be
|
|
||||||
reused later when `--login` is given. So you can download private profiles **non-interactively**
|
|
||||||
when you already have a valid session cookies file.
|
|
||||||
|
|
||||||
The `--quiet` option makes it also **suitable as a cron job**.
|
|
||||||
|
|
||||||
To get a list of other helpful flags, run `./instaloader.py --help`.
|
|
||||||
|
|
||||||
## Usage as library
|
|
||||||
|
|
||||||
You may also use parts of instaloader as library to do other interesting things.
|
|
||||||
|
|
||||||
For example, to get a list of all followers of a profile as well as their follower count, do
|
|
||||||
```python
|
|
||||||
import instaloader
|
|
||||||
|
|
||||||
# login
|
|
||||||
session = instaloader.get_logged_in_session(USERNAME)
|
|
||||||
|
|
||||||
# get followees
|
|
||||||
followees = instaloader.get_followees(PROFILE, session)
|
|
||||||
for f in followees:
|
|
||||||
print("%i\t%s\t%s" % (f['follower_count'], f['username'], f['full_name']))
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, you may download all pictures of all followees with
|
|
||||||
```python
|
|
||||||
for f in followees:
|
|
||||||
try:
|
|
||||||
instaloader.download(f['username'], session)
|
|
||||||
except instaloader.NonfatalException:
|
|
||||||
pass
|
|
||||||
```
|
|
||||||
|
|
||||||
`get_followees()` also returns unique IDs for all loaded followees. These IDs stay unchanged even
|
|
||||||
if a user changes his/her username. To get the current username of a profile, given this unique ID
|
|
||||||
`get_username_by_id()` can be used. For example:
|
|
||||||
```python
|
|
||||||
instaloader.get_username_by_id(session, followees[0]['id'])
|
|
||||||
```
|
|
||||||
+299
@@ -0,0 +1,299 @@
|
|||||||
|
Instaloader
|
||||||
|
===========
|
||||||
|
|
||||||
|
Download pictures (or videos) along with their captions and other metadata
|
||||||
|
from Instagram.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Instaloader is written in Python, thus ensure having
|
||||||
|
`Python <https://www.python.org/>`__ (at least version 3.5) installed.
|
||||||
|
|
||||||
|
If you intend to use this tool under Windows, it is recommended
|
||||||
|
to install
|
||||||
|
`win-unicode-console <https://pypi.python.org/pypi/win_unicode_console>`__.
|
||||||
|
|
||||||
|
If you have `pip <https://pypi.python.org/pypi/pip>`__ installed, you
|
||||||
|
may install Instaloader using
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pip3 install instaloader
|
||||||
|
|
||||||
|
Alternatively, to get the most current version of Instaloader from our
|
||||||
|
`Git repository <https://github.com/Thammus/instaloader>`__:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pip3 install git+https://github.com/Thammus/instaloader
|
||||||
|
|
||||||
|
(pass ``--upgrade`` to upgrade if Instaloader is already installed)
|
||||||
|
|
||||||
|
Instaloader requires
|
||||||
|
`requests <https://pypi.python.org/pypi/requests>`__, which
|
||||||
|
will be installed automatically, if it is not already installed.
|
||||||
|
|
||||||
|
How to automatically download pictures from Instagram
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
To **download all pictures and videos of a profile**, as well as the
|
||||||
|
**profile picture**, do
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader profile [profile ...]
|
||||||
|
|
||||||
|
where ``profile`` is the name of a profile you want to download. Instead
|
||||||
|
of only one profile, you may also specify a list of profiles.
|
||||||
|
|
||||||
|
To later **update your local copy** of that profiles, you may run
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --fast-update profile [profile ...]
|
||||||
|
|
||||||
|
When ``--fast-update`` is given, Instaloader stops when arriving at
|
||||||
|
the first already-downloaded picture.
|
||||||
|
|
||||||
|
Instaloader can also be used to **download private profiles**. To do so,
|
||||||
|
invoke it with
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username profile [profile ...]
|
||||||
|
|
||||||
|
When invoked like this, it also **stores the session cookies** in a file
|
||||||
|
in your temporary directory, which will be reused later when ``--login`` is given. So
|
||||||
|
you can download private profiles **non-interactively** when you already
|
||||||
|
have a valid session cookie file.
|
||||||
|
|
||||||
|
Besides downloading private profiles, being logged in allows to
|
||||||
|
**download stories**:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username --stories profile [profile ...]
|
||||||
|
|
||||||
|
You may also download
|
||||||
|
**the most recent pictures by hashtag**:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader "#hashtag"
|
||||||
|
|
||||||
|
This downloads the requested posts into a directory named according to the specified
|
||||||
|
hashtag and the filenames correspond to the timestamp of the posts.
|
||||||
|
As with all download tasks, this behavior can easily be customized, for example
|
||||||
|
encode the poster's profile name in the filenames:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --filename-pattern={date}_{profile} "#hashtag"
|
||||||
|
|
||||||
|
If you want to **download all followees of a given profile**, call
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username @profile
|
||||||
|
|
||||||
|
To **download all the pictures from your feed which you have liked**, call
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username :feed-liked
|
||||||
|
|
||||||
|
or to **download all pictures from your feed**:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username :feed-all
|
||||||
|
|
||||||
|
**Download all stories** from the profiles you follow:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader --login=your_username --filename-pattern={date}_{profile} :stories
|
||||||
|
|
||||||
|
Advanced Options
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The following flags can be given to Instaloader to specify how profiles should
|
||||||
|
be downloaded.
|
||||||
|
|
||||||
|
To get a list of all flags, their abbreviations and their descriptions, you may
|
||||||
|
run ``instaloader --help``.
|
||||||
|
|
||||||
|
What to Download
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Specify a list of profiles or #hashtags. For each of these, Instaloader
|
||||||
|
creates a folder and downloads all posts along with the pictures's
|
||||||
|
captions and the current **profile picture**. If an already-downloaded profile
|
||||||
|
has been renamed, Instaloader automatically **finds it by its unique ID** and
|
||||||
|
renames the folder likewise.
|
||||||
|
|
||||||
|
Instead of a *profile* or a *#hashtag*, the special targets
|
||||||
|
``:feed-all`` (pictures from your feed),
|
||||||
|
``:feed-liked`` (pictures from your feed which you liked), and
|
||||||
|
``:stories`` (stories of your followees) can be specified.
|
||||||
|
|
||||||
|
--profile-pic-only Only download profile picture.
|
||||||
|
--skip-videos Do not download videos.
|
||||||
|
--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, which is why it is
|
||||||
|
disabled by default.
|
||||||
|
--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.
|
||||||
|
--stories Also **download stories** of each profile that is
|
||||||
|
downloaded. Requires ``--login``.
|
||||||
|
--stories-only Rather than downloading regular posts of each
|
||||||
|
specified profile, only download stories.
|
||||||
|
Requires ``--login``.
|
||||||
|
|
||||||
|
When to Stop Downloading
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
If none of these options are given, Instaloader goes through all pictures
|
||||||
|
matching the specified targets.
|
||||||
|
|
||||||
|
--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.
|
||||||
|
--count COUNT Do not attempt to download more than COUNT posts.
|
||||||
|
Applies only to ``#hashtag``, ``:feed-all`` and ``:feed-liked``.
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
--login YOUR-USERNAME Login name (profile name) for your Instagram account.
|
||||||
|
--sessionfile SESSIONFILE Path for loading and storing session key file.
|
||||||
|
Defaults to a path
|
||||||
|
within your temporary directory, encoding your local
|
||||||
|
username and your Instagram profile name.
|
||||||
|
--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. Posts are stored in the
|
||||||
|
directory whose pattern is 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. Also, the
|
||||||
|
fields ``{date}`` and ``{shortcode}`` can be specified.
|
||||||
|
Defaults to ``{date:%Y-%m-%d_%H-%M-%S}``.
|
||||||
|
--user-agent USER_AGENT User Agent to use for HTTP requests. Per default,
|
||||||
|
Instaloader pretends being Chrome/51.
|
||||||
|
--no-sleep Do not sleep between requests to Instagram's servers.
|
||||||
|
This makes downloading faster, but may be suspicious.
|
||||||
|
|
||||||
|
Miscellaneous Options
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
--shorter-output Do not display captions while downloading.
|
||||||
|
--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**.
|
||||||
|
|
||||||
|
Usage as Python module
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
You may also use parts of Instaloader as library to do other interesting
|
||||||
|
things.
|
||||||
|
|
||||||
|
For example, to get a list of all followees and a list of all followers of a profile, do
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
import instaloader
|
||||||
|
|
||||||
|
# Get instance
|
||||||
|
loader = instaloader.Instaloader()
|
||||||
|
|
||||||
|
# Login
|
||||||
|
loader.interactive_login(USERNAME)
|
||||||
|
|
||||||
|
# Retrieve followees
|
||||||
|
followees = loader.get_followees(PROFILE)
|
||||||
|
print(PROFILE + " follows these profiles:")
|
||||||
|
for f in followees:
|
||||||
|
print("\t%s\t%s" % (f['username'], f['full_name']))
|
||||||
|
|
||||||
|
# Retrieve followers
|
||||||
|
followers = loader.get_followers(PROFILE)
|
||||||
|
print("Followers of " + PROFILE + ":")
|
||||||
|
for f in followers:
|
||||||
|
print("\t%s\t%s" % (f['username'], f['full_name']))
|
||||||
|
|
||||||
|
Then, you may download all pictures of all followees with
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
for f in followees:
|
||||||
|
try:
|
||||||
|
loader.download(f['username'])
|
||||||
|
except instaloader.NonfatalException:
|
||||||
|
pass
|
||||||
|
|
||||||
|
You could also download your last 20 liked pics with
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
loader.download_feed_pics(max_count=20, fast_update=True,
|
||||||
|
filter_func=lambda node:
|
||||||
|
not node["likes"]["viewer_has_liked"] if "likes" in node else not node["viewer_has_liked"])
|
||||||
|
|
||||||
|
To download the last 20 pictures with hashtag #cat, do
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
loader.download_hashtag('cat', max_count=20)
|
||||||
|
|
||||||
|
If logged in, Instaloader is also able to download user stories:
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
loader.download_stories()
|
||||||
|
|
||||||
|
Each Instagram profile has its own unique ID which stays unmodified even
|
||||||
|
if a user changes his/her username. To get said ID, given the profile's
|
||||||
|
name, you may call
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
loader.get_id_by_username(PROFILE_NAME)
|
||||||
|
|
||||||
|
``get_followees()`` also returns unique IDs for all loaded followees. To
|
||||||
|
get the current username of a profile, given this unique ID
|
||||||
|
``get_username_by_id()`` can be used. For example:
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
loader.get_username_by_id(followees[0]['id'])
|
||||||
|
|
||||||
|
Disclaimer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This code is in no way affiliated with, authorized, maintained or endorsed by Instagram or any of its affiliates or
|
||||||
|
subsidiaries. This is an independent and unofficial project. Use at your own risk.
|
||||||
+1094
-354
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from setuptools import setup
|
||||||
|
|
||||||
|
if sys.version_info < (3, 5):
|
||||||
|
sys.exit('Instaloader requires Python >= 3.5.')
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name='instaloader',
|
||||||
|
version='2.2.1',
|
||||||
|
py_modules=['instaloader'],
|
||||||
|
url='https://github.com/Thammus/instaloader',
|
||||||
|
license='MIT',
|
||||||
|
author='Alexander Graf, André Koch-Kramer',
|
||||||
|
author_email='mail@agraf.me, koch-kramer@web.de',
|
||||||
|
description='Download pictures (or videos) along with their captions and other metadata '
|
||||||
|
'from Instagram.',
|
||||||
|
long_description=open('README.rst').read(),
|
||||||
|
install_requires=['requests>=2.4'],
|
||||||
|
python_requires='>=3.5',
|
||||||
|
entry_points={'console_scripts': ['instaloader=instaloader:main']},
|
||||||
|
zip_safe=True,
|
||||||
|
keywords='instagram downloader',
|
||||||
|
classifiers=[
|
||||||
|
'Development Status :: 5 - Production/Stable',
|
||||||
|
'Environment :: Console',
|
||||||
|
'Intended Audience :: End Users/Desktop',
|
||||||
|
'License :: OSI Approved :: MIT License',
|
||||||
|
'Operating System :: OS Independent',
|
||||||
|
'Programming Language :: Python :: 3.5',
|
||||||
|
'Programming Language :: Python :: 3.6',
|
||||||
|
'Programming Language :: Python :: 3 :: Only',
|
||||||
|
'Topic :: Internet',
|
||||||
|
'Topic :: Multimedia :: Graphics'
|
||||||
|
]
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user