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: 2.047 ]

Por: Fábio Berbert de Paula em 15/12/2021 | Blog: https://youtube.com/c/cotidianohackeado


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

Criando um sistema de banners rotativos em PHP

Semana da velharia no VOL

Tradutor de palavras em vários idiomas via shell

Desbloquear a tela do Android pelo PC (PIN)

Placa Intel PRO/Wireless 3945ABG no Debian Linux

Leitura recomendada

Linux, uma história sem fim!

Software livre e a liberdade fundamental

TinyCore Linux - Introdução e Instalação

Ubuntu 10.04 no Notebook Acer 5532

AlmaLinux - Sua Alternativa ao CentOS

  
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 mauricio123 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/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts