Baixar posts do Instagram usando Python

Neste artigo desenvolveremos um script capaz de fazer o download de posts do Instagram via terminal usando Python.

[ Hits: 10.674 ]

Por: Fábio Berbert de Paula em 15/12/2021 | Blog: https://fabio.automatizando.dev


Introdução



Para acompanhar o artigo serão necessários os seguintes requisitos:
  • 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!

    Próxima página

Páginas do artigo
   1. Introdução
   2. Código completo
Outros artigos deste autor

Como minimizar CSS e Javascript via linha de comando

O que são distribuições

Organizando projetos com a classe FastTemplate (parte 1)

Liberte-se: Crie um Servidor Proxy na Nuvem para Acessar Conteúdos Bloqueados

Como baixar fotos e vídeos do Instagram com Python

Leitura recomendada

Ubuntu no Samsung Chromebook com processador ARM

Comandos básicos do Linux

Tem Facebook? Então tem Joli OS

Instalação de um Servidor Web

Pilha de Diretórios (comandos pushd, popd e dirs)

  
Comentários
[1] Comentário enviado por SamL em 15/12/2021 - 01:24h

Bom artigo, Fábio. Só não sabia que o vol aceitava pequenos vídeos nos artigos, isso é ótimo! Vou anotar aqui pra lembrar de usar esse recurso quando escrever algo.
Valeu

[2] Comentário enviado por fabio em 15/12/2021 - 11:05h


[1] Comentário enviado por SamL em 15/12/2021 - 01:24h

Bom artigo, Fábio. Só não sabia que o vol aceitava pequenos vídeos nos artigos, isso é ótimo! Vou anotar aqui pra lembrar de usar esse recurso quando escrever algo.
Valeu


Basta anexar o vídeo como imagem. Um abraço

[3] Comentário enviado por maurixnovatrento em 16/12/2021 - 20:03h


Opa fábio. Muito bom essa dica, porém eu queria uma forma de receber as notificações do facebook e instagram usando python. Se conseguir encontrar algo, manda uma dica no VOL.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[4] Comentário enviado por Thomas45 em 04/01/2022 - 08:25h


Fulfilled to consider your to be as I would survey I have an unclear issue, I am likewise confused and requiring light on this not well characterized issue. Need help.
https://www.onevanilla.top/

[5] Comentário enviado por ifallenhunt em 26/04/2022 - 14:06h

Muito bom, o meu por algum motivo só funciona usando ./ mas deu certo, vlw pela dica!

vou dar uma editada no arquivo para passar a autenticação de 2 fatores e vou tentar manter o usuário logado

[6] Comentário enviado por removido em 02/06/2022 - 16:51h

Fabio excelente artigo,gostaria de saber se você bloqueou meu email,porque quero falar contigo faz tempo e não consigo,você pode aprovar meu artigo? eu me esforcei ao máximo para criar esse artigo intitulado 'História do Unix e a popularidade do Linux' espero que goste,pois a leitura do texto é gostosa de ler.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts