search
LoginSignup
26

More than 3 years have passed since last update.

posted at

updated at

Tweepyで大量のフォロワー情報を取得する

背景

お遊びで、Twitterの某アカウントのフォロワー情報を大量(約20万件)に取得する必要が生じた。
一部トラブルが生じたので、似たようなことをする時の備忘として、方法を残しておく。

環境

  • Windows 10 Pro
  • Python 3.6.6
  • Tweepy 3.6.0

準備

ソースコード

最初は、Qiitaで探した記事を参考に以下のようなコードを動かした。

get_followers1.py
auth = tweepy.OAuthHandler('XXXXX...', 'XXXXX...')
auth.set_access_token('XXXXX...', 'XXXXX...')
api = tweepy.API(auth, wait_on_rate_limit=True)
followers_ids = tweepy.Cursor(api.followers_ids, id='XXX', cursor=-1).items()
for follower_id in followers_ids:
    try:
        user = api.get_user(follower_id)
        user_info = [user.id_str, user.screen_name, user.name, user.created_at]
        print(user_info)
    except tweepy.error.TweepError as e:
        print(e.reason)

ところが、数時間後、以下のようなエラーが発生した。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
~(中略)~
    raise ConnectionError(err, request=request)
tweepy.error.TweepError: Failed to send request: ('Connection aborted.', OSError("(10054, 'WSAECONNRESET')",))

プロセスは終了コード 1 で完了しました

どうやら認証後、接続時間が長すぎたらしい。
なので、カーソルを保存し、一定周期で認証し直すように変更した。

get_followers2.py
cursor = -1
while cursor != 0:
    auth = tweepy.OAuthHandler('XXXXX...', 'XXXXX...')
    auth.set_access_token('XXXXX...', 'XXXXX...')
    api = tweepy.API(auth, wait_on_rate_limit=True)
    itr = tweepy.Cursor(api.followers_ids, id='XXX', cursor=cursor).pages()
    try:
        for follower_id in itr.next():
            try:
                user = api.get_user(follower_id)
                user_info = [user.id_str, user.screen_name, user.name, user.created_at]
                print(user_info)
            except tweepy.error.TweepError as e:
                print(e.reason)
    except ConnectionError as e:
        print(e.reason)
    cursor = itr.next_cursor

今度は最後まで上手くいった。

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
What you can do with signing up
26