LoginSignup
23
40

More than 5 years have passed since last update.

【Python】条件指定してツイートの情報を取得し、CSVファイルに出力

Last updated at Posted at 2019-04-09

はじめに

TwitterAPIを用いて、人気のツイートにどの様な特徴があるかなどのデータ分析をする際に、ツイートを取得するかと思いますが、その際のツイートの検索条件の指定の仕方、及び取得したツイートの情報をCSVファイルに出力させる方法を説明していきたいと思います。

TwitterAPIを使用するにあたっての説明についてはこちらの記事を参考にしてください

検索条件の指定

まずは、検索条件の指定の仕方から。

Twitterの検索術に関してはこちらを参考にしました。

では、コードを書いていきましょう。

tweet.py
import tweepy
from config import CONFIG

CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

tweet_data = [] #取得したツイートを格納するリスト

for tweet in api.search(q="映画 min_faves:500 min_retweets:500 exclude:retweets",tweet_mode='extended',count=10):
    try:
        tweet_data.append([tweet.id, tweet.user.screen_name, tweet.created_at, tweet.full_text.replace('\n',''), tweet.favorite_count, tweet.retweet_count, tweet.user.followers_count, tweet.user.friends_count])
    except Exception as e:
        print(e)


APIのキーの設定や、インスタンスの作成の説明は割愛させていただきます。
そちらの説明に関してはこちらの記事を参考にしてください。

まずは、取得したツイートを格納するリストを作成します。
tweet_data = []

次に、api.search()でツイートの検索を行なっているわけですが、この引数の記述で検索条件を細かく指定しています。

q=の部分から見ていきましょう。
"映画 min_faves:500 min_retweets:500 exclude:retweets"と記述されていますが、それぞれの意味について解説します。

映画 検索するキーワード
min_faves:500 いいね数が500以上
min_retweets:500 リツイート数が500以上
exclude:retweets 検索結果にリツイートを含まない

この検索結果にリツイートを含まないというのは、ツイートを取得する際にリツイートも含んでしまうと、同じツイート内容が重複するため、それを回避するために指定しています。

他にも、filter:imagesや、filter:videosなどをq=に含めると、画像付きのツイートや動画付きのツイートで検索することもできます。

次に、tweet_mode='extended'を指定することで、ツイートの本文が長い場合に、途切れない様にしています。
※デフォルトでは途切れてしまうため。

取得したツイートの中から扱う値の指定

下記のコードの部分で取得したツイートをリストに格納しています。

 tweet_data.append([tweet.id, tweet.user.screen_name, tweet.created_at, tweet.full_text.replace('\n',''), tweet.favorite_count, tweet.retweet_count, tweet.user.followers_count, tweet.user.friends_count])



.appendする際に、引数を指定していますが、ここで取得したツイートの中から扱う値の指定をしています。

tweet.id ツイートIDの取得
tweet.user.screen_name ユーザーネームの取得
tweet.created_at ツイート日時の取得
tweet.full_text.replace('\n','') ツイート本文を改行を取り除いた上で取得
tweet.favorite_count いいね数の取得
tweet.retweet_count リツイート数の取得
tweet.user.followers_count フォロワー数の取得
tweet.user.friends_count フォロー数の取得

これで上記で指定した内容が、tweet_datacountで指定した分格納されていることになります。

では、ツイートの取得ができたので、CSVファイルに書き出しましょう。

CSVファイルへの書き出し


tweet.py
import csv #CSVライブラリの読み込み

## 以下省略

## 一番下に追記
with open('tweet_test.csv', 'w',newline='',encoding='utf-8') as f:
    writer = csv.writer(f, lineterminator='\n')
    writer.writerow(["id","user","created_at","text","fav","RT","follower","follows"])
    writer.writerows(tweet_data)
pass


上記のコードを追記してください。

CSVファイルへの書き出しについての細かい説明に関しては、こちらの記事を参考にしてください。

簡単な説明だけします。

with open('tweet_test.csv', 'w',newline='',encoding='utf-8') as f:

この'tweet_test.csv'の部分でcsvのファイル名を指定しています。

writer.writerow(["id","user","created_at","text","fav","RT","follower","follows"])

writer.writerow()で、カラム名を設定しています。

先ほど行なった作業で

ツイートID
ユーザーネーム
ツイート日時
ツイート本文
いいね数
リツイート数
フォロワー数
フォロー数

の順番で値を格納しているので、この値に合わせて、カラム名を指定しています。

そして、writer.writerows(tweet_data)で書き出すデータを指定しています。

完成したコード

tweet.py
import tweepy
import csv
from config import CONFIG

CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)

tweet_data = [] #取得したツイートを格納するリスト

for tweet in api.search(q="映画 min_faves:500 min_retweets:500 exclude:retweets",tweet_mode='extended',count=10):
    try:
        tweet_data.append([tweet.id, tweet.user.screen_name, tweet.created_at, tweet.full_text.replace('\n',''), tweet.favorite_count, tweet.retweet_count, tweet.user.followers_count, tweet.user.friends_count])
    except Exception as e:
        print(e)

with open('tweet_test.csv', 'w',newline='',encoding='utf-8') as f:
    writer = csv.writer(f, lineterminator='\n')
    writer.writerow(["id","user","created_at","text","fav","RT","follower","follows"])
    writer.writerows(tweet_data)
pass



このプログラムを実行すると、映画というワードを含み、ファボとRTが500以上でRTを含まないツイートが10件取得でき、取得したツイートをCSVファイルに書き出せます。

これでいくつかの条件で取得し、取得したデータをグラフにしたり、形態素分析に繋げられるかと思います。

23
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
40