Extraia Dados do Instagram com Python: Guia Completo!

O Instagram consolidou-se como uma das plataformas de mídia social mais influentes globalmente, ostentando aproximadamente 1,21 bilhão de usuários em 2021, o que representa cerca de 28% da população online, segundo dados do Statista.

Este artigo oferece um roteiro detalhado sobre como coletar informações do Instagram de forma programática, utilizando Python, através de duas abordagens distintas. A primeira estratégia envolve o download de conteúdo multimídia através da ferramenta Instaloader. A segunda propõe a elaboração de um script Python para adquirir dados JSON relevantes sobre um perfil.

É crucial salientar que a obtenção de dados pode infringir os termos de serviço do Instagram, e recomendamos enfaticamente que você proceda ao download apenas das informações referentes à sua própria conta.

Utilizando o Instaloader

O Instaloader se destaca como um pacote Python concebido para o download de conteúdo do Instagram. Sua notável facilidade de uso simplifica e acelera o processo de extração e download de dados. Para começar, a instalação é realizada via pip:

pip install instaloader

Após a instalação, ele pode ser acionado tanto pela linha de comando quanto integrado a um script Python como um pacote.

Para utilizá-lo via linha de comando, emprega-se o comando instaloader. Por exemplo, para visualizar informações de ajuda, digite o seguinte comando no seu terminal:

instaloader --help

Para baixar a imagem de perfil de um usuário, utilize o comando com a opção –profile, seguido pelo nome de usuário em questão. Veja o exemplo:

instaloader --profile <NOME DE USUÁRIO DO PERFIL>

Entretanto, para que este comando seja eficaz, é preciso realizar o login previamente. Isso pode ser feito utilizando a opção de login da seguinte maneira:

instaloader --login <SEU NOME DE USUÁRIO> --profile <NOME DE USUÁRIO DO PERFIL>

Conteúdo disponível para download

Com o Instaloader, é possível baixar diversas formas de conteúdo multimídia. O trecho do manual abaixo ilustra a variedade de itens que podem ser baixados:

  profile               Baixa o perfil. Se um perfil já baixado foi renomeado, o Instaloader o encontra automaticamente pelo ID único e renomeia a pasta de acordo.
  @profile              Baixa todos os perfis seguidos pelo perfil especificado. Requer --login. Considere usar :feed em vez de @yourself.
  "#hashtag"            Baixa conteúdo da #hashtag.
  %location_id          Baixa conteúdo da localização especificada pelo ID. Requer --login.
  :feed                 Baixa as fotos do seu feed. Requer --login.
  :stories              Baixa as stories das pessoas que você segue. Requer --login.
  :saved                Baixa as postagens salvas. Requer --login.
  -- -shortcode         Baixa a postagem com o código curto fornecido
  filename.json[.xz]    Re-Baixa o objeto fornecido.
  +args.txt             Lê alvos (e opções) do arquivo de texto fornecido.

Para baixar as publicações de um usuário específico, o comando seria:

instaloader --login <SEU NOME DE USUÁRIO> <NOME DE USUÁRIO ALVO>

Nesse caso, seu nome de usuário refere-se à sua conta autenticada do Instagram, enquanto o nome de usuário alvo indica o perfil cujas postagens você deseja obter.

Para baixar as postagens dos seguidores de um perfil, o comando a ser utilizado seria:

instaloader --login <SEU NOME DE USUÁRIO> @<NOME DE USUÁRIO ALVO>

Note a diferença crucial: o símbolo @ antecede o nome de usuário de destino neste comando, indicando que as postagens dos seguidores serão baixadas.

Em alternativa à interface de linha de comando, o Instaloader também pode ser utilizado como um pacote Python, cuja documentação completa está disponível aqui.

Embora o Instaloader possibilite o download de vários tipos de arquivos multimídia, ele se mostra insuficiente para extrair metadados, como a biografia de um usuário. Para essa finalidade, o método seguinte demonstra como criar um script Python capaz de extrair os dados desejados de um perfil.

Desenvolvendo um Script Python para Obter Dados do Instagram

Panorama geral

Nesta seção, vamos construir um script simples em Python para baixar dados do Instagram. Este método se baseia em uma API JSON do Instagram, relativamente desconhecida, para coletar dados de perfis públicos.

