Como baixar fotos e vídeos do Instagram com Python
Neste artigo criaremos um script em Python capaz de fazer download de fotos e vídeos do Instagram.
Introdução
Existem aplicativos e sites que tornam essa tarefa simples, mas como somos curiosos e usuários Linux raiz, vamos criar nossa própria solução usando nada mais que conhecimentos básicos em Python.
Existem duas possibilidades de download de posts do Instagram: fotos e vídeos. E também existem duas possibilidades de acesso aos posts desejados: os de conta pública e privada.
Para os posts de conta privada, será necessário usar credenciais de uma conta que siga a pessoa dona do post em questão.
Partindo do princípio que o Python 3 já está instalado em sua distribuição, vamos instalar o instaloader usando o pip3:
pip3 install instaloader
NOTA: o código do artigo irá funcionar tanto no Linux, quanto no macOS, Windows, BSD e qualquer outro sistema que possua o interpretador Python 3 disponível.
Em seguida vamos verificar se a URL foi informada como argumento via linha de comando, caso contrário exibir uma mensagem de ajuda e sair:
Definir qual será o diretório destino dos downloads:
Agora iremos iniciar em "loader" uma instância da classe Instaloader:
Onde:
O bloco a seguir é opcional, só é necessário fazer download se você for baixar posts de contas privadas. Caso esteja baixando conteúdo de contas públicas, pode comentar as linhas a seguir:
Agora vamos tratar a URL do post e extrair somente o que nos interessa, que é a "shortcode" da URL.
Em suma, no bloco acima se a URL informada for um post válido, o script irá criar uma instância de Post a partir do shortcode e armazenar na variável "post". Em seguida usará esse objeto "post" para executar o método "download_post() no diretório corrente.
A seguir o código completo:
Salve o arquivo com um nome qualquer, como por exemplo "insta-dl", dê permissão de execução e copie para algum diretório do seu $PATH:
chmod +x insta-dl
sudo cp insta-dl /usr/local/bin
Em seguida basta executar:
insta-dl https://www.instagram.com/p/CClaMqigoeS/
E verificar o download em ~/Downloads:
ls ~/Downloads/
Você terá um arquivo com a imagem ou vídeo do post e um arquivo txt com o texto.
O código apresentado neste artigo ficará disponível e será atualizado em:
Também gravei um vídeo hands-on explicando o código em:
Existem duas possibilidades de download de posts do Instagram: fotos e vídeos. E também existem duas possibilidades de acesso aos posts desejados: os de conta pública e privada.
Para os posts de conta privada, será necessário usar credenciais de uma conta que siga a pessoa dona do post em questão.
Dependências
Para o nosso projeto vamos precisar de:- Python 3
- Módulo instaloader
Partindo do princípio que o Python 3 já está instalado em sua distribuição, vamos instalar o instaloader usando o pip3:
pip3 install instaloader
NOTA: o código do artigo irá funcionar tanto no Linux, quanto no macOS, Windows, BSD e qualquer outro sistema que possua o interpretador Python 3 disponível.
Desenvolvendo o código
O primeiro passo será importar o módulo instaloader:import instaloader
Em seguida vamos verificar se a URL foi informada como argumento via linha de comando, caso contrário exibir uma mensagem de ajuda e sair:
import sys
<strong>#verificar se a URL foi informada</strong><br
try:
url = sys.argv[1]
except IndexError:
print("Forma de uso:\n\n", sys.argv[0], "URL\n\nInforme uma URL válida\n\n")
sys.exit()
Definir qual será o diretório destino dos downloads:
#diretório de download downloadDir = '/home/fabio/Downloads' import os os.chdir(downloadDir)
Agora iremos iniciar em "loader" uma instância da classe Instaloader:
loader = instaloader.Instaloader(
download_pictures=True,
download_videos=True,
download_video_thumbnails=False,
download_geotags=False,
download_comments=False,
save_metadata=False,
compress_json=False,
filename_pattern='{profile}_{mediaid}'
)
Onde:
- download_pictures=True :: fazer download de imagens
- download_videos=True :: fazer download de vídeos
- download_video_thumbnails=False :: não baixar miniaturas de vídeo
- download_geotags=False :: não baixar geotags
- download_comments=False :: não baixar comentários
- save_metadata=False :: não baixar metadata do post
- compress_json=False :: não compactar o json de metadata
- filename_pattern='{profile}_{mediaid} :: formato do nome de arquivo baixado, onde {profile} é o nome do usuário e {mediaid} o valor numérico que identifica o post
O bloco a seguir é opcional, só é necessário fazer download se você for baixar posts de contas privadas. Caso esteja baixando conteúdo de contas públicas, pode comentar as linhas a seguir:
from getpass import getpass
username = input('Usuário: ')
password = getpass('Senha: ')
loader.login(username,password)
Agora vamos tratar a URL do post e extrair somente o que nos interessa, que é a "shortcode" da URL.
import re
#extrair "short_code" da URL
#exemplo: https://www.instagram.com/p/CCfeQV-AssF/
expr = r'\/p\/([^\/]*)/'
found = re.search(expr, url)
if found:
print("Baixando ", found.group(1), "...")
post = instaloader.Post.from_shortcode(loader.context, found.group(1))
loader.download_post(post, ".")
Em suma, no bloco acima se a URL informada for um post válido, o script irá criar uma instância de Post a partir do shortcode e armazenar na variável "post". Em seguida usará esse objeto "post" para executar o método "download_post() no diretório corrente.
A seguir o código completo:
#!/usr/bin/env python3
import instaloader
from getpass import getpass
import os
import re
import sys
#verificar se a URL foi informada
try:
url = sys.argv[1]
except IndexError:
print("Forma de uso:\n\n", sys.argv[0], "URL\n\nInforme uma URL válida\n\n")
sys.exit()
#diretório de download
downloadDir = '/home/fabio/Downloads'
os.chdir(downloadDir)
loader = instaloader.Instaloader(
download_pictures=True,
download_videos=True,
download_video_thumbnails=False,
download_geotags=False,
download_comments=False,
save_metadata=False,
compress_json=False,
filename_pattern='{profile}_{mediaid}'
)
#o login é opcional, necessário somente no
#caso de download de posts de contas privadas
#comente as próximas 3 linhas caso esteja
#fazendo download de posts de contas públicas
# username = input('Usuário: ')
# password = getpass('Senha: ')
# loader.login(username,password)
#extrair "short_code" da URL
#exemplo: https://www.instagram.com/p/CCfeQV-AssF/
expr = r'\/p\/([^\/]*)/'
found = re.search(expr, url)
if found:
print("Baixando ", found.group(1), "...")
post = instaloader.Post.from_shortcode(loader.context, found.group(1))
loader.download_post(post, ".")
Salve o arquivo com um nome qualquer, como por exemplo "insta-dl", dê permissão de execução e copie para algum diretório do seu $PATH:
chmod +x insta-dl
sudo cp insta-dl /usr/local/bin
Em seguida basta executar:
insta-dl https://www.instagram.com/p/CClaMqigoeS/
E verificar o download em ~/Downloads:
ls ~/Downloads/
Você terá um arquivo com a imagem ou vídeo do post e um arquivo txt com o texto.
O código apresentado neste artigo ficará disponível e será atualizado em:
Também gravei um vídeo hands-on explicando o código em: