Tweepyでツイート検索した結果をCSVに出力するサンプルコードを紹介したいと思います。
前準備
tweepyのバージョン3~4で関数の書き方などがかなり異なるので、バージョンを固定します。他の記事などでコードで「 ‘API’ object has no attribute ‘search’」などのエラーが出る場合は恐らくは参照しているtweepyのバージョンが違います。
# tweepyのインストール $pip install tweepy==3.8.0
このコードはTwitterAPI V1.1のものでしか動作しないので注意してください。基本的に2021年9月以降にAPI鍵を作成された方はevaluateに権限をアップグレードしないと使用できません。V2のAPI鍵しか持っていない場合は以下の記事を参考にしてください。
関連記事:TweepyとTwitter API V2を使って大量のツイート+詳細情報をスクレイピングする
Tweepyでツイート検索結果をCSVに出力するサンプルコード
# ライブラリのインポート
import tweepy
from datetime import datetime,timezone
import pytz
import pandas as pd
# Twitterの認証
#********には自分自身のAPIキーなどを入力してください
consumer_key = 'xxx'
consumer_secret = 'xxx'
access_token = 'xxx'
access_token_secret = 'xxx'
#Twitterの認証
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# ”wait_on_rate_limit = True” 利用制限にひっかかた時に必要時間待機する
api = tweepy.API(auth,wait_on_rate_limit=True)
# 検索条件の設定
search_word = 'コロナ min_faves:200'
#何件のツイートを取得するか
item_number = 150
#検索条件を元にツイートを抽出
tweets = tweepy.Cursor(api.search,q=search_word, tweet_mode='extended',result_type="mixed",lang='ja').items(item_number)
#関数: UTCをJSTに変換する
def change_time_JST(u_time):
utc_time = datetime(u_time.year, u_time.month,u_time.day, \
u_time.hour,u_time.minute,u_time.second, tzinfo=timezone.utc)
#タイムゾーンを日本時刻に変換
jst_time = utc_time.astimezone(pytz.timezone("Asia/Tokyo"))
# 文字列で返す
str_time = jst_time.strftime("%Y-%m-%d_%H:%M:%S")
return str_time
#抽出したデータから必要な情報を取り出す
#取得したツイートを一つずつ取り出して必要な情報をtweet_dataに格納する
tw_data = []
for tweet in tweets:
#ツイート時刻とユーザのアカウント作成時刻を日本時刻にする
tweet_time = change_time_JST(tweet.created_at)
create_account_time = change_time_JST(tweet.user.created_at)
#tweet_dataの配列に取得したい情報を入れていく
tw_data.append([
tweet.id,
tweet_time,
tweet.full_text,
tweet.favorite_count,
tweet.retweet_count,
tweet.user.id,
tweet.user.screen_name,
tweet.user.name,
tweet.user.description,
tweet.user.friends_count,
tweet.user.followers_count,
create_account_time,
tweet.user.following,
tweet.user.profile_image_url,
tweet.user.profile_background_image_url,
tweet.user.url
])
#取り出したデータをpandasのDataFrameに変換
#CSVファイルに出力するときの列の名前を定義
labels=[
'ツイートID',
'ツイート時刻',
'ツイート本文',
'いいね数',
'リツイート数',
'ID',
'ユーザー名',
'アカウント名',
'自己紹介文',
'フォロー数',
'フォロワー数',
'アカウント作成日時',
'自分のフォロー状況',
'アイコン画像URL',
'ヘッダー画像URL',
'WEBサイト',
]
#tw_dataのリストをpandasのDataFrameに変換
df = pd.DataFrame(tw_data,columns=labels)
#CSVファイルに出力する
file_name=f'tw_data_{search_word}.csv'
#CSVファイルを出力する
df.to_csv(file_name,encoding='utf-8-sig',index=False)
関連記事:自然言語処理が簡単にできる「nlplot」でツイートデータを可視化・分析する

コメント