Essa API opera da seguinte maneira: ao adicionar a consulta __a=1&__d=1 ao final da URL do seu perfil, o Instagram responde com dados JSON referentes a esse perfil.

Por exemplo, se meu nome de usuário for 0xanesu, ao fazer uma requisição para https://instagram.com/0xanesu/?__a=1&__d=1, receberei dados JSON relacionados ao meu perfil.

Construindo o Script

Para realizar a requisição em Python, usaremos o módulo requests. Contudo, você pode optar por pycURL, urllib ou qualquer outra biblioteca cliente HTTP de sua preferência. Para começar, instale o módulo requests utilizando pip:

pip install requests

Com a instalação concluída, abra um arquivo para iniciar seu script e importe a função get do módulo requests, além da função loads de json, que será utilizada para analisar a resposta JSON.

from requests import get
from json import loads

Após importar as funcionalidades necessárias, crie uma variável para armazenar a URL do seu perfil no Instagram.

url="https://instagram.com/<SEU NOME DE USUÁRIO AQUI>"

Conforme mencionado anteriormente, para extrair dados de um perfil do Instagram, é preciso adicionar os parâmetros de consulta __a=1 e __d=1. Para isso, criamos um objeto dicionário com os parâmetros.

params = { '__a': 1, '__d': 1 }

Para autorizar as requisições, o Instagram exige um ID de sessão. Explicarei como obter seu ID de sessão mais adiante. Por enquanto, utilize um valor provisório, que será substituído posteriormente.

cookies = { 'sessionid': '<SEU ID DE SESSÃO AQUI>' }

Agora, defina uma função que será executada quando a requisição for bem-sucedida.

def on_success(response):
    profile_data_json = response.text
    parsed_data = loads(profile_data_json)
    
    print('Nome completo do usuário:', parsed_data['graphql']['user']['full_name'])
    print('Biografia do usuário:', parsed_data['graphql']['user']['biography'])

A função definida recebe o objeto de resposta, extrai o JSON do corpo da resposta e o converte em um objeto. Em seguida, ela extrai o nome completo e a biografia do perfil.

A seguir, vamos definir a função que será executada em caso de erro.

def on_error(response):
    # Exibe o erro caso algo dê errado
    print('Ocorreu um erro')
    print('Código de erro:', response.status_code)
    print('Motivo:', response.reason)

Em seguida, chamamos a função get para realizar a requisição, passando a URL, os parâmetros e os cookies como argumentos.

response = get(url, params, cookies=cookies)

Finalmente, verificamos o código de status da resposta. Se o status for 200, chamamos a função on_success. Caso contrário, chamamos a função on_error.

if response.status_code == 200:
    on_success(response)
else:
    on_error(response)

Neste ponto, o código está concluído. Resta obter o ID da sessão. Para obtê-lo, abra o Google Chrome e acesse o Instagram na web. Certifique-se de estar logado e abra as Ferramentas de Desenvolvedor usando Ctrl + Shift + I ou Cmd + Shift + I.

Com as ferramentas de desenvolvimento abertas, acesse a aba Aplicativo.

Em seguida, clique no submenu Cookies para visualizar os cookies utilizados pelo Instagram.

Posteriormente, copie o valor do cookie sessionid da lista de cookies exibida no painel Ferramentas de Desenvolvedor.

Após copiar o ID da sessão, cole-o no script e execute-o. No meu caso, utilizando o perfil do Instagram como exemplo (https://instgram.com/instagram?__a=1&__d=1), o resultado seria:

Dessa forma, podemos obter dinamicamente os dados do perfil. A API JSON retorna uma grande quantidade de dados. Este é o resultado ao imprimir todos os dados:

E assim, você extrai dados e postagens de perfis do Instagram.

Considerações Finais

Neste artigo, exploramos o processo de download de postagens e mídias utilizando o Instaloader. Em seguida, desenvolvemos um script personalizado para extrair dados JSON de perfil, que abrangem uma gama maior de informações do que apenas o conteúdo multimídia. Se você gostou deste projeto, talvez queira conferir nosso post sobre o Python Timeit para cronometrar seu código.

Se você tem interesse em otimizar sua experiência no Instagram, explore nosso artigo sobre o Qoob Stories: uma análise detalhada do downloader do Instagram.