Cómo hacer un bot para Instagram con Python

Instagram basa su éxito, al igual que la mayoría de las redes sociales, en conseguir visibilidad para que otras personas lean tus opiniones, vida o marca personal. Si estás leyendo este articulo puede ser por tres cosas.

  • Quieres conseguir likes y follows
  • Estás interesado en aprender un poco más de webscrapping
  • Pretendes comercializar estás líneas de código de alguna manera

Igual la tercera te parecerá rara, pero te sorprendería saber la cantidad de gente que me ha contactado intentando darle un par de vueltas de tuerca para vendérselo a terceros.

¿Cómo funcionan los bots para Instagram?

El primer paso antes de empezar a programar una aplicación de este estilo, es entender cómo funciona el flujo de forma natural, es decir, ¿cómo gana followers una persona normal?

La respuesta, aunque obvia es bastante complicada de aplicar, Constancia, dejando a un lado temas de SEO y posicionamiento etc… La clave reside en la constancia, subiendo contenidos, siguiendo a otras personas y haciendo likes, la interacción entre usuarios es la principal forma de crecimiento en estas redes sociales.

Por suerte, cómo somos programadores podemos replicar de forma más o menos sencilla este tipo de comportamientos y crear bots que hagan este tipo de acciones sin que nosotros tengamos que preocuparnos de nada más que de hacer nuestras fotos y subir nuestras imágenes.

A mejores criterios de búsqueda mejores serán los feedbacks que recibiremos. Por ponerte un ejemplo, imagínate que quieres vender ropa de mujer, el bot tiene que conseguirte interacciones con mujeres o perfiles que incluyan hastags como: #beauty, #belleza, #fashion. De esta forma intentaremos que nuestro público objetivo y que comparte intereses, noten nuestro perfil, lo siga y empiece a interactuar con nuestras publicaciones.

Ahora bien. ¿cómo podemos simular este tipo de interacciones? Usar la API de Instagram no parece una opción, en primer lugar, porque está bastante limitada y en segundo, Instagram no está demasiado conforme con que automatices este tipo de acciones, ya que le quitas a la plataforma su movimiento orgánico y lo transformas en artificial.

La automatización del navegador y la tecnología que utilizará nuestro bot nos permite para realizar lo siguiente

  • Configuramos nuestras credenciales de acceso
  • Establecemos los criterios sobre los que queremos que actúe nuestro bot
  • El bot abrirá el navegador, escribirá en la barra de navegación https://instagram.com y empezará la magia

Automatizamos el navegador

Para la primera versión de este bot vamos a utilizar Selenium, que es la herramienta que utiliza InstaPy en sus entrañas.

Vamos a lo básico, primero vamos a Instalar Selenium, me he tomado de hacer una traducción de la página oficial por si tienes problemas con el inglés, pero es probable que no siempre esté actualizada.

Un punto importante de la instalación es que uses Firefox WebDriver, no es que tenga una preferencia por ningún navegador en concreto, pero es mucho más sencillo de gestionar el conector que nos va a permitir interactuar con el navegador.

Vamos a empezar con lo básico

from time import sleep
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('https://www.instagram.com')
sleep(5)
browser.close()

SI ejecutas el código verás que se te abre Firefox y te dirige directamente a la página principal de Instagram. Te dejo explicado línea a línea el fragmento de código

  • Líneas 1 y 2 importamos webdriver y sleep
  • Línea 4 Iniciamos el driver para crear una instancia de Firefox e interactuar con él
  • Línea 5 Le indicamos a Firefox que cargue la página https://www.instagram.com
  • Línea 6 sleep nos permitirá hacer que el código se espere una cantidad de segundos antes de continuar ejecutandose
  • Línea 7 Cerrará la instancia del navegador

Esto es lo más parecido a un Hola mundo que se puede hacer con Selenium. Una pequeña obviedad, pero muy importante a la hora de hacer un bot de este estilo, es, conocer el flujo de acciones que hacemos al navegar por una página web.

En el caso de Instagram, el flujo que seguimos es:

  1. Entrar en https://www.instagram.com
  2. Clickar en el botón de login
  3. Introducir las credenciales
  4. Pulsar enter o clickar en login

Los primeros pasos ya los tenemos controlados en el bloque de código anterior, vamos a añadir unas cuantas líneas para añadir este flujo

from time import sleep
from selenium import webdriver

username = 'username'
password = 'password'

