Python

TweepyとTwitter API V2を使って大量のツイート情報をスクレイピングする

この記事は約5分で読めます。

 

以前TwiterAPI V2を使用してツイート検索を行う記事を投稿したのですが、V2だと従来のV1.1と比較してツイート件数や取得できる情報に制限があったので今回はそれをできるだけなくす方法を紹介したいと思います。

 

以前の記事:【Python】TwitterAPI V2のBearer tokenを使ってツイート検索をしてみる

 

前準備:Tweepyのバージョン確認

 

本記事はTweepy バージョン4.0以上を想定しています。3.Xだと動作しないので注意してください。

PCにインストールされているtweepyのバージョンは以下で確認できます。

 

import tweepy
print(f'tweepyのバージョンは{tweepy.__version__}です')

参照:Tweepyで 「API object has no attribute search;」のエラー出る原因と解決法

 

バージョンが3.Xの場合は以下のコマンドでバージョンをアップグレードしてください。

 

$ pip install tweepy --upgrade

 

Tweepy Paginatorを使用して100件以上のツイートを取得する

 

Tweepyには4.0から

 

tweepy.Paginator

 

を利用すると、ページネーションの処理を書かずに100件以上のツイートが取得できます。

書き方は以下のようになります。

 

import tweepy
import pandas as pd
from datetime import datetime,timedelta

BAERER = 'xxxx'   # Twitter Developerで取得した自分のBearer Token
query = 'コロナワクチン lang:ja -is:retweet'       # 検索するキーワード 検索条件指定してOK
limit = 500                # 取得したいツイート数

# 取得対象のツイートの時間幅を指定する この例では実行前の24時間としています。
# iso形式のUTC時間で指定しないと正しく時間指定ができない模様。
# 指定した時間幅に、limitで指定した件数以上のツイートがあってもlimit以上は取得しません。

now = datetime.now()
now = now.replace(minute=0, second=0, microsecond=0)
end_time_tweepy = str(now.isoformat())+'+09:00'
start_time = now - timedelta(days=1) 
start_time_tweepy = str(start_time.isoformat())+'+09:00'

client = tweepy.Client(BAERER)

df_tweet = pd.DataFrame()
for tweet in tweepy.Paginator(client.search_recent_tweets, query=query, start_time=start_time_twint, end_time=end_time_tweepy,
                              tweet_fields=['id','created_at','text','author_id','lang',], 
                              max_results=100).flatten(limit=limit):
    #print(tweet.text)
    df_tweet = pd.concat([df_tweet, pd.DataFrame([tweet.data])], ignore_index=True)

print(df_tweet)

 

コードの解説ですがまず

query = ‘コロナワクチン lang:ja -is:retweet’

の部分で検索クエリを指定しています。

 

今回はキーワードに加えて日本語のみ・リツイート削除を設定しています。

クエリのパラメーターについては以下が詳しくまとまっています

ERROR 404 - ページが見つかりません

 

続いて

tweet_fields=[‘id’,’created_at’,’text’,’author_id’,’lang’,]

の部分は取得する情報についてを設定しています。

ここを何も指定しないとツイートのテキスト情報しか取得できません。

 

ここで使えるフィールドは以下の公式ドキュメントを参照してください

 

公式ドキュメント:https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user

 

(APIの権限によってはフィールドにも使えるものと使えないものもあります。)

 

 

 

コメント

  1. […] 関連記事:TweepyとTwitter API V2を使って大量のツイート+詳細情報をスクレイピングする […]

タイトルとURLをコピーしました