TwitterScraper, Twitter’dan herhangi bir konu ile ilgili tweet çekmek için yazılmış bir Python kütüphanesidir. Peki bu çekilen tweetler ile ne yapabiliriz? Aslında bu kullanım amacına göre değişiklik gösteren bir şeydir. “Duygu Analizi Nasıl Yapılır? “ yazımızda duygu analizi yapmak için Twitter, Facebook gibi birçok sosyal medyada veri bulunduğunu söylemiş fakat bunların nasıl kullanılacağına dair bir şey söylememiştik. Bu yazımızda ise duygu analizi için gerekli olan veriyi Twitter’dan nasıl çekeriz, bunu öğreniyor olacağız.
Twitter, geliştiricilere verilerine erişmek ve kullanmak için REST API ve bunun yanı sıra, verilere gerçek zamanlı erişmek için kullanılabilecek bir Streaming API da sağladı.
Twitter verilerine erişmek için yazılan yazılımların çoğu API (uygulama programlama arayüzü) gerektirir. Bu da beraberinde bir sınırlama getirir. Ayrıca bu API’lara erişmek de hızlıca halledilebilecek bir şey değildir. Geliştirici olarak Twitter’a başvurmanız ve bu verilere erişmek için geçerli bir sebebiniz olmalıdır.
Twitter’ın arama API’ı ile her 15 dakikada bir yalnızca 180 istek gönderebilirsiniz. İstek başına maksimum 100 tweet, saatte ise 4 X 180 X 100 = 72.000 tweet alabileceğiniz anlamına gelir. Twitterscraper ile bu sayıdan bağımsız, internet hızınız ve bant genişliğiniz yeterli olduğu sürece istediğiniz kadar veri çekebilirsiniz.
Twitter Arama API’sının diğer büyük bir dezavantajı ise, yalnızca son 7 gün içinde yazılan tweetlere erişebiliyor olmanızdır. Bu, modelinde eski verilere yer vermek isteyenler için oldukça can sıkıcı bir durumdur. Twitterscrapper ile böyle bir sınırlama da yoktur.
İçindekiler
Kurulumu
TwitterScraper’ı yüklemek için aşağıdaki kodu çalıştırmanız gerekmektedir.
pip install twitterscraper
Diğer bir yol ise, GitHub deposunu indirip ardından aşağıdaki kodu çalıştırmaktır.
python setup.py install
Eğer Docker kullanıyorsanız:
docker build -t twitterscraper:build
ve Docker Container’ınızı şu komutla çalıştırabilirsiniz:
docker run --rm -it -v/<PATH_TO_SOME_SHARED_FOLDER_FOR_RESULTS>:/app/data twitterscraper:build <YOUR_QUERY>
Komut Satırı
Aşağıdaki kodu komut satırında çalıştırarak tweetleri JSON (Javascript Nesne Gösterimi) formatında saklayabilirsiniz.
twitterscraper "Trump OR Clinton" --limit 100 --outputs=tweets.json
Limiti istediğiniz gibi değiştirebilir ve tweetleri arama sırasında Ctrl + C tuşlarına basarak arama işlemini iptal edebilirsiniz. İşlem tamamlandıktan sonra ise çekilen tweetler JSON dosyanızda güvenle saklanır.
Python Kodu
Her yazımızda değindiğimiz gibi, tabi ki bu yazımızda da Python koduna yer vereceğiz. Haydi başlayalım!
Gerekli kütüphaneleri yüklemekle başlayabiliriz:
from twitterscraper import query_tweets import datetime as dt import pandas as pd
Gerekli kütüphaneleri yazımızın ilerleyen kısmında detaylıca açıklıyor olacağız. Sıradaki adıma geçebiliriz.
query_tweets() modülümüz parametre olarak şunları alır:
- limit: Verilen limit sayısına ulaşınca veri çekme işlemini durdurur. Veriler 20’lik gruplar halinde alındığından, bu her zaman 20’nin katı olacaktır. Belirlediğiniz limite ulaşmadan Ctrl + C tuşlarına basarak çekme işlemini durdurabilirsiniz.
- lang: Belirlenen dildeki verilere erişir. Şu anda 30’dan fazla dil tarafından desteklenmektedir. Tam liste için help mesajını yazdırabilirsiniz.
- begindate: Belirlediğiniz tarihten itibaren veri çekmeye başlar. Formatınız YYYY-AA-GG şeklinde olmalıdır. Bu parametrenin varsayılan değeri 2006-03-21 dir.
- enddate: Belirlediğiniz tarihlere kadar olan verileri çeker. Formatınız YYYY-AA-GG şeklinde olmalıdır. Bu parametrenin varsayılan değeri bugündür.
- query: Hakkında arama yapmak istediğiniz kelimeyi string halinde yazınız.
TwitterScraper için parametre değerlerimizi tanımlayabiliriz. Ben bu Python uygulamasında “Atatürk” ile atılmış tweetleri çekmek istiyorum ve DateTime kütüphanesini kullanarak başlangıç ve bitiş günlerimi belirliyorum.
limit = 1000 begin_date = dt.date(2019,4,15) end_date = dt.date(2019,4,18) lang = "turkish" query = "Atatürk"
Parametreleri de tanımladıktan sonra, artık tweetleri çekme aşamasına geçebiliriz.
ataturk= query_tweets(query,begindate=begin_date,enddate=end_date,limit=limit,lang=lang)
Yukarıda da göreceğimiz gibi 1027 tane tweeti çektik, fakat tweetler şuan Tweet objesi olarak gözüküyor. Pandas kütüphanesini kullanarak DataFrame’e dönüştürüyoruz.
df_ataturk = pd.DataFrame(t.__dict__ for t in ataturk)
Dönüştürdükten sonra ortaya 21 sütunlu bir DataFrame ortaya çıktı. Bu sütunlar:
df_ataturk.columns OUTPUT: Index(['screen_name', 'username', 'user_id', 'tweet_id', 'tweet_url', 'timestamp', 'timestamp_epochs', 'text', 'text_html', 'links', 'hashtags', 'has_media', 'img_urls', 'video_url', 'likes', 'retweets', 'replies', 'is_replied', 'is_reply_to', 'parent_tweet_id', 'reply_to_users'], dtype='object')
Ben DataFrame’de sadece tweetleri almak istiyorum, bunun için bir filtreleme işlemi yapmam gerekiyor.
df = df[['text']]
İlk 6 tweetimize bakalım.
Sonuç olarak, Twitter’dan veri çekmek için API’a gerek duymadan, Twitterscraper kütüphanesini kullanarak halletmiş olduk. Parametreler değiştirilerek daha da farklı sonuçlar elde edilebilir.
Sanırım ben beceremedim, tweetleri alamıyorum kütüphaneleri kurdum ama colab da hata da almadan tweetleri de alamadan kalakaldım açıkçası 🙂
!pip install twitterscraper
!pip install pandas
from twitterscraper import query_tweets
import datetime as dt
import pandas as pd
limit = 1000
begin_date = dt.date(2019,4,15)
end_date = dt.date(2019,4,18)
lang = “turkish”
query = “Atatürk”
ataturk=query_tweets(query,begindate=begin_date,enddate=end_date,limit=limit,lang=lang)
df_ataturk = pd.DataFrame(t.__dict__ for t in ataturk)
Bu kodlarla kaldım yardım edebilir misiniz json formatında tweet alabilmem için
Hata mesajını da paylaşabilir misiniz?
Kodunuzu kendim denediğimde de aynı sorunu aldım. Farklı parametreler kullanmama rağmen bir türlü tweetleri çekemedim. Kaynak kodlarını incelerken aşağıda vereceğim issue (sorunlarla) karşılaştım. Sadece bizde olan bir sıkıntı değil. Son zamanlarda twitterscrapper kütüphanesinde genel bir sorun var. Sorun üzerine çalışılıyormuş. Çözümlenirse buradan bilgilendiririm.
Issue #1: https://github.com/taspinar/twitterscraper/issues/350
Issue #2: https://github.com/taspinar/twitterscraper/issues/344
Issue #3: https://github.com/taspinar/twitterscraper/issues/343
Issue #4: https://github.com/taspinar/twitterscraper/issues/339
Ağustos ayında da benzer bir sorun yaşanmış. Çözülecektir diye düşünüyorum.
umarım çözülür tezimde kullanıyordum ne yapacağımı bilmiyorum şu an teşekkür ederim Özgür Bey
Bende şuan aynı sorunu yaşıyorum, umarım çözülür, bilgiler için teşekkürler
Merhaba, 24 kasım itibariyle sorun hala çözülmemiş gözüküyor. Bu konuda bir bilgilendirme var mı veya farklı bir yöntem önerebilir misiniz? Teşekkürler.
Merhaba, haklısınız, sorun hala çözülmemiş durumda. Sorun hakkında bir açıklama da yapılmadı henüz. Alternatif olarak Tweepy veya TweetScraper kütüphanelerini deneyebilirsiniz.
TweetScraper kurulumunu nasıl gerçekleştirebiliriz bilginiz var mı
Kazım merhaba,
TweetScraper’ı denemedim, bu sebeple bilgim yok.
Tam emin değilim ama Tweepy API key istiyor. Biraz daha zahmetli olabilir ama Selenium kütüphanesine de bakabilirsiniz.
Selenium yazımıza da buradan ulaşabilirsiniz: https://teknoloji.org/selenium-kutuphanesi-nedir-nasil-kullanilir/
tweetscraper modülü için kurulumda da zorluklar çıkıyor, genelde açıklamalar sadece linux üzerine, bu konuda net sonuç alabileceğimiz içerik ya da bilginiz var mı?
Özgür hocam api olan sınırlı sayıda tweet çekmeye olanak sağlıyor, tweetscraper iyi bir çözüm ama onu da kurmayı çözemedim açıkçası 🙂
Merhabalar, haklısınız twitterscraper çok daha kullanışlı fakat galiba Twitter’ın API tarafındaki değişikliğinden sonra şu an çalışmıyor. Yukarıdaki kurulum kısmındaki şeyleri denediğinizde tam olarak nasıl bir hata alıyorsunuz. İsterseniz forum sayfamızda da paylaşabilirsiniz. Böylelikle daha güzel fikir alışverişleri döner 😀
https://forum.teknoloji.org/#programlama.400
Üye oldum hocam teşekkür ederim, twitterscraper dışında da bir çözüm buldum api kullanmadan sayı-request sınırı olmadan veri çekebiliyorum. Hepinize ilgilendiğiniz yardımcı olduğunuz için çok teşekkür ederim artık ben de teknoloji.org un takipçisiyim :))))
Hem üye olmana, hem de çözüm bulmana çok sevindim. Çözümü bizimle de paylaşabilir misin?
TWINT adlı modül ile çözebildim. Sanırım Twitter’in yeni API çalışmaları nedeniyle TwitterScraper – TweetScraper gibi kütüphaneler etkisiz kalmış durumda ancak Twint ile -şimdilik cmd üzerinden de olsa- tweetleri çekebiliyorum. Mantık yine aynı hatta daha sade bir syntax ile işlemi halletmek mümkün. Query yapabilmek için bir kelime girdim ve –since — until araçları ile spesifik tarihler arasındaki verileri çekebildim ve .json formatında kayıtlayabildim. Türlü operantlarla zenginleştirebiliyoruz bu query leri. Çözüm hakkında teknoloji.org bünyesinde daha detaylı bir yazı kaleme alabilirim veya alınabilir illa ki benim yazmam gerekmez 🙂