browser = webdriver.Firefox()
browser.implicitly_wait(5)

browser.get('https://www.instagram.com/')

username_input = browser.find_element_by_css_selector("input[name='username']")
password_input = browser.find_element_by_css_selector("input[name='password']")

username_input.send_keys(username)
password_input.send_keys(password)

login_button = browser.find_element_by_xpath("//button[@type='submit']")
login_button.click()

sleep(5)

browser.close()
  • Línea 4 y 5 variables donde almacenaremos el usuario y la contraseña
  • Línea 8 Con esto lo que haremos es que, en caso de no encontrar un elemento, Selenium esperará 5 segundos antes de volver a intentar acceder a el.
  • Líneas 12 y 13 Guardamos en una variable el input dónde tendremos que insertar el usuario y la contraseña
  • Líneas 15 y 16 Enviamos los valores respectivos usando las variables dónde tenemos almacenados el usuario y la contraseña
  • Línea 18 Almacenamos el botón para hacer login
  • Línea 19 Pulsamos el botón y nos conectamos

Al ejecutar el script veremos que hemos tenido un principio bastante bueno para nuestro pequeño y por el momento inútil bot.

Si continuáramos añadiendo lógica sobre esta base, podríamos fácilmente obtener imagenes, textos, buscar por tags, y escribir comentarios automáticamente.

La buena noticia para nosotros es que existe InstaPy, una librería que nos va a ayudar manejando todos estos pasos de manera más sencilla, aunque antes de saltar a la librería vamos a familiarizarnos un poco con el patrón de objetos de Instagram.

¿Cómo hacer un bot para instagram con InstaPy?

En primer lugar tenemos que instalar la librería de InstaPy, para ello vamos a aprovechar la herramienta pip

pip install instapy

Para que te hagas a la idea de cómo llega a simplificar el trabajo usar esta librería, vamos a reescribir el código que hemos hecho antes

from instapy import InstaPy

username = 'username'
password = 'password'
InstaPy(username=username, password=password).login()

Aunque InstaPy a primera vista hace lo mismo que nuestro código anterior, podemos ver que además añade algunos comportamientos extra.

InstaPy entre otras cosas, verificará la conexión de internet y el estado de los servidores de Instagram, puedes ver estos registros en la consola

INFO [2021-07-08 15:46:28] [oshytech]  Session started!
INFO [2021-07-08 15:46:28] [oshytech]  -- Connection Checklist [1/2] (Internet Connection Status)
INFO [2021-07-08 15:46:29] [oshytech]  - Internet Connection Status: ok
INFO [2021-07-08 15:46:29] [oshytech]  - Current IP is "37.223.200.52" and it's from "Spain/ES"
INFO [2021-07-08 15:46:29] [oshytech]  -- Connection Checklist [2/2] (Hide Selenium Extension)
INFO [2021-07-08 15:46:29] [oshytech]  - window.navigator.webdriver response: None
INFO [2021-07-08 15:46:29] [oshytech]  - Hide Selenium Extension: ok
INFO [2021-07-08 15:46:33] [oshytech]  - Cookie file not found, creating cookie...

Si te parece, vamos a avanzar un poco más rápido y de una vamos a ver todo lo que te puede interesar para empezar a programar tu bot

from instapy import InstaPy

username = "username"
password = "password"

session = InstaPy(username=username, password=password)
session.login()
session.like_by_tags(["tecnología", "programación", "programadores"], amount=30)
session.set_dont_like(["desnudo", "nsfw","naked", "oferta", "concurso"])
session.set_do_follow(True, percentage=50)
session.set_do_comment(True, percentage=50)
session.set_comments(["¡Qué interesante!", "Guay!!", "¡increíble!"])
session.end()
  • Línea 6 Preparamos las credenciales para poder conectarnos
  • Línea 7 Iniciamos sesión en la plataforma
  • Líneas 8 Preparamos la lista de Tags a la que nos interesa hacer likes y especificamos la cantidad de imágenes de cada tag
  • Líneas 9 Añadimos una lista de Tags que no queremos que aparezcan en las imágenes
  • Línea 10 Preparamos la configuración para que el 50% de las veces siga al propietario de la imagen
  • Línea 11 Preparamos la configuración para que el 50% de las veces comente la imagen
  • Línea 12 Definimos los comentarios que queremos ir añadiendo
  • Línea 13 Cerramos la sesión

Leave a Reply