Como baixar dados do Instagram usando Python

O Instagram é uma das maiores redes de mídia social do mundo, com cerca de 1,21 bilhão de usuários em 2021, ou cerca de 28% da internet, de acordo com Statista.

Este artigo é um guia sobre como baixar dados do Instagram programaticamente de um perfil usando Python em dois métodos. O primeiro método é baixar mídia usando o Instaloader. A segunda é escrever um script Python simples para obter dados JSON sobre o perfil.

É importante observar que a coleta de dados pode violar os termos de serviço do Instagram e recomendamos que você baixe apenas os dados da sua conta.

Usando o instalador

Instaloader é um pacote Python para baixar mídia do Instagram. É incrivelmente fácil de usar e torna a extração e download de dados rápida e fácil. Para começar a usar o Instaloader, primeiro instale-o usando o pip:

pip install instaloader

Depois de instalado, você pode usá-lo em sua interface de linha de comando ou como um pacote em um script Python.

Para usá-lo na linha de comando, você usa o comando instaloader. Por exemplo, para exibir informações de ajuda, insira o seguinte comando em seu terminal:

instaloader --help

Para baixar a foto do perfil de um usuário, digite o comando com uma tag –profile, seguida do nome de usuário. Igual a:

instaloader --profile <USERNAME OF THE PROFILE>

Mas para que este comando funcione, você precisa fazer login primeiro. Para isso, você passa na opção de login assim:

instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>

o que baixar

Com o Instaloader, você pode baixar diferentes mídias. Este extrato da página do manual mostra todas as coisas diferentes que você pode baixar:

  profile               Download profile. If an already-downloaded profile has been renamed, Instaloader automatically finds it by its unique
                        ID and renames the folder likewise.
  @profile              Download all followees of profile. Requires --login. Consider using :feed rather than @yourself.
  "#hashtag"            Download #hashtag.
  %location_id          Download %location_id. Requires --login.
  :feed                 Download pictures from your feed. Requires --login.
  :stories              Download the stories of your followees. Requires --login.
  :saved                Download the posts that you marked as saved. Requires --login.
  -- -shortcode         Download the post with the given shortcode
  filename.json[.xz]    Re-Download the given object.
  +args.txt             Read targets (and options) from given textfile.

Para baixar as postagens de um determinado usuário, você digitaria o comando:

instaloader --login <YOUR USERNAME> <TARGET USERNAME>

Nesse caso, seu nome de usuário é o nome de usuário da sua conta autenticada do Instagram; o nome de usuário de destino é o perfil cujas postagens você deseja baixar.

  Como excluir o histórico de chamadas do Instagram

Para baixar postagens dos seguidores de um perfil, você digitaria o comando:

instaloader --login <YOUR USERNAME> @<TARGET USERNAME>

Observe que a diferença entre este comando e o anterior é o @ antes do nome de usuário de destino.

Uma alternativa para usar a interface de linha de comando do Instaloader é usá-la como um pacote Python. O pacote está bem documentado aqui.

Com o Instaloader, você pode baixar diferentes arquivos de mídia. No entanto, se você quiser extrair metadados, como a página de biografia de um usuário, o Instaloader sozinho não seria suficiente. Com o próximo método, você escreverá um script Python para extrair os dados de um perfil de usuário.

Escrevendo um script Python para baixar dados do Instagram

Visão geral

Neste método, escreveremos um script simples para baixar os dados do Instagram em Python. Esse método depende do uso de uma API JSON do Instagram relativamente desconhecida para extrair dados de perfis públicos.

  Como marcar mensagens não lidas no Instagram

A maneira como essa API funciona é se você anexar a consulta __a=1&__d=1 ao final da URL do seu perfil, o Instagram responderá com dados JSON sobre o perfil.

Por exemplo, meu nome de usuário é 0xanesu. Como resultado, se eu fizer uma solicitação para https://instagram.com/instagram/?__a=1&__d=1, receberei dados JSON sobre meu perfil como resposta.

Escrevendo o roteiro

Para fazer a solicitação em Python, usaremos o módulo de solicitações do Python. No entanto, você também pode usar pycURL, urllib ou qualquer outra biblioteca cliente de sua preferência para fazer solicitações HTTP. Para começar, instale o módulo request usando pip.

pip install requests

Depois de instalado, abra um arquivo para escrever seu script e importe a função get do módulo de solicitações. Além disso, importe também a função de cargas de json. Isso será usado para analisar a resposta JSON.

from requests import get
from json import loads

Depois de importar os dados, crie uma variável que armazene a URL do seu perfil do Instagram.

url="https://instagram.com/<YOUR USERNAME HERE>"

Conforme mencionado anteriormente, para extrair dados do Instagram de um perfil, você precisa adicionar os parâmetros de consulta __a=1 e __d=1. Para defini-los, criamos um objeto de dicionário com os parâmetros.

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

Para autorizar as solicitações que fazemos, o Instagram exige um ID de sessão. Mais tarde, mostrarei como obter seu ID de sessão. Por enquanto, apenas coloque um valor de espaço reservado que você substituirá mais tarde.

cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }

Em seguida, defina uma função que será executada quando a solicitação for bem-sucedida.

def on_success(response):
    profile_data_json = response.text
    parsed_data = loads(profile_data_json)
    
    print('User fullname:', parsed_data['graphql']['user']['full_name'])
    print('User bio:', parsed_data['graphql']['user']['biography'])

A função que defini receberá o objeto de resposta, extrairá o JSON do corpo da resposta e, em seguida, analisará o JSON em um objeto. Depois disso, estou extraindo apenas o nome completo e a biografia do perfil.

  Como alterar sua senha do Instagram se você esqueceu

A seguir, defina a função que será executada caso haja algum erro.

def on_error(response):
    # Printing the error if something went wrong
    print('Something went wrong')
    print('Error Code:', response.status_code)
    print('Reason:', response.reason)

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

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

Por fim, verificamos o código de status do erro. Se o status for 200, chamamos a função on_success. Caso contrário, apenas chamamos a função on_error.

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

Neste ponto, terminamos de escrever o código. O que resta é obter o ID da sessão. Para obter o ID da sessão, abra seu Google Chrome e abra o Instagram na Web. Certifique-se de estar logado e abra o Dev Tools usando Ctrl + Shift + I ou Cmd + Shift + I.

Com as ferramentas de desenvolvimento abertas, abra a guia Aplicativo.

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

Depois disso, copie o valor do cookie sessionid da lista de cookies que serão listados no painel Dev Tools.

Depois de copiar o ID da sessão, cole-o no script e execute-o. No meu caso, usando o Instagram como nome de usuário (https://instgram.com/instagram?__a=1&__d=1), esta é a saída.

E assim, podemos baixar dinamicamente os dados do perfil. Há muito mais dados retornados da API JSON. Esta é a saída quando você imprime tudo:

E é assim que você extrai dados e postagens dos perfis do Instagram.

Palavras Finais

Neste artigo, passamos por como baixar postagens e mídia usando o Instaloader. Em seguida, escrevemos um script personalizado para extrair dados JSON de perfil que inclui muito mais do que apenas o conteúdo de mídia. Se você gostou deste projeto, talvez queira conferir nosso post sobre o Python Timeit to Time Your Code.

Se você estiver interessado em aproveitar ao máximo sua experiência no Instagram, confira nossa postagem no Qoob Stories: uma análise detalhada no downloader do Instagram.