Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Instagram es una de las redes sociales más grandes del mundo, con cerca de 1.210 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 los datos de Instagram de un perfil utilizando Python en dos métodos. El primer método consiste en descargar medios utilizando Instaloader. El segundo consiste en escribir un sencillo script en Python para obtener datos JSON sobre el perfil.

Es importante tener en cuenta que el scraping de datos puede violar los términos de servicio de Instagram, y le recomendamos que sólo descargue datos de su cuenta.

Uso de Instaloader

Instaloader es un paquete de Python para descargar medios de Instagram. Es increíblemente fácil de usar y hace que extraer y descargar datos sea rápido y sencillo. Para empezar a utilizar Instaloader, primero, instálelo utilizando pip:

pip install instaloader

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

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

instaloader --help

Para descargar la imagen de perfil de un usuario, introduzca el comando con la etiqueta --profile, seguida del nombre de usuario. Así

instaloader --profile <nombre de usuario del perfil&gt

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

instaloader --login <TU NOMBRE DE USUARIO> --profile <USUARIO DEL PERFIL&gt

Qué descargar

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

 perfil Descargar perfil. Si un perfil ya descargado ha sido renombrado, Instaloader lo encuentra automáticamente por su ID único
 y renombra la carpeta de la misma manera.
 @perfil Descargar todos los seguidores del perfil. Requiere --login. Considere el uso de :feed en lugar de @yourself.
 "#hashtag Descargar #hashtag.
 %location_id Descargar %location_id. Requiere --login.
:feed Descargue imágenes de su feed. Requiere --login.
:stories Descarga las historias de tus seguidores. Requiere --login.
:saved Descargue las publicaciones que haya marcado como guardadas. Requiere --login.
 --shortcode Descarga la entrada con el shortcode dado.
 filename.json[.xz] Vuelve a descargar el objeto dado.
 args.txt Lee los objetivos (y opciones) del archivo de texto dado.

Para descargar los posts de un usuario concreto, introduzca el comando

instaloader --login <TU NOMBRE DE USUARIO> <NOMBRE DE USUARIO DEL OBJETIVO&gt

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.

Para descargar las publicaciones de los seguidores de un perfil, introduciría el comando

instaloader --login <TU NOMBRE DE USUARIO> @<NOMBRE DE USUARIO DE DESTINO&gt

Observe que la diferencia entre este comando y el anterior es la @ delante del nombre de usuario de destino.

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

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

Escribiendo un Script de Python para descargar datos de Instagram

Visión general

En este método, escribiremos un sencillo script 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 añade la consulta __a=1&__d=1 al final de la URL de su perfil, Instagram responde con datos JSON sobre el perfil.

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

Escribir el script

Para realizar la petición en Python, vamos a utilizar el módulo requests de Python. Sin embargo, también puede utilizar pycURL, urllib, o cualquier otra biblioteca cliente que prefiera utilizar para realizar peticiones HTTP. Para empezar, instale el módulo requests utilizando pip.

pip install requests

Una vez instalado, abra un archivo para escribir su script e importe la función get del módulo requests. Además, importe también la función loads de json. Esto se utilizará 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 de su perfil de Instagram.

url = 'https://instagram.com/<TU NOMBRE DE USUARIO AQUÍ>'

Como ya hemos mencionado, para extraer los datos de Instagram de un perfil, es necesario añadir los parámetros de consulta __a=1 y __d=1. Para definirlos, creamos un objeto diccionario con los parámetros.

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

Para autorizar las solicitudes que realizamos, Instagram requiere un identificador de sesión. Más adelante, le mostraré cómo obtener su identificador de sesión. Por ahora, sólo ponga un valor de marcador de posición que sustituirá más tarde.

cookies = { 'sessionid': '<AQUÍ SU ID DE SESIÓN>' }

A continuación, defina una función que se ejecutará cuando la solicitud tenga éxito.

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 parseará el JSON en un objeto. Después de esto, sólo extraeré el nombre completo y la biografía del perfil.

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

def on_error(respuesta):
   # Imprimir el error si algo ha ido mal
 print('Algo ha ido mal')
 print('Código de error:', response.status_code)
 print('Razón:', response.reason)

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

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

Por último, comprobamos el código de estado del error. Si el estado es 200, llamamos a la función on_success. Si no, llamamos a la función on_error.

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

Llegados a este punto, ya hemos terminado de escribir el código. Lo que queda es obtener el id de sesión. Para obtener el id de sesión, abra su Google Chrome y abra Instagram en la Web. Asegúrese de que ha iniciado sesión y, a continuación, abra Dev Tools utilizando Ctrl Mayús I o Cmd Mayús I.

Screenshot-from-2023-04-26-14-15-20

Con Dev Tools abierto, abra la pestaña Aplicación.

Screenshot-from-2023-04-26-14-17-41

A continuación, haga clic en el submenú Cookies para ver las Cookies utilizadas por Instagram.

Screenshot-from-2023-04-26-14-19-14

Tras lo cual, copie el valor de la cookie sessionid de la lista de cookies que aparecerá en el panel Dev Tools.

Una vez copiado el id de sesión, péguelo en el script y ejecútelo. En mi caso, utilizando Instagram como nombre de usuario (https://instgram.com/instagram?__a=1&__d=1), esta es la salida.

Screenshot-from-2023-04-27-08-40-59

Y así de sencillo, ya podemos descargar dinámicamente los datos del perfil. Hay muchos más datos que se devuelven desde la API JSON. Esta es la salida cuando se imprime todo:

Screenshot-from-2023-04-26-14-26-39

Y así es como se extraen los datos y las publicaciones de los perfiles de Instagram.

Palabras finales

En este artículo, hemos repasado cómo descargar posts y medios utilizando Instaloader. Luego escribimos un script personalizado para extraer datos JSON del perfil que incluye mucho más que sólo el contenido multimedia. Si le ha gustado este proyecto, puede que quiera echar un vistazo a nuestro post sobre el Python Timeit para cronometrar su código.

Si está interesado en sacar más partido a su experiencia en Instagram, eche un vistazo a nuestro post sobre Historias de Qoob: una revisión detallada sobre el descargador de Instagram.

  • Anesu Kafesu
    Autor
    Desarrollador web full stack y redactor técnico. Actualmente aprendiendo IA.
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder