【问题标题】:Get All Follower IDs in Twitter by Tweepy通过 Tweepy 获取 Twitter 中的所有关注者 ID
【发布时间】:2013-06-30 04:30:24
【问题描述】:

是否可以获得拥有超过一百万粉丝的账户的完整粉丝列表,例如麦当劳?

我使用 Tweepy 并遵循代码:

c = tweepy.Cursor(api.followers_ids, id = 'McDonalds')
ids = []
for page in c.pages():
     ids.append(page)

我也试试这个:

for id in c.items():
    ids.append(id)

但我总是收到“超出速率限制”错误,并且只有 5000 个关注者 ID。

【问题讨论】:

    标签: python twitter tweepy


    【解决方案1】:

    为了避免速率限制,您可以/应该在下一个关注页面请求之前等待。看起来很老套,但很有效:

    import time
    import tweepy
    
    auth = tweepy.OAuthHandler(..., ...)
    auth.set_access_token(..., ...)
    
    api = tweepy.API(auth)
    
    ids = []
    for page in tweepy.Cursor(api.followers_ids, screen_name="McDonalds").pages():
        ids.extend(page)
        time.sleep(60)
    
    print len(ids)
    

    希望对您有所帮助。

    【讨论】:

    • 它有效,但不适用于大量关注者。我确实尝试了一个拥有 600K 关注者的帐户并不断收到有关“超出速率限制”的错误消息......知道如何克服这个问题吗?
    • 也许你不需要为最后一页睡觉。 if len(page) == 5000: time.sleep(60)
    • 这很好用,我可以检索大量的追随者 id,但我想知道我们能否在 tweepy 或您的代码中获得 next_cursor 数值
    • @an 看看这个test。可能会有所帮助。
    • 我不断收到代码 34。文档是否更改/
    【解决方案2】:

    在建立连接时使用速率限制参数。 api会在限速范围内自行控制。

    睡眠暂停还不错,我用它来模拟人类并在一个时间范围内分散活动,并将 api 速率限制作为最终控制。

    api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True, compression=True)
    

    还添加 try/except 以捕获和控制错误。

    示例代码 https://github.com/aspiringguru/twitterDataAnalyse/blob/master/sample_rate_limit_w_cursor.py

    我将我的密钥放在一个外部文件中以便于管理。

    https://github.com/aspiringguru/twitterDataAnalyse/blob/master/keys.py

    【讨论】:

    • 好建议。谢谢!
    【解决方案3】:

    我使用此代码,它适用于大量追随者: 有两个功能,一个用于在每个睡眠期后保存关注者 ID,另一个用于获取列表: 这是一个小小姐,但我希望是有用的。

    def save_followers_status(filename,foloowersid):
        path='//content//drive//My Drive//Colab Notebooks//twitter//'+filename
        if not (os.path.isfile(path+'_followers_status.csv')):
          with open(path+'_followers_status.csv', 'wb') as csvfile:
            filewriter = csv.writer(csvfile, delimiter=',')
    
    
        if len(foloowersid)>0:
            print("save followers status of ", filename)
            file = path + '_followers_status.csv'
            # https: // stackoverflow.com / questions / 3348460 / csv - file - written -with-python - has - blank - lines - between - each - row
            with open(file, mode='a', newline='') as csv_file:
                writer = csv.writer(csv_file, delimiter=',')
                for row in foloowersid:
                    writer.writerow(np.array(row))
                csv_file.closed
    
    def get_followers_id(person):
        foloowersid = []
        count=0
    
        influencer=api.get_user( screen_name=person)
        influencer_id=influencer.id
        number_of_followers=influencer.followers_count
        print("number of followers count : ",number_of_followers,'\n','user id : ',influencer_id)
        status = tweepy.Cursor(api.followers_ids, screen_name=person, tweet_mode="extended").items()
        for i in range(0,number_of_followers):
            try:
                user=next(status)
                foloowersid.append([user])
                count += 1
            except tweepy.TweepError:
                print('error limite of twiter sleep for 15 min')
                timestamp = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime())
                print(timestamp)
                if len(foloowersid)>0 :
                    print('the number get until this time :', count,'all folloers count is : ',number_of_followers)
                    foloowersid = np.array(str(foloowersid))
                    save_followers_status(person, foloowersid)
                    foloowersid = []
                time.sleep(15*60)
                next(status)
            except :
                print('end of foloowers ', count, 'all followers count is : ', number_of_followers)
                foloowersid = np.array(str(foloowersid))
                save_followers_status(person, foloowersid)      
                foloowersid = []
        save_followers_status(person, foloowersid)
        # foloowersid = np.array(map(str,foloowersid))
        return foloowersid
    

    【讨论】:

      【解决方案4】:

      alecxe 的回答很好,但是没有人参考文档。回答问题的正确信息和解释位于Twitter API documentation。来自文档:

      结果以 5,000 个用户 ID 为一组给出,并且可以在后续请求中使用 next_cursor 值浏览多个结果“页面”。

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2021-04-14
        • 1970-01-01
        • 2021-02-27
        • 2012-05-25
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 2013-12-24
        相关资源
        最近更新 更多