前提・実現したいこと
Python tweepyを使ったtwitterフォロワー情報抽出の処理速度をあげたいです。
任意のアカウントのフォロワーについて、以下の情報をCSVに書き出したいと考え、
検索して出てきたものを利用して作成いたしました。
・@以下のID
・アカウント名
・フォロー数
・フォロワー数
・アカウント開設日時
・プロフィールテキスト
無事情報をCSVに書き出すことが出来たのですが、処理速度が遅く、
目標としている100万~200万規模のフォロワー情報を得るには、
10日以上時間がかかる想定です。
遅くとも終日、可能であれば12時間以内に処理を済ませたいと
考えております。
発生している問題・エラーメッセージ
前述の通りエラーは発生していませんが、処理速度が遅く困っています。
作成中のCSVを確認したところ、4000件/1h くらいの速度になっています。
エラーメッセージはありません。
該当のソースコード
Python
1import tweepy 2import csv 3 4target_id = "xxxxxxxx" 5 6CONSUMER_KEY = "xxxxxxxx" 7CONSUMER_SECRET = "xxxxxxxx" 8ACCESS_TOKEN = "xxxxxxxx" 9ACCESS_TOKEN_SECRET = "xxxxxxxx" 10auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 11auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 12api = tweepy.API(auth ,wait_on_rate_limit = True) 13 14followers_ids = tweepy.Cursor(api.followers_ids, id = target_id, cursor = -1).items() 15followers_ids_list = [] 16for followers_id in followers_ids: 17 followers_ids_list.append(followers_id) 18 19with open('xxxxxxxx.csv', 'a', newline="", encoding='utf-8_sig') as f: 20 writer = csv.writer(f) 21 22 for followerId in followers_ids_list: 23 followers_detail = [] 24 25 try: 26 user = api.get_user(followerId) 27 userid = user.screen_name 28 username = user.name 29 friend_num = str(user.friends_count) 30 follower_num = str(user.followers_count) 31 start_date = str(user.created_at) 32 descript = user.description 33 # recent_tweet = api.user_timeline(followerId)[0].text 34 followers_detail.extend([userid, username, friend_num, follower_num, start_date, descript]) 35 writer.writerow(followers_detail) 36 37 except Exception as e: 38 continue 39
試したこと
人数によって単位時間あたりの処理件数が変わるかと思い、1万~30万規模まで
試行しましたが、殆ど変わりませんでした。
また、取得情報が多いのかと考え、アカウント名のみで試しましたが、
これも変わりませんでした。
CSVに出力するのをプログラムの外側に出したりもしたのですが、特に効果を
実感することは出来ませんでした。
補足情報(FW/ツールのバージョンなど)
Pythonはver.3.7.4と記載されたものをインストールしています。
当方は学生時代に研究手段として少しRubyをかじった程度の知識しかなく、
Pythonについては殆ど知識がない状態です。
易しく教えて頂けますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/29 07:28
2019/08/29 08:14 編集
2019/08/29 08:49
2019/08/29 09:10
2019/09/02 05:48