Entrades Twint
Post
Cancel

Twint

Twint és una eina programada en Python per fer scraping de Twitter sense necessitat d’utilitzar la seva l’API.

Et permet extreure de Twitter perfils d’usuari, els seus tweets, buscar per paraules clau o hastags, obtenir emails o números de telèfon que s’hagin publicat als tweets i aconseguir fàcilment els Followers i Followings.

Informació

  • Dificultat d’instal·lació: fàcil
  • Dificultat d’ús: mitjana
  • Utilitat en investigació: útil en la fase d’adquisició
  • Coneixements previs: saber utilitzar una terminal

Característiques

  • Permet extreure tota la informació d’un usuari i els seus tweets
  • No requereix l’API de Twitter
  • No cal que t’autentiquis
  • No té limitacions a l’hora d’obtenir tweets
  • Pots fer-ho de manera anònima

Aplicació a les investigacions

És una eina molt bona per investigar perfils de Twitter, ja que no només es pot fer de manera anònima sinó que no hi ha limitacions imposades per l’API de Twitter. L’únic inconvenient és que no té interfície gràfica i per tant és necessari saber utilitzar una mica la terminal. No obstant això, el nivell d’ús no és gens elevat.

Hi ha formes diferents per executar l’eina. La primera és per terminal i la segona és utilitzar el paquet de Twint per Python i fer petits programes per automatitzar les cerques.

A continuació t’expliquem alguns exemples de cada mètode:

Comandes de terminal

Tot i haver-se d’executar a través de terminal, Twint és molt senzill d’utilitzar. Si el que vols és extreure informació bàsica, no cal ni que entenguis que fa cada un dels paràmetres, només has de substituir les paraules d’exemple per les que t’interessin.

A continuació pots veure els més importants (els pots combinar entre si):

Obtenir tots els tweets d’un usuari (pots afegir –stats per incloure el nombre de m’agrades, comentaris i retweets que té cada tweet):

1
twint -u USUARI

Per exemple, buscant l’usuari idelista pots obtenir tots els tweets ordenats dels més nous als més vells:

Obtenir tots els tweets d’un usuari que continguin una certa PARAULA:

1
twint -u USUARI -s PARAULA

Per exemple, l’usuari idelista i la paraula encinar, per buscar un jefazo d’Idealista:

Obtenir tots els tweets que continguin la PARAULA publicats a Twitter (Buscarà tweets de tot el món):

1
twint -s PARAULA

Per exemple, la paraula idelista. Pots veure com per una banda hi ha tweets que no fan referència als pisos, però per l’altra surten idealista Itàlia i Portugal:

Obtenir els tweets d’un usuari publicats abans d’un ANY en concret:

1
twint -u USUARI --year ANY

Per exemple, de l’usuari idelista, tots els tweets publicats abans del 2014:

Obtenir tots els tweets d’un usuari publicats a partir d’una DATA en concret:

1
twint -u USUARI --since DATA

Per exemple, de l’usuari idelista, tots els tweets publicats després del 20 de desembre del 2015:

Emmagatzemar tots els tweets d’un usuari en un ARXIU de text:

1
twint -u USUARI -o ARXIU.txt

Per exemple, emmagatzemar tots els tweets de l’usuari idelista a un arxiu anomenat idealista.txt:

Emmagatzemar tots els tweets d’un usuari en un ARXIU CSV:

1
twint -u USUARI -o ARXIU.csv --csv

Per exemple, emmagatzemar tots els tweets de l’usuari idelista a un arxiu anomenat idealista.csv. Aquest CSV el pots importar a un Excel per veure tota la informació distribuïda en columnes:

Emmagatzemar tots els tweets d’un usuari en format JSON:

1
twint -u USUARI -o ARXIU.json --json

Per exemple, emmagatzemar tots els tweets de l’usuari idelista a un arxiu anomenat idealista.json. Aquest format et pot anar bé per tractar totes les dades a través d’una eina pròpia:

Emmagatzemar tots els tweets d’un usuari en una base de dades SQLite:

1
twint -u USUARI --database tweets.db

Per exemple, emmagatzemar tots els tweets de l’usuari idelista a una base de dades idealists.db:

Tota la informació queda emmagatzemada a la base de dades. La pots consultar amb SQLite3 (terminal o programa) o a través de llibreries específiques que tenen cada llenguatge de programació:

Obtenir tots els tweets d’un usuari que continguin telèfons i correus electrònics:

