Cómo descargar datos de Instagram usando Python

Instagram es una de las redes sociales más grandes del mundo, con alrededor de 1210 millones de usuarios a partir de 2021, o alrededor del 28% de Internet, según Statista.

Este artículo es una guía sobre cómo descargar mediante programación datos de Instagram desde un perfil usando Python en dos métodos. El primer método es descargar medios usando Instaloader. El segundo es escribir un script de Python simple para obtener datos JSON sobre el perfil.

Es importante tener en cuenta que el raspado de datos puede violar los términos de servicio de Instagram y le recomendamos que solo descargue datos de su cuenta.

Usando Instaloader

Instaloader es un paquete de Python para descargar medios de Instagram. Es increíblemente fácil de usar y hace que la extracción y descarga de datos sea rápida y fácil. Para comenzar a usar Instaloader, primero, instálelo usando pip:

pip install instaloader

Una vez instalado, puede usarlo desde su interfaz de línea de comandos o como un paquete en un script de Python.

Para usarlo desde la línea de comandos, usa el comando instaloader. Por ejemplo, para mostrar información de ayuda, ingrese el siguiente comando en su terminal:

instaloader --help

Para descargar la imagen de perfil de un usuario, ingrese el comando con una etiqueta de perfil, seguido del nombre de usuario. Al igual que:

instaloader --profile <USERNAME OF THE PROFILE>

Pero para que este comando funcione, primero debe iniciar sesión. Para hacerlo, pasa la opción de inicio de sesión, así:

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

Qué descargar

Con Instaloader, puede descargar diferentes medios. Este extracto de la página del manual le muestra todas las cosas diferentes que puede descargar:

  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 descargar las publicaciones de un usuario en particular, debe ingresar el comando:

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

En este caso, su nombre de usuario es el nombre de usuario de su cuenta de Instagram autenticada; el nombre de usuario de destino es el perfil cuyas publicaciones desea descargar.

  Cómo eliminar sugerencias en Instagram

Para descargar publicaciones de los seguidores de un perfil, ingresaría el comando:

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

Tenga en cuenta que la diferencia entre este comando y el anterior es la @ antes del nombre de usuario de destino.

Una alternativa al uso de la interfaz de línea de comandos de Instaloader es usarlo como un paquete de Python. El paquete está bien documentado aquí.

Con Instaloader, puede descargar diferentes archivos multimedia. Sin embargo, si quisiera extraer metadatos como la página de biografía de un usuario, Instaloader por sí solo no sería suficiente. Con el siguiente método, escribirá una secuencia de comandos de Python para extraer los datos de un perfil de usuario.

Escribir un script de Python para descargar datos de Instagram

Descripción general

En este método, escribiremos un script simple para descargar datos de Instagram en Python. Este método se basa en el uso de una API JSON de Instagram relativamente desconocida para extraer datos de perfiles públicos.

La forma en que funciona esta API es que si agrega la consulta __a=1&__d=1 al final de la URL de su perfil, Instagram responde con datos JSON sobre el perfil.

  Cómo iniciar sesión en Instagram sin número de teléfono y correo electrónico

Por ejemplo, mi nombre de usuario es 0xanesu. Como resultado, si hago una solicitud a https://instagram.com/instagram/?__a=1&__d=1, obtendré datos JSON sobre mi perfil como respuesta.

escribir el guion

Para realizar la solicitud en Python, vamos a utilizar el módulo de solicitudes de Python. Sin embargo, también puede usar pycURL, urllib o cualquier otra biblioteca cliente que prefiera usar para realizar solicitudes HTTP. Para comenzar, instale el módulo de solicitudes usando pip.

pip install requests

Una vez que se haya instalado, abra un archivo para escribir su script e importe la función de obtención desde el módulo de solicitudes. Además, también importe la función de cargas desde json. Esto se usará para analizar la respuesta JSON.

from requests import get
from json import loads

Una vez que haya importado los datos, cree una variable que almacene la URL en su perfil de Instagram.

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

Como se mencionó anteriormente, para extraer datos de Instagram de un perfil, debe agregar los parámetros de consulta __a=1 y __d=1. Para definirlos, creamos un objeto de diccionario con los parámetros.

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

Para autorizar las solicitudes que hacemos, Instagram requiere una ID de sesión. Más adelante, le mostraré cómo obtener su ID de sesión. Por ahora, simplemente coloque un valor de marcador de posición que sustituirá más adelante.

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

A continuación, defina una función que se ejecutará cuando la solicitud sea exitosa.

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'])

La función que he definido tomará el objeto de respuesta, extraerá el JSON del cuerpo de la respuesta y luego analizará el JSON en un objeto. Después de esto, solo estoy extrayendo el nombre completo y la biografía del perfil.

A continuación, defina la función que se ejecutará si hay un error.

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)

Luego llamamos a la función get para realizar la solicitud, pasando la URL, los parámetros y las cookies como argumentos.

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

Luego, por último, verificamos el código de estado del error. Si el estado es 200, llamamos a la función on_success. De lo contrario, simplemente llamamos a la función on_error.

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

En este punto, hemos terminado de escribir el código. Lo que queda es obtener el sessionid. Para obtener la identificación de la sesión, abra su Google Chrome y abra Instagram en la Web. Asegúrese de haber iniciado sesión, luego abra Dev Tools usando Ctrl + Shift + I o Cmd + Shift + I.

  ¿Por qué está bloqueado de su cuenta de Instagram?

Con las Herramientas de desarrollo abiertas, abra la pestaña Aplicación.

Luego haga clic en el submenú Cookies para ver las Cookies utilizadas por Instagram.

Después de lo cual, copie el valor de la cookie sessionid de la lista de cookies que aparecerán en el panel Herramientas de desarrollo.

Una vez que copie la identificación de la sesión, péguela en el script y ejecútelo. En mi caso, usando Instagram como nombre de usuario (https://instgram.com/instagram?__a=1&__d=1), este es el resultado.

Y así, podemos descargar datos de perfil de forma dinámica. Hay muchos más datos que se devuelven desde la API de JSON. Este es el resultado cuando lo imprimes todo:

Y así es como extraes datos y publicaciones de los perfiles de Instagram.

Ultimas palabras

En este artículo, analizamos cómo descargar publicaciones y medios usando Instaloader. Luego escribimos un script personalizado para extraer los datos JSON del perfil que incluye mucho más que solo el contenido multimedia. Si disfrutó de este proyecto, es posible que desee consultar nuestra publicación sobre Python Timeit to Time Your Code.

Si está interesado en sacar más provecho de su experiencia de Instagram, consulte nuestra publicación sobre Qoob Stories: una revisión detallada del descargador de Instagram.