Baixar posts do Instagram usando Python
Neste artigo desenvolveremos um script capaz de fazer o download de posts do Instagram via terminal usando Python.
Introdução
Para acompanhar o artigo serão necessários os seguintes requisitos:
Verifique se você possui o módulo instaloader instalado:
pip3 list | grep instaloader
A saída deve ser algo como:
instaloader 4.8.2
Caso não possua, instale-o com:
pip3 install instaloader
Com os requisitos em mãos, vamos iniciar a criação do script. Vou chamá-lo de "insta-dl", nomeie de acordo com sua preferência:
vim insta-dl
No início do arquivo defina o caminho do interpretador de comandos, no caso o python3 e carregue os módulos necessários:
O script requer que seja informada a URL do post desejado no Instagram, então vamos fazer essa checagem usando o sys.argv para ler os parâmetros passados:
O sys.argv é um array onde o índice 0 é o nome do script e os demais índices são os parâmetros informados. Em nosso caso vamos trabalhar somente com o primeiro parâmetro, mas você pode incrementar o código para suportar múltiplas URLs posteriormente.
Definir o diretório de download dos conteúdos e fazer o script trabalhar lá:
Agora vamos criar uma instância/objeto do módulo instaloader passando alguns parâmetros de configuração. Não me atentarei em explicá-los porque são auto-explicativos:
Se você quiser fazer download de posts de contas privadas, deverá efetuar login no Instagram e claro, a conta logada precisa seguir a pessoa/página desejada. Caso queira trabalhar somente com contas públicas, comente as 3 linhas de código abaixo:
O código abaixo extrair o "short_code" da URL informada e a passa como parâmetro ao módulo instaloader. Em seguida efetuamos o download usando o método "download_post" do objeto "loader".
Salve o script e vamos testar. Torne-o executável:
chmod +x insta-dl
E em seguida faça download de um post do Instagram, vou utilizar a foto da minha namorada como exemplo:
insta-dl https://www.instagram.com/p/CW3m1KYJTfU/
Usuário: xxxxxxxx
Senha: xxxxxx
Baixando CW3m1KYJTfU ...
./juhpereirasouza__2717811679183583188.jpg [ #solemarerelax #amorprop...] Em Downloads serão salvos 2 arquivos no formato nome-de-usuario_id-do-perfil, um na extensão do post (JPEG, MP4 etc) e outro na extensão TXT contendo a descrição do post.
Na próxima página teremos o link para download do script e o código completo.
Espero que seja útil!
- conhecimento básico em Python;
- Python3 instalado no sistema;
- Módulo instaloader;
- E os seguintes módulos distribuídos por padrão em instalações do Python: re, os, sys e getpass.
Verifique se você possui o módulo instaloader instalado:
pip3 list | grep instaloader
A saída deve ser algo como:
instaloader 4.8.2
Caso não possua, instale-o com:
pip3 install instaloader
Com os requisitos em mãos, vamos iniciar a criação do script. Vou chamá-lo de "insta-dl", nomeie de acordo com sua preferência:
vim insta-dl
No início do arquivo defina o caminho do interpretador de comandos, no caso o python3 e carregue os módulos necessários:
#!/usr/bin/env python3 # módulos necessários import instaloader import re import os import sys
O script requer que seja informada a URL do post desejado no Instagram, então vamos fazer essa checagem usando o sys.argv para ler os parâmetros passados:
# 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()
O sys.argv é um array onde o índice 0 é o nome do script e os demais índices são os parâmetros informados. Em nosso caso vamos trabalhar somente com o primeiro parâmetro, mas você pode incrementar o código para suportar múltiplas URLs posteriormente.
Definir o diretório de download dos conteúdos e fazer o script trabalhar lá:
# diretório de download downloadDir = '/home/fabio/Downloads' os.chdir(downloadDir)
Agora vamos criar uma instância/objeto do módulo instaloader passando alguns parâmetros de configuração. Não me atentarei em explicá-los porque são auto-explicativos:
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}'
)
Se você quiser fazer download de posts de contas privadas, deverá efetuar login no Instagram e claro, a conta logada precisa seguir a pessoa/página desejada. Caso queira trabalhar somente com contas públicas, comente as 3 linhas de código abaixo:
# 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)
O código abaixo extrair o "short_code" da URL informada e a passa como parâmetro ao módulo instaloader. Em seguida efetuamos o download usando o método "download_post" do objeto "loader".
# 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 script e vamos testar. Torne-o executável:
chmod +x insta-dl
E em seguida faça download de um post do Instagram, vou utilizar a foto da minha namorada como exemplo:
insta-dl https://www.instagram.com/p/CW3m1KYJTfU/
Usuário: xxxxxxxx
Senha: xxxxxx
Baixando CW3m1KYJTfU ...
./juhpereirasouza__2717811679183583188.jpg [ #solemarerelax #amorprop...] Em Downloads serão salvos 2 arquivos no formato nome-de-usuario_id-do-perfil, um na extensão do post (JPEG, MP4 etc) e outro na extensão TXT contendo a descrição do post.
Na próxima página teremos o link para download do script e o código completo.
Espero que seja útil!
Valeu