Twitter scraper przy użyciu nltk

 In Technicznie

Pierwsze kroki

Żeby twitter scraper w ogóle działał, trzeba założyć konto dev na Twitterze. Możemy wykorzystać do tego nasze istniejące konto lub założyć nowe (Twitter wymaga podania swojego numeru telefonu przy zakładaniu konta). Jak już mamy konto twitterowe musisz założyć swoją aplikację i konto developerskie klikając w https://apps.twitter.com. Po stworzeniu aplikacji należy wygenerować klucze dostępu.

Musimy sprawdzić czy Access permission są ustawione na read and write

Klucze dostępu należy przechować w pliku credentials.txt. Jeżeli umieścisz go w folderze z projektem, to pamiętaj o tym, żeby dodać go do .gitignore, żeby przypadkiem nie wypchnąć go do repozytorium, ani nigdzie ich nie upubliczniać. W razie gdyby klucze dostały się w niepowołane ręce można je zresetować. Teraz należy załadować ścieżkę do tego pliku do zmiennych środowiskowych. Robimy to za pomocą komendy w bashu:

export TWITTER="/dir/to/your/keys"
Instalacja dodatkowych paczek

Należy zainstalować paczkę twython

Publiczny strumień danych

 

Pierwszym sposobem, dzięki któremu nasz twitter scrapper będzie wyciągał dane, jest podłącznie się do publicznego strumienia danych. Wyciąga on jednak tylko najnowsze tweety, ale korzystanie z niego jest proste i mało skomplikowane:

from nltk.twitter import Twitter

tw = Twitter()

tw.tweets(
    keywords=’Trump, love’,
    follow=[‘759251’, ‘1367531’],
    limit=1,
    lang=’en’,
    to_screen=False)

keywords: są to słowa oddzielone przecinkami po których szukamy tweetów,

follow: jest to lista stringów z numerami UserId profili na Twitterze jakie chcemy przeszukiwać. Jeżeli interesują cię specyficzne profile, to możesz dowiedzieć się jakie mają id poprzez tą stronę: http://gettwitterid.com/

limit: liczba tweetów które chcesz pobrać,

lang: język w jakim tweety były napisane,

to_screen: jeżeli chcemy zapisywać tweety to trzeba ustawić tą flagę na False. Pliki są zapisywane w folderze /home/user_name/twitter-files/ w formacie json. Zapisane pliki zawierają różne informacje np: informacje czy jest to Re-tweet, ilość polubień, ilość ReTweetów. Zawierają także informacje o użytkowniku, który wysłał tego posta, więc należy uważać z tymi danymi.

Ten sposób jest prosty i łatwy, ale nie daje nam za dużo kontroli. Zaraz pokażę jak można w lepszy sposób to robić.

 

Twitter REST API vs Twitter Streaming API

Dzięki NLTK mamy dostęp do dwóch możliwości pobierania danych z Twittera. Poprzez klasę Query wysyłamy RESTowe zapytania na odpowiednie endpointy. Możemy dzięki temu nie tylko pobierać tweety, ale także zarządzać kontem do którego jesteśmy podłączeni. Jesteśmy jednak ograniczeni poprzez ilość uderzeń do API oraz pobieramy tylko najnowsze tweety.

 

Dzięki Streaming API nie mamy ograniczenia w ilości otrzymywanych danych. Możemy filtrować tweety po słowach kluczowych (parametr track), śledzić ID użytkowników (parametr follow), możemy także przekazać, żeby przesyłał tylko tweety z danego języka (parametr lang), który domyślny jest angielski. Jeżeli używamy streaming API trzeba zarejestrować jeden z dwóch handlarów: TweetWriter służący do zapisy lub TweetViewer wypisujący tweety na konsole.

from pprint import pprint
from nltk.twitter import, credsfromfile, Query,  Streamer, TweetWriter

oauth = credsfromfile()

REST API

client = Query(**oauth)
tweets = client.search_tweets(keywords='ACTA2')
for tweet in tweets:
    print(tweet['text'])

Streaming Api

client = Streamer(**oauth)
client.register(TweetWriter(limit=10, repeat=True))
client.filter(follow='759251')
Parsowanie json’a do csv

NLTK dostarcza nam dodatkowo przyjazny parser json’ów ściągniętych z Twittera do pliku csv.

from nltk.twitter import json2csv
with open(input_path,'r') as json_file:
    json2csv(
        json_file,
        './twitter_files/tweets.csv',
        ['created_at', 'favorite_count', 'id', 'in_reply_to_status_id',
        'in_reply_to_user_id', 'retweet_count', 'retweeted',
        'text', 'truncated', 'user.id'])

Biblioteka do Twittera udostępnia przez nltk daje nam jeszcze więcej możliwości której tu nie poruszyłem np.: ściąganie tweetów tylko z danej geolokalizacji, więc zachęcam do dalszego poznawania jej na własną rękę.

 

Zdjęcie z https://www.pexels.com/photo/advertising-alphabet-business-communication-262543/.

Recent Posts