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.682 ]

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

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

Como criar um clicador de sites com NodeJS

Tecnologia a seu favor: 3 motivos para ter um sistema financeiro e ganhar tempo no trabalho

Python - Usando requests anônimos através da rede Tor

Tags automáticas em URLs com a classe urlmatch da PHP

Leitura recomendada

Instalação e configuração básica de um Debian 6 Squeeze para Desktops

Porque migrar para o Linux - No meu caso também, preguiça

Instalando o PostgreSQL no Fedora

Instalando o Insigne Momentum 5.0

Pós Instalação do Kubuntu 20.10

  
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