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_tweepy, 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の権限によってはフィールドにも使えるものと使えないものもあります。)

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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

  2. brown より:

    >>> 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)

    Traceback (most recent call last):
    File “”, line 1, in
    NameError: name ‘start_time_twint’ is not defined

    コードを拝見させていただき、実行してみましたが、
    上記エラーでつまづいて、先に進めませんでした。
    アドバイスいただけたら幸いです。

    初心者で、現在勉強中です。
    Twitterは、Essentialです。

  3. brown より:

    権限をElevatedに昇格させました

  4. brown より:

    お返事ありがとうございます。
    無事作動しました。

    触り始めなので、コピペしながら修正で、エラーの連続ですが、
    今後、拝見させていただきます。

    感謝申し上げます。

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

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

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