1
twint -u USUARI --email --phone

Per exemple, de l’usuari SoftCloudCorp1:

Obtenir tots els Tweets publicats en un radi en concret donades unes coordenades (l’usuari ha de tenir activada la geolocalització):

1
twint -g="X,Y,RADI"

Per exemple, en un radi d’1 km al voltant de París:

Obtenir el llistat de seguidors d’un usuari:

1
twint -u USUARI --followers

Per exemple, els usuaris que segueixen a idealista:

Obtenir el llistat dels comptes que segueix un usuari:

1
twint -u USUARI --following

Per exemple, els usuaris als quals idealista segueix:

Obtenir tots els tweets que l’usuari ha afegit com a preferits (màxim 3200 tweets):

1
twint -u USUARI --favorites

Obtenir tots els retweets de l’usuari (màxim 900 tweets):

1
twint -u USUARI --retweets

Codi en Python

Twint no només es pot controlar a través de comandes de terminal, sinó també pots desenvolupar codis personalitzats en Python per fer cerques més específiques i automatitzar-les.

El codi està dividit bàsicament en dues parts. A la primera, determines els paràmetres de configuració que utilitzaràs en un futur per obtenir la informació. Hi ha molts paràmetres disponibles, com Username, Search o Location.

La segona part consisteix a llençar la petició de Twint amb tots els paràmetres determinats a la part de configuració. Hi ha els següents tipus:

  • .Search: realitza una cerca
  • .Following: obté els followings
  • .Followers: obté els followers
  • .Profile: obté informació del perfil
  • .Favorites: obté els preferits

Tant de la primera com de la segona part hi ha moltíssims arguments. Pots trobar-los tots a la wiki: API

A continuació, pots veure alguns exemples per fer cerques automatitzades:

El següent codi busca a tots els tweets de l’usuari idealista la paraula encinar:

1
2
3
4
5
6
7
8
9
import twint

# Configuració inicial
c = twint.Config()
c.Username = "idealista" # Usuari a buscar
c.Search = "encinar" # Paraula a buscar

# Iniciar cerca utilitzant els paràmetres de la configuració
twint.run.Search(c) 

El resultat de l’execució és el mateix que el segon exemple de l’apartat anterior:

El següent codi obté els followers de l’usuari idealista:

1
2
3
4
5
6
7
8
import twint

# Configuració inicial
c = twint.Config()
c.Username = "idealista" # Usuari a buscar

# Obtenció dels followres utilitzant els paràmetres de la configuració
twint.run.Followers(c) 

El resultat de l’execució és l’obtenció de tots els followers:

Els dos exemples anteriors són molt bàsics, compliquem-los una mica. El següent codi obté els usuaris que segueixen a l’objectiu que tinguin més de 2000 seguidors i els emmagatzema en un fitxer CSV:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import twint

# Configuració inicial
c = twint.Config()
c.Username = "donpiso_oficial" # Usuari a buscar
c.Store_object = True
c.User_full = True # Indica que obtingui el perfil complet dels usuaris

# Obtenció dels followres utilitzant els paràmetres de la configuració
twint.run.Followers(c)

# Emmagatzema el resultat de la comanda anterior a una variable
target_followers = twint.output.users_list

# Per cada usuari, obté només els que tenen més de 2000 seguidors
K_followers = []

for user in target_followers:
    if user.followers >= 2000:
        K_followers.append(user)

# Emmagatzema el resultat en un CSV
with open('K_followers.csv', 'w') as output:
    output.write('id,username,followers, following\n')
    for u in K_followers:
        output.write('{},{},{},{}\n'.format(u.id, u.username, u.followers, u.following))

A la terminal et sortirà el perfil de cada follower:

I al CSV només els que tenen més de 2000 seguuidors:

Particularment en aquest exemple, només tens en compte els seguidors. No obstant això, podries modificar el codi per obtenir els usuaris que tinguin quelcom al perfil o als seus tweets.

Amb el següent codi pots obtenir tots els hashtags publicats d’un usuari. A l’exemple, s’ha limitat a 100 tweets per facilitar l’extracció:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import twint

hashtags = {}

c = twint.Config()
c.Username = "donpiso_oficial" # Usuari a buscar
c.Hide_output = True # No mostrar resultats per terminal
c.Limit = 100 # Límit de tweets
c.Store_object = True

twint.run.Search(c)

