Ejemplo archivado de Twint: almacenar tweets en un documento .csv.
En este proyecto vamos a ampliar nuestra investigación del Big Data y las redes sociales. Volvemos a volver a utilizar Twitter como fuente de información pero, en esta ocasión, este contenido debe leerse ya como un ejercicio archivado de captura y limpieza de datos sociales.
Nota actual sobre el acceso a Twitter/X
Twint fue util para aprender como un scraper podia exportar publicaciones publicas a CSV, pero el ecosistema de Twitter/X ha cambiado mucho. Los recolectores no oficiales pueden dejar de funcionar cuando cambian el frontend, los limites o las condiciones de uso. Para investigacion o produccion actual conviene partir de la API oficial de X, proveedores aprobados o datasets publicos, y conservar este script como contexto historico sobre captura y limpieza de datos.
Para quien no lo conozca, Twitter permite el envío de mensajes en texto plano de corta longitud, con un máximo de 280 caracteres. Estos mensajes, llamados tweets, se muestran en la página principal del usuario y pueden ser capturados a través de una API proporcionada por la propia red social.
La version original del ejemplo consistia en implementar un script en Python que almacenaba tweets sobre una tematica, un idioma y un rango de fechas. La idea sigue siendo util para explicar como se construye un dataset social, pero antes de ejecutarla hoy hay que revisar las reglas actuales de acceso de Twitter/X.
El código completo lo puedes descargar en la siguiente url https://github.com/al118345/Tweepy_Example/blob/master/twint_ejemplo.py
Instalación de la librería.
Para utilizar este script, en su momento use Python 3.8 con la librería Twint https://github.com/twintproject/twint . Exactamente, vamos a instalar dicha librería mediante un pip install -r requirements.txt del repositorio que contiene las siguientes librerías.Análisis del script.
Como podéis observar, el código es muy fácil de entender. El objetivo de esta implementación es buscar todos los tweets en el idioma español (es), que contengan la palabra spain y almacenar los 100 últimos tweets sobre esta temática en el fichero spain.csv
Dicho esto y antes de empezar con las partes más importantes del código, voy a mostrar en la siguientes tabla que información obtenida
| id | conversation_id | created_at | date | time | timezone | user_id | username | name | place | tweet | language | mentions | urls | photos | replies_count | retweets_count | likes_count | hashtags | cashtags | link | retweet | quote_url | video | thumbnail | near | geo | source | user_rt_id | user_rt | retweet_id | reply_to | retweet_date | translate | trans_src | trans_dest |
| 1594720567554281472 | 1594720567554281472 | 2022-11-21 16:53:06 CET | 2022-11-21 | 16:53:06 | +0100 | 185115193 | adabagcompany | Cengiz Adabag | Spain Holiday Warning To Tourists Over Rise In Simple Money Scam https://t.co/LKsLhKfsTl | en | [] | ['https://canadanews.fr/spain-holiday-warning-to-tourists-over-rise-in-simple-money-scam/'] | [] | 0 | 0 | 0 | [] | [] | https://twitter.com/adabagcompany/status/1594720567554281472 | False | 0 | [] | |||||||||||||
| 1594720543592308738 | 1594108325117202432 | 2022-11-21 16:53:00 CET | 2022-11-21 | 16:53:00 | +0100 | 1211036344840904709 | wihanski | Joe Wihanski | @forcacatalunyaa @15ucl @theMadridZone @marca Barcelona players certainly contributed a lot. I have no problem saying that. Now take your own advice. Would Spain have won had Casillas not been there? | en | [] | [] | [] | 0 | 0 | 0 | [] | [] | https://twitter.com/wihanski/status/1594720543592308738 | False | 0 | "[{'screen_name': 'forcacatalunyaa', 'name': 'Ахмед', 'id': '1576198744239968256'}, {'screen_name': '15ucl', 'name': '.', 'id': '1268076732453720065'}, {'screen_name': 'theMadridZone', 'name': 'Madrid Zone', 'id': '1277236151343087617'}, {'screen_name': 'marca', 'name': 'MARCA', 'id': '15095537'}]" | |||||||||||||
| 1594720516312821765 | 1594712466340315137 | 2022-11-21 16:52:54 CET | 2022-11-21 | 16:52:54 | +0100 | 1591115790085914636 | elreycharmeleon | elreycharmeleon | @RahulAgain_ @nocontextfooty Mexico and Ecuador top nations? No netherlands? No spain? No germany? Wtf | en | [] | [] | [] | 0 | 0 | 0 | [] | [] | https://twitter.com/elreycharmeleon/status/1594720516312821765 | False | 0 | "[{'screen_name': 'RahulAgain_', 'name': '`', 'id': '1252584251553439749'}, {'screen_name': 'nocontextfooty', 'name': 'Out Of Context Football', 'id': '1111976778065723393'}]" | |||||||||||||
| 1594720510063087618 | 1594361080322707457 | 2022-11-21 16:52:52 CET | 2022-11-21 | 16:52:52 | +0100 | 1064863268731260929 | dara18spain | 🆘CANARIAS🆘 | @ramonlobo No te dejes lo mejor. ¡Y volvería Franco! https://t.co/nL2BeW7iWf | es | [] | [] | ['https://pbs.twimg.com/tweet_video_thumb/FiGV160XkAE5MAd.jpg'] | 0 | 0 | 0 | [] | [] | https://twitter.com/Dara18Spain/status/1594720510063087618 | False | 1 | https://pbs.twimg.com/tweet_video_thumb/FiGV160XkAE5MAd.jpg | "[{'screen_name': 'ramonlobo', 'name': 'Ramón Lobo 🇺🇦🇪🇺🇪🇸🇫🇷🇬🇧🇱🇺🇻🇪', 'id': '19292516'}]" |
Cómo se puede comprobar, en un tweet se almacena en un fichero .csv con toda la información útil que te pueda interesar cómo puede ser la fecha, el hashtag , usuario , geolocalización, etc. Hay campos vacíos porqué puede que no todos los campos están disponibles, es decir, no siempre tienes disponibles información cómo la geolocalización
Cómo también habrás visto en el código, puedes configurar twint.Config() con los siguientes parámetros:
- Lang = Especificamos el idioma del tweet que deseamos buscar, por ejemplo es 'español' o en inglés.
- Limit = Limite la cantidad de tweets que se desea obtener
- Since = Fecha en la quieres que empiece a recopilar tweets, por ejemplo "2020–01–17 15:51:31"
- Until = Fecha máxima de publicación de los tweets que deseamos obtener, es decir, el momento en que pararemos de almacenar tweets "2020–01–17 17:51:31"
- Store_json = Por si deseas almacenar la info en json
- Ouput = Nombre del fichero dónde se almacenarán los tweets.
Limitaciones actuales y uso responsable
Este artículo debe leerse como un ejemplo educativo. Twitter, ahora X, ha cambiado varias veces sus políticas de acceso, y las herramientas no oficiales de scraping pueden dejar de funcionar cuando la plataforma modifica su frontend, sus límites de uso o sus condiciones legales. Para trabajos en producción suelen ser más estables la API oficial, proveedores de datos autorizados o datasets ya publicados.
El CSV tampoco representa de forma neutral a toda la sociedad: es una muestra de conversación pública. Antes de extraer conclusiones conviene eliminar duplicados, documentar el rango de fechas, guardar la consulta utilizada, revisar el idioma detectado y tratar con cuidado los datos personales. Un notebook reproducible debe explicar cómo se recolectaron los tweets y por qué la muestra es válida para la pregunta de investigación.
Como lectura relacionada puedes consultar tweets geolocalizados con Tweepy y el contexto de datos sociales del proyecto coronavirus.
Explicación en Youtube
Ampliación de información.
Si quieres ampliar informacion sobre tareas automatizadas o recoleccion de tweets, revisa tambien este enlace para entender como funcionaba la API de Twitter en los ejemplos originales https://1938.com.es/app-coronavirus-twitter o si prefieres un vídeo tutorial visita la siguiente url: https://www.youtube.com/watch?v=vCFioQizM4w