mirror of
https://github.com/instaloader/instaloader.git
synced 2026-10-19 15:12:16 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
+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,multiple-imports,too-many-arguments,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 instaloader
|
||||||
|
|||||||
+144
-31
@@ -1,43 +1,44 @@
|
|||||||
Instaloader
|
Instaloader
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
Tool to automatically download pictures (or videos) of given profiles
|
||||||
|
from Instagram.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
instaloader is written in Python, thus ensure having
|
Instaloader is written in Python, thus ensure having
|
||||||
`Python <https://www.python.org/>`__ (at least version 3.3) installed.
|
`Python <https://www.python.org/>`__ (at least version 3.5) installed.
|
||||||
|
|
||||||
If you intend to use this tool under Windows, it is recommended
|
If you intend to use this tool under Windows, it is recommended
|
||||||
to install
|
to install
|
||||||
`win-unicode-console <https://pypi.python.org/pypi/win_unicode_console>`__.
|
`win-unicode-console <https://pypi.python.org/pypi/win_unicode_console>`__.
|
||||||
|
|
||||||
If you have `pip <https://pypi.python.org/pypi/pip>`__ installed, you
|
If you have `pip <https://pypi.python.org/pypi/pip>`__ installed, you
|
||||||
may install instaloader using
|
may install Instaloader using
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
pip3 install instaloader
|
pip3 install instaloader
|
||||||
|
|
||||||
Alternatively, you may `download instaloader from
|
Alternatively, to get the most current version of Instaloader from our
|
||||||
github <https://github.com/Thammus/instaloader/releases>`__, unzip it
|
`Git repository <https://github.com/Thammus/instaloader>`__:
|
||||||
and invoke bundled ``setup.py`` (requiring
|
|
||||||
`setuptools <https://pypi.python.org/pypi/setuptools>`__) to install it:
|
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
python3 setup.py install [--user]
|
pip3 install git+https://github.com/Thammus/instaloader
|
||||||
|
|
||||||
(pass ``--user`` to install it for your user only instead of globally)
|
(pass ``--upgrade`` to upgrade if Instaloader is already installed)
|
||||||
|
|
||||||
instaloader requires
|
Instaloader requires
|
||||||
`requests <https://pypi.python.org/pypi/requests>`__, which
|
`requests <https://pypi.python.org/pypi/requests>`__, which
|
||||||
will be installed automatically by setup.py, if not already installed.
|
will be installed automatically, if it is not already installed.
|
||||||
|
|
||||||
How to automatically download pictures from Instagram
|
How to automatically download pictures from Instagram
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
To download a set of profiles, do
|
To **download all pictures and videos of a profile**, as well as the
|
||||||
|
**profile picture**, do
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -46,13 +47,13 @@ To download a set of profiles, do
|
|||||||
where ``profile`` is the name of a profile you want to download. Instead
|
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.
|
of only one profile, you may also specify a list of profiles.
|
||||||
|
|
||||||
To later update your local copy of that profile, you may run
|
To later **update your local copy** of that profiles, you may run
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
instaloader --fast-update profile [profile ...]
|
instaloader --fast-update profile [profile ...]
|
||||||
|
|
||||||
When ``--fast-update`` is given, instaloder terminates when arriving at
|
When ``--fast-update`` is given, Instaloader stops when arriving at
|
||||||
the first already-downloaded picture.
|
the first already-downloaded picture.
|
||||||
|
|
||||||
Instaloader can also be used to **download private profiles**. To do so,
|
Instaloader can also be used to **download private profiles**. To do so,
|
||||||
@@ -63,10 +64,17 @@ invoke it with
|
|||||||
instaloader --login=your_username profile [profile ...]
|
instaloader --login=your_username profile [profile ...]
|
||||||
|
|
||||||
When invoked like this, it also **stores the session cookies** in a file
|
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
|
in your temporary directory, which will be reused later when ``--login`` is given. So
|
||||||
you can download private profiles **non-interactively** when you already
|
you can download private profiles **non-interactively** when you already
|
||||||
have a valid session cookie file.
|
have a valid session cookie file.
|
||||||
|
|
||||||
|
You may also download
|
||||||
|
**the most recent pictures by hashtag**:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
instaloader "#hashtag"
|
||||||
|
|
||||||
If you want to **download all followees of a given profile**, call
|
If you want to **download all followees of a given profile**, call
|
||||||
|
|
||||||
::
|
::
|
||||||
@@ -79,30 +87,128 @@ To **download all the pictures from your feed which you have liked**, call
|
|||||||
|
|
||||||
instaloader --login=your_username :feed-liked
|
instaloader --login=your_username :feed-liked
|
||||||
|
|
||||||
The ``--quiet`` option makes it also **suitable as a cron job**.
|
or to **download all pictures from your feed**:
|
||||||
|
|
||||||
To get a list of other helpful flags, run ``instaloader --help``.
|
::
|
||||||
|
|
||||||
Usage as library
|
instaloader --login=your_username :feed-all
|
||||||
|
|
||||||
|
Advanced Options
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
You may also use parts of instaloader as library to do other interesting
|
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.
|
||||||
|
|
||||||
|
--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.
|
||||||
|
|
||||||
|
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
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
--no-profile-subdir Instead of creating a subdirectory for each profile
|
||||||
|
and storing pictures there, store pictures in files
|
||||||
|
named ``PROFILE__DATE_TIME.jpg``.
|
||||||
|
--hashtag-username Lookup username of pictures when downloading by
|
||||||
|
#hashtag and encode it in the downlaoded file's path
|
||||||
|
or filename (if ``--no-profile-subdir``). Without this
|
||||||
|
option, the #hashtag is used instead. This requires an
|
||||||
|
additional request to the Instagram server for each
|
||||||
|
picture, which is why it is disabled by default.
|
||||||
|
--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.
|
things.
|
||||||
|
|
||||||
For example, to get a list of all followers of a profile as well as
|
For example, to get a list of all followees and a list of all followers of a profile, do
|
||||||
their follower count, do
|
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
import instaloader
|
import instaloader
|
||||||
|
|
||||||
# login
|
# Get instance
|
||||||
session = instaloader.get_logged_in_session(USERNAME)
|
loader = instaloader.Instaloader()
|
||||||
|
|
||||||
# get followees
|
# Login
|
||||||
followees = instaloader.get_followees(PROFILE, session)
|
loader.interactive_login(USERNAME)
|
||||||
|
|
||||||
|
# Retrieve followees
|
||||||
|
followees = loader.get_followees(PROFILE)
|
||||||
|
print(PROFILE + " follows these profiles:")
|
||||||
for f in followees:
|
for f in followees:
|
||||||
print("%i\t%s\t%s" % (f['follower_count'], f['username'], f['full_name']))
|
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
|
Then, you may download all pictures of all followees with
|
||||||
|
|
||||||
@@ -110,7 +216,7 @@ Then, you may download all pictures of all followees with
|
|||||||
|
|
||||||
for f in followees:
|
for f in followees:
|
||||||
try:
|
try:
|
||||||
instaloader.download(f['username'], session)
|
loader.download(f['username'])
|
||||||
except instaloader.NonfatalException:
|
except instaloader.NonfatalException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -118,8 +224,15 @@ You could also download your last 20 liked pics with
|
|||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
instaloader.download_feed_pics(session, max_count=20, fast_update=True,
|
oader.download_feed_pics(max_count=20, fast_update=True,
|
||||||
filter_func=lambda node: not node["likes"]["viewer_has_liked"])
|
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)
|
||||||
|
|
||||||
Each Instagram profile has its own unique ID which stays unmodified even
|
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
|
if a user changes his/her username. To get said ID, given the profile's
|
||||||
@@ -127,7 +240,7 @@ name, you may call
|
|||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
instaloader.get_id_by_username(PROFILE_NAME)
|
loader.get_id_by_username(PROFILE_NAME)
|
||||||
|
|
||||||
``get_followees()`` also returns unique IDs for all loaded followees. To
|
``get_followees()`` also returns unique IDs for all loaded followees. To
|
||||||
get the current username of a profile, given this unique ID
|
get the current username of a profile, given this unique ID
|
||||||
@@ -135,4 +248,4 @@ get the current username of a profile, given this unique ID
|
|||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
instaloader.get_username_by_id(session, followees[0]['id'])
|
loader.get_username_by_id(followees[0]['id'])
|
||||||
|
|||||||
+955
-611
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,12 @@
|
|||||||
import sys
|
import sys
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
|
|
||||||
if sys.version_info < (3, 3):
|
if sys.version_info < (3, 5):
|
||||||
sys.exit('Instaloader requires Python >= 3.3.')
|
sys.exit('Instaloader requires Python >= 3.5.')
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='instaloader',
|
name='instaloader',
|
||||||
version='1.2',
|
version='2.0',
|
||||||
py_modules=['instaloader'],
|
py_modules=['instaloader'],
|
||||||
url='https://github.com/Thammus/instaloader',
|
url='https://github.com/Thammus/instaloader',
|
||||||
license='MIT',
|
license='MIT',
|
||||||
@@ -19,7 +19,7 @@ setup(
|
|||||||
'profile.',
|
'profile.',
|
||||||
long_description=open('README.rst').read(),
|
long_description=open('README.rst').read(),
|
||||||
install_requires=['requests>=2.4'],
|
install_requires=['requests>=2.4'],
|
||||||
python_requires='>=3.3',
|
python_requires='>=3.5',
|
||||||
entry_points={'console_scripts': ['instaloader=instaloader:main']},
|
entry_points={'console_scripts': ['instaloader=instaloader:main']},
|
||||||
zip_safe=True,
|
zip_safe=True,
|
||||||
keywords='instagram downloader',
|
keywords='instagram downloader',
|
||||||
@@ -29,8 +29,6 @@ setup(
|
|||||||
'Intended Audience :: End Users/Desktop',
|
'Intended Audience :: End Users/Desktop',
|
||||||
'License :: OSI Approved :: MIT License',
|
'License :: OSI Approved :: MIT License',
|
||||||
'Operating System :: OS Independent',
|
'Operating System :: OS Independent',
|
||||||
'Programming Language :: Python :: 3.3',
|
|
||||||
'Programming Language :: Python :: 3.4',
|
|
||||||
'Programming Language :: Python :: 3.5',
|
'Programming Language :: Python :: 3.5',
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
'Programming Language :: Python :: 3 :: Only',
|
'Programming Language :: Python :: 3 :: Only',
|
||||||
|
|||||||
Reference in New Issue
Block a user