Extracción de datos de Twitter con Python (sin consumir la API)
La popular red social Twitter es usada por millones de usuarios diariamente y nos ofrece una ingente cantidad de datos que podemos recopilar con las herramientas adecuadas. Estos datos y mensajes de Twitter son de gran valor y podrían ser utilizados, por ejemplo, por una empresa que quiera estar al tanto de lo opinan los clientes sobre su marca.
En esta publicación os enseñaremos como poder extraer datos de esta red social en Python mediante la librería Twint. De esta forma, podremos obtener facilmente los últimos tweets que contengan cierta palabra o que pertenezcan a un determinado usuario y aplicar varios filtros a nuestra extracción.
¿Por que elegimos la librería Twint frente al resto de opciones disponibles en Python para la extracción de datos de Twitter? La razón principal es que no tenemos que utilizar la API de twitter, por lo que tampoco será necesario tener que registrarnos para obtener los datos. Esto significa que tampoco tenemos que preocupanos por los límites establecidos para la API de Twitter. Además, Twint es una librería rápida y muy fácil de utilizar.
Instalación de Twint
Lo primero de todo será instalar la librería Twint con pip
y para ello no hay más que ejecutar el comando:
pip3 install twint
Además, si vas a ejecutar la búsqueda de tweets en un Jupyter Notebook, es muy posible que te aparezca es siguiente mensaje de error:
RuntimeError: This event loop is already running
Una solución común para este problema consiste en insertar las siguientes dos líneas en nuestro código:
import nest_asyncio nest_asyncio.apply()
Configuración de Twint para extraer tweets sobre la Eurocopa
Para esta primera prueba vamos a recopilar y almacenar en un fichero JSON los últimos 10000 tweets que hablen sobre la Eurocopa. Primeramente, importamos la librería necesaria:
import twint
Es hora de configurar y aplicar los filtros deseados a nuestra búsqueda de tweets y para ello simplemente creamos un objeto Config
, que nos proporciona Twint, al cúal le vamos asignado alguna de las siguientes configuraciones:
- Search: podemos usar este ajuste para extraer unicamente los tweets que contengan cierta palabra.
- Username: para extraer los tweets de un usuario (no incluye los retweets pero sí las respuestas).
- Lang: idioma de los tweets. Twint no es infalible y es posible que os encontréis tweets en otros idiomas a pesar de haber utilizado este filtro. Sin embargo, podremos deshacernos facilmente de estos tweets de idiomas no deseados posteriormente.
- Filter_retweets: para excluir los retweets de los resultados.
- Limit: con este ajuste le indicamos el número máximo de tweets a recopilar.
- Output: dirección del fichero donde queremos alamacenar los datos.
- Since: para extraer los tweets que se han publicado desde la fecha que consideremos.
- Until: para recopilar los tweets que se han publicado hasta la fecha que queramos.
- Min_likes: número mínimo de likes que deben tener los tweets extraidos.
- Min_replies: número mínimo de respuestas.
- Min_retweets: número mínimo de retweets.
- Pandas: usaremos este ajuste si queremos almacenar los resultados en un
Dataframe
de la libería Pandas.
Podéis ver la lista completa de opciones de configuración aquí.
En el siguiente ejemplo práctico, podeís ver un ejemplo de como configurar Twint para recopilar y almacenar en un fichero JSON los último 10000 tweets de este año en español que contengan el término "eurocopa"
y que tengan más de 5 likes, retweets y respuestas:
import twint import nest_asyncio nest_asyncio.apply() c = twint.Config() c.Search = "eurocopa" c.Lang = "es" c.Filter_retweets = True c.Limit = 10000 c.Since = '2021-01-01' c.Output = "./tweets.json" c.Min_likes = 5 c.Min_replies = 5 c.Min_retweets = 5
Fácil. ¿verdad? Para poner en marcha el rastreo simplemente debemos ejecutar el siguiente comando:
twint.run.Search(c)
Una vez finalizado la recopilación de tweets, veremos los resultados en el fichero tweets.json
. Entre la información extraída, tendremos el texto del mensaje, la fecha de publicación y el nombre del autor.
En el siguiente código tenéis un ejemplo de como recopilar y almacenar en un Dataframe
de Pandas los tweets publicados por el perfil de Twitter de Elon Musk:
c = twint.Config() c.Username = "elonmusk" c.Lang = "en" c.Filter_retweets = True c.Limit = 10000 c.Pandas = True
Una vez finalizada la extracción, podemos acceder al Dataframe
y asignarlo a una variable de la siguiente manera:
tweets = twint.storage.panda.Tweets_df
Este ha sido todo por hoy. En esta ocasión hemos aprendido a extraer mensajes y datos de la red social Twitter con la librería Twint de manera muy sencilla y sin hacer uso de la API. Más adelante os mostraremos como podeís el contenido de estos tweets, por ejemplo, para el análisis de sentimiento. ¡Hasta la próxima!