# Obté tots els tweets i els guarda a una variable
tweets = twint.output.tweets_list

# Itera cada tweet i l'emmagatzema a un diccionari
for t in tweets:
    for h in t.hashtags:
        # Si existeix, incrementa el contador, sinó crea l'entrada i el posa a 1
        if h in hashtags.keys():
        	hashtags[h] += 1
        else:
            hashtags[h] = 1

# Emmagatzema els resultats a un CSV
with open('hashtags.csv', 'w') as output:
    output.write('hashtag,count\n')
    for h in hashtags:
        output.write('{},{}\n'.format(h, hashtags[h]))

Al CSV pots veure com és senzill fer una classificació dels TOP hashtags més utilitzats:

Incrementant més la complexitat, podries fusionar els dos codis anteriors i extreure els hashtags més utilitzat de cada usuari. Això pot ser útil per saber si els usuaris formen part d’una comunitat o si publiquen contingut molt similar.

Per exemple, dels followers amb més de 2000 seguidors del compte donpiso_oficial emmagatzemats al CSV que hem extret abans, pots buscar els tweets de cada un d’ells i obtenir-ne els hashtags:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import twint

custom_query = ""
hashtags = {}

# Obté els usuaris del CSV i els guarda al diccionari "hashtags"
with open('K_followers.csv', 'r') as f:
    # Igonora la primera línia del CSV, són els noms de les columnes
    f.readline()
    line = f.readline()
    while line:
        user = line.split(',')[1]
        hashtags.update({user: {}})
        line = f.readline()

# Per cada usuari, busca els hashtags que ha publicat
for user in hashtags:
    c = twint.Config()
    c.Username = user # Usuari a buscar
    c.Hide_output = True # No mostrar resultats per terminal
    c.Limit = 100 # Límit de tweets
    c.Store_object = True

    twint.run.Search(c)

    # Obté tots els tweets i els guarda a una variable
    tweets = twint.output.tweets_list

    # Itera cada tweet i l'emmagatzema a un diccionari
    for t in tweets:
        for h in t.hashtags:
            # Si existeix, incrementa el contador, sinó crea l'entrada i el posa a 1
            if h in hashtags[user].keys():
            	hashtags[user][h] += 1
            else:
                hashtags[user][h] = 1

# Emmagatzema els resultats a un CSV
with open('hashtags.csv', 'w') as output:
    output.write('username,hashtag,count\n')
    for user in hashtags:
        for h in hashtags[user]:
            output.write('{},{},{}\n'.format(user, h, hashtags[user][h]))

El resultat ordenat és el següent:

Com pots veure, la quantitat dels hashtags més utilitzats és la mateixa en alguns dels usuaris. Això podria fer pensar que o bé els tweets són iguals (ho porta la mateixa persona) o publiquen de manera sincronitzada (mateixa empresa).

Aquests codis són només un exemple molt petit del que es pot arribar a extreure amb Twint i amb codis personalitzats. Es podria arribar a fer programes que investiguessin quantes vegades es citen els usuaris en una discussió per esbrinar quin d’ells té més impacte, es podrien extreure dades per saber les tendències o quan s’han publicat els tweets i fer un cronograma o inclús organitzar usuaris per comunitats segons hashtags o paraules claus que utilitzen als seus tweets.

Instal·lació

Aquesta eina funciona a través de la terminal i és compatible amb qualsevol sistema operatiu que pugui executar Python i instal·lar tots els requeriments. Funciona sense cap problema en sistemes Linux.

Els prerequisits són:

  • Python 3.6;
  • aiohttp;
  • aiodns;
  • beautifulsoup4;
  • cchardet;
  • elasticsearch;
  • pysocks;
  • pandas (>=0.23.0);
  • aiohttp_socks;
  • schedule;
  • geopy;
  • fake-useragent;
  • py-googletransx.

No cal que instal·lis manualment tots els requisits, hi ha 3 mètodes diferents que els instal·len tots i després l’eina:

Git

1
2
3
git clone https://github.com/twintproject/twint.git
cd twint
pip3 install . -r requirements.txt

Pip

1
pip3 install twint

o

1
pip3 install --user --upgrade git+https://github.com/twintproject/twint.git@origin/master#egg=twint

Pipenv

1
pipenv install git+https://github.com/twintproject/twint.git#egg=twint

Referències

Aquesta entrada està sota la llicència CC BY 4.0 que pertany a l'autor.