【问题标题】:Working around error 104 and Twitter rate limiting解决错误 104 和 Twitter 速率限制
【发布时间】:2015-05-27 02:46:35
【问题描述】:

我正在从事一项研究项目,该项目涉及分析来自 Twitter 的大量数据。该项目是使用 Tweepy 在 Python 中构建的。正如您可能想象的那样,我必须在 Twitter 速率限制器的范围内非常密切地工作。因此,我的身份验证代码如下所示。

auth1 = tweepy.OAuthHandler("...", "...")
auth1.set_access_token("...", "...")
api1 = tweepy.API(auth1, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)  

在我对小规模缩减运行的请求超出限制之前,它在停止和等待方面做得非常好。但是,当我尝试在我的完整数据集上运行该程序时,我最终在程序处于休眠状态时收到此错误:

tweepy.error.TweepError: Failed to send request: ('Connection aborted.', error(104, 'Connection reset by peer'))

我的研究告诉我,发生这种情况是因为 Twitter 正在断开连接,我需要发现错误。我如何捕捉到这个错误,重新连接并让我的程序从中断的地方继续?欢迎任何建议。

【问题讨论】:

    标签: python error-handling tweepy rate-limiting


    【解决方案1】:

    twitter断开连接错误是socket异常,是IOError异常的一种特殊情况。为了捕捉到你需要做类似的事情

    auth = tweepy.OAuthHandler(… # set up your oauth here
    try:
        stream = tweepy.Stream(auth=auth, listener=SomeListener()) # start the stream
    except IOError, ex:
        print 'I just caught the exception: %s' % ex
    

    如果它工作在一个 while True 循环中,并增加回退,以便在重新连接之间提供一些暂停。参考 link

    【讨论】:

    • 您的来源与我正在查看的来源相同,但我无法完全理解它。谢谢你把它写成我能理解的形式。我会尝试运行它,看看我想出了什么。
    【解决方案2】:

    我也尝试过以相同的方式将 Tweepy 调用包装在 while True 循环中,但我也遇到了重新连接的问题(在某些情况下,此解决方案无法同样解决问题)。否则,我考虑过在出现错误时切换 Auth(连接到 Tweepy API 实例,此处为“twapi”),它似乎可以正常工作:

    ...
    while True:
        try:
            users_stream = twapi.lookup_users(screen_names=[scrname_list_here])
        except tweepy.error.TweepError, ex:
            time.sleep(120)
            global twapi
            global switch_auth
            if switch_auth == False:
                twapi = tweepy.API(auths[auth_id+1])  
                switch_auth = True
            elif switch_auth == True:
                twapi = tweepy.API(auths[auth_id])    
                switch_auth = False
            continue
        break
     ...
    

    通过使用布尔变量switch_auth是可能的(以防出现与重新连接失败相关的Tweepy错误)来“切换”Tweepy API模块的auth输入(可以假设存储在auths列表中)来解决问题。 当达到研究的速率限制时,可以使用相同的技术来“切换”身份验证。我希望它会有用,试试吧!

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多