Peru2020Scrapper es un programa que extrae tweets relacionados a las Elecciones Congresales Extraordinarias 2020 del Peru cada 30 minutos y pone los resultados a disposición de la comunidad en las siguientes presentaciones:
- Dataframes como CSV (casos de uso: pandas con python, cualquier programa que acepte CSVs)
- Pequeña API REST (casos de uso: uso directo en clientes, ejemplo y su repositorio https://github.com/minskylab/peru2020)
El programa tiene dos hilos importantes, el primero se encarga de gestionar el API HTTP que esta gestionada por Flask, el segundo es el hilo encargado de ejecutar cada 30 minutos la rutina de scraping y la rutina para calcular la frecuencia de palabras del último resultado del scraping. Finalmente, el hilo principal (Main Thread) se encarga de ser el punto de inicio del programa.
Veo necesario agradecer al proyecto Twint. Es gracias a este framework que se puede realizar un increíble scraping a Twetter. Tambíen destaco otros proyecto relacionados: twitterscraper de taspinar y twitter-scraper de bisguzar.
Abajo puedes ver un dibujo a mano alzada de la actual arquitectura del programa.
Para listar todos los dataframes disponibles usa https://peru2020scrapper.minsky.cc/dataframes
Ejemplo
$ curl https://peru2020scrapper.minsky.cc/dataframes
{
"data": [
"/dataframe/23-01-2020_16:46.csv",
"/dataframe/23-01-2020_08:57.csv",
"/dataframe/23-01-2020_11:47.csv",
...
"/dataframe/23-01-2020_07:20.csv",
"/dataframe/23-01-2020_19:07.csv",
"/dataframe/23-01-2020_10:05.csv"
]
}
Si quieres conocer el último dataframe scrapped https://peru2020scrapper.minsky.cc/last-dataframe.
Ejemplo
$ curl https://peru2020scrapper.minsky.cc/last-dataframe
{
"data": [
"/dataframe/23-01-2020_16:46.csv"
]
}
Una vez que tengas el nombre del dataframe a usar, para descargar el csv solo usa
https://peru2020scrapper.minsky.cc/dataframe/<dataframename.csv>
Ejemplo
$ curl https://peru2020scrapper.minsky.cc/dataframe/23-01-2020_16:46.csv
Uso con python y pandas
import pandas as pd
df = pd.read_csv("https://peru2020scrapper.minsky.cc/dataframe/23-01-2020_16:46.csv")
print(df["tweet"])
Output
0 A puertas de la elección del nuevo @congresope...
1 #Elecciones2020: #LeySeca inicia este sábado a...
2 Elecciones 2020: Multarán a quienes no cumplan...
3 Elecciones 2020: Multarán a quienes no cumplan...
4 Elecciones 2020: Multarán a quienes no cumplan...
...
3207 #ELECCIONES2020 | Seguimos con nuestro \nBLOQU...
3208 Cómo te digo que repartir miles de volantes c...
3209 Mi abuelo era añrista, yo no lo soy. Mi madre ...
3210 #Lectura #BlogPolítico Qué es la ingeniería el...
3211 #Elecciones2020 🗳️\nUna propuesta legislativa ...
Name: tweet, Length: 3212, dtype: object
Todo suyo, intenten usar los algoritmos modernos de NLP y Sentiment Analisis para sacar insights de esto.
Peru2020Scrapper hace un conteo de frecuencia de las palabras de todos los tweets en el último dataframe scrapeado. El endpoint para acceder a estos resultados es https://peru2020scrapper.minsky.cc/freqs.
Ejemplo de uso
$ curl https://peru2020scrapper.minsky.cc/freqs
{
"data": [
{
"text": "candidatos",
"value": 347
},
{
"text": "congreso",
"value": 341
},
{
"text": "elecciones",
"value": 293
},
{
"text": "voto",
"value": 271
},
{
"text": "partido",
"value": 250
},
...
{
"text": "atenta",
"value": 2
},
{
"text": "logra",
"value": 2
}
]
}
Un uso directo de este endpoint se puede ver en https://peru2020.minsky.cc/ que realiza una nube de palabaras con los terminos más usados en los tweets sobre las elecciones congresales. Abajo puedes ver una captura de pantalla de este programa.