Home Python ile Twitter Scraping (Twint)
Post
Cancel

Python ile Twitter Scraping (Twint)

Merhaba, son zamanlarda birçok insanın bu işle ilgilenmesinden dolayı Twitter’dan veri çekmek hayli zorlaşmış durumda. Limitlere takılmayan, doğru sonuç üreten bir scrapper yazmak istediğiniz zaman artık Twitter API’den başka bir yol yokmuş gibi görünse de Twint kütüphanesi bu işi muazzam derecede başarıyor.

Twint kütüphanesi hakkında

Twint kütüphanesi son zamanlarda kullandığım en sorunsuz twitter scraping aracı. Diğer kütüphanelere baktığımızda çoğunun çalışmadığını veya API key istediğini görüyoruz. Twint ise ne API erişimi istiyor ne de bizi saçma sapan hatalarla uğraştırıyor.

Başlıca özellikleri şu şekilde;

  • Neredeyse bütün tweetleri çekebilir. (yaklaşık 3200 tweet ile sınırlı)
  • Tor ağı desteği
  • Verileri dataframe’e kaydetme (pandas kullanarak)
  • Hızlı ve basit kurulum
  • Kullanmak için Twitter’a giriş yapmaya gerek yok, anonim olarak bütün fonksiyonlarını kullanabilirsiniz.

Kurulumu ve kullanımı

Kurmak için:

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

Komut satırından kullanmak isterseniz:

twint -u hesap_adi (tanımladığınız hesabın bütün tweetlerini listeler)

twint -u hesap_adi -s kelime (tanımladığınız hesapta X kelimeyi içeren bütün tweetleri listeler)

twint -u hesap_adi --following (tanımladığınız hesabın takip ettiği kullanıcılar listeler)

gibi örnekler mevcut, isterseniz projenin Github sayfasına bakarak daha detaylı inceleyebilirsiniz.

Kod içerisinde Twint çalıştırmak

Can sıkıntısından yazdığım bir kodu aşağıya paylaşıyorum elimden geldiğince karmaşık yerlere yorum ekledim, kod merkezinize ekleyebilirsiniz. Herkese kolay gelsin.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import requests
import twint
import pandas as pd
from tqdm import tqdm
import time
from requests.packages.urllib3.exceptions import InsecureRequestWarning


def get_verified_users():
'''
twitter mavi tikli kullanıcıları
@verified kullanıcısında takip ediyor.
'''
    c = twint.Config()
    c.Username = "verified"
    c.Store_csv = True
    c.Output = "verified_users.csv"
    twint.run.Following(c)


def get_unshorten_link(url):
'''
twitter hesabında ekli olan URL,
bir kısaltma servisinden geçiyor,
gerçek URL'ye erişmek için.
'''
    try:
        real_url = requests.head(url, allow_redirects=True, timeout=10,
                                 verify= False)
    except:
        real_url = "No website"
        return real_url
    return real_url.url


def library_caller(username):
    user_attr = []
    username = username.replace("\n", "")
    if username == 'username':
        return
    config = twint.Config()
    config.Username = username
    config.Store_object = True
    config.Store_object_users_list = user_attr
    config.Hide_output = True
    config.Retries_count = 3
    try:
        twint.run.Lookup(config)
    except:
        return
    if user_attr[0].url:
        web = get_unshorten_link(user_attr[0].url)
    else:
        web = "No Website"
    return username, web


def main():
    file_username = open('verified_users.csv', 'r')
    usernames = file_username.readlines()
    file_username.close()
    file = open("verified_users_data.csv", 'a', encoding="utf-8", newline='')
    for username in usernames:
        data = library_caller(username)
        try:
            if data:
                data_frame = pd.DataFrame({"Username": [data[0]], "Website": [data[1]]})
                data_frame.to_csv(file, header=file.tell() == 0, index=False)
        except:
            continue


if __name__ == '__main__':
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    get_verified_users()
    main()




This post is licensed under CC BY 4.0 